Repository navigation
Conversation
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Frame math, packing, selected copies, and PVA storage are repeated across the OV, PhysX, Newton, and experimental packages. This change gives each shared concept one owner and generates concrete Warp kernels before launch. Callers resolve attribute frequencies into arrays and selectors; backends bind native inputs and declare the outputs they support.
Ownership and composition
isaaclab.utils.warp.mathowns quaternion/frame operations, rigid-body transport, interval scaling, and COM-to-origin Jacobian shifts.memoryowns value-preserving concatenation, splitting, views, clearing, selected copy/fill, and selection masks. It contains no body/joint/velocity policy, frequency enum, or fixed 13-component layout. The existing rigid-object data contract owns the public state type.AttributeFrequency/view layouts; unequal joint-coordinate and joint-DoF layouts still require explicit conversion. Mathematical binary variants remain in their owner's module. Wrench and articulation-ordering specializations are declared before launch.PvaDataowns standard outputs. Pose/position/quaternion share one allocation; each linear/angular pair shares a spatial vector. Getters return cached Warp/Torch views and launch no packing kernels. The abstract data shell, backend data factory/classes, and forwarding exports are removed.PvaCfg.data_typesrequests outputs; each sensor backend declaressupported_data_types. Pose is required; velocity, acceleration, and projected gravity are independently optional. Eight import-time PVA variants reuse one equation writer. Unsupported requests fail before callbacks/resources are created. Pose-only Newton does not requestbody_qdd; acceleration-only still gathers angular velocity for transport.PvaDataand owns extra storage, updates, and resets. Core does not impose a universal feature set or extension registry.All in-tree callers migrate directly without compatibility aliases. Architecture gates reject retired owners/imports, duplicate definitions, reversed dependencies, and late kernel specialization. The Torch math/autograd API remains unchanged.
This also fixes the experimental reorientation task's xyzw quaternion indexing: identity-to-identity previously returned π and an X-axis half turn returned 0; the shared shortest-angle function returns 0 and π. Frame-transformer source outputs have one writer per environment. Wrench exclusive-cell accumulation avoids accidental Warp atomics.
API and lifecycle changes
Import
PvaDatafromisaaclab.sensors; backendPvaDataandBasePvaDataimports are removed. Import retired backend kernel helpers from their core math, memory, sensor, or wrench owner; importresolve_1d_maskfrom corememory.PVA component views now alias their grouped storage and may be noncontiguous. Reinitialization creates new views; retained old views retain old storage. Disabled outputs raise
NotImplementedError, while enabled outputs returnNonebefore allocation. Defaults still enable all four standard groups. Debug visualization requires acceleration.PVA initialization/reset/STOP now consistently produce identity pose, zero velocity/acceleration, and projected gravity along -Z until the next sample. This intentionally replaces Newton's zero-gravity initialization and zero-quaternion STOP state and clears stale OV/PhysX measurements on STOP. STOP also clears pending lazy sampling before native handles are released. Migration documentation and breaking-change markers cover these changes.
The cumulative change touches 145 files and removes 2,189 net lines. The frequency-independent memory revision removes 886 net production lines; added tests and documentation reduce its overall net reduction to 688 lines. There are no unmerged PR dependencies. The branch starts from
mainata9fb50e5388724a680bbc5c1f836917271605a99; its working branch lives only inooctipus/IsaacLab.Type of change
Validation
git diff --checkpassed. Clean Sphinx build passed with warnings treated as errors. Documentation imports real Warp type metadata instead of mocking it; specialization does not require launching GPU kernels.Measured tradeoffs
On RTX 5090 / Warp 1.17.0, full PVA output storage falls from 116 to 88 bytes per environment (24.1%); pose-only output uses 28 bytes. This excludes backend input/staging storage.
Against the preceding PR commit, a warm PVA update plus one pose read is 22–29% faster at 4,096/65,536 environments because getters no longer repack pose. With no pose reads, the update kernel is 10–24% slower (about 0.3–1.1 µs). These are medians of 21 alternating trials, each replaying 200 steps in a CUDA graph, with numerical parity checked before timing. They exclude allocation, compilation, Python dispatch, and downstream consumers; no overall simulation/training speedup is claimed.
Against
ff8e773bc9, the final memory revision measured packing within 1.2%, scalar fills 4–6% faster, and rank-3 trailing-component copies 52–54% faster. The general indexed copy is 0.09–0.13 µs slower (7–10%); the strided root copy is 0.18 µs slower on GPU, with cached eager cost changing from 2.87 to 2.90 µs. These ten cases use the same 21-trial/200-operation CUDA-graph method; eager root-copy timing uses seven trials of 2,000 calls. Architectural reuse is the primary benefit, not a universal speedup.Remaining validation: OVPhysX is unavailable in this environment, and the PhysX recorded-launch suite could not bootstrap because optional Isaac Sim Kit is absent. Full OV/PhysX simulator suites, actual PhysX wrench delivery, full training, and distributed runs remain unrun. Focused runs emitted dependency warnings, so the warning-free checklist remains unchecked. The PR remains draft for review and broader simulator validation.
Checklist
uv run isaaclab --formaton the changed files.CONTRIBUTORS.md.