-
Notifications
You must be signed in to change notification settings - Fork 3.5k
[Newton] Backend-agnostic task-space accessors for IK/OSC #5400
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
hujc7
merged 45 commits into
isaac-sim:develop
from
hujc7:jichuanh/ik-newton-compat-mvp
May 13, 2026
Merged
Changes from all commits
Commits
Show all changes
45 commits
Select commit
Hold shift + click to select a range
2340edc
Add backend-agnostic task-space accessors for IK/OSC on Newton
hujc7 19a3a34
Address Codex / Greptile / Isaac Lab bot review
hujc7 9ee21ac
Address Codex round 2 review (P2)
hujc7 0c5aafa
Add shape-contract regression tests for the new accessors
hujc7 982da9a
Address Codex round 3: backwards-compat + floating-base note
hujc7 8dda563
Revert: let Pink IK gravity-comp crash loudly on Newton
hujc7 b6c036d
Merge remote-tracking branch 'origin/develop' into jichuanh/ik-newton…
hujc7 150c2e0
[Newton] Apply COM->origin shift to get_jacobians; add accuracy tests
hujc7 cd0fb72
[Newton] Add J·q_dot link-origin contract test on Newton
hujc7 498205f
[Newton] Add IK and OSC tracking accuracy regression sentinels
hujc7 134efbb
[Newton] Tighten IK and OSC accuracy thresholds based on stress data
hujc7 5077e4a
[docs] Note Newton task-space tracking floor as known issue
hujc7 0c8d4aa
[Newton] Tighten IK/OSC accuracy tests by fixing setup artifacts
hujc7 b14585b
[PhysX] Add IK/OSC tracking accuracy tests for backend parity
hujc7 c21963d
[Test] Modularize Franka tracking-test setup with shared helpers
hujc7 f5eaf90
[Test] Feed real ee_vel to OSC; assert on tail mean not min
hujc7 44a2209
[Docs] Tighten BaseArticulation docstrings to interface contract
hujc7 a51e563
[Actions] Add num_jacobi_joints property to handle Jacobian dimension…
aravindskumar-nvidia d1d038d
[Newton] Deep-copy SIM_CFGs in sim fixture
aravindskumar-nvidia f1ec832
Merge pull request #2 from aravindskumar-nvidia/aravikumar/ik-qol
hujc7 47cab0f
Merge develop into jichuanh/ik-newton-compat-mvp
hujc7 a2a07ed
Make BaseArticulation.num_jacobi_joints abstract, add Newton override
hujc7 d25773a
Rename num_jacobi_joints to joint_to_jacobi_offset
hujc7 d6cfcff
Drop redundant offset comments in task-space action terms
hujc7 c0f3ba1
Address codex review: Newton floating-base gather + ovphysx changelog
hujc7 1d620d4
Move task-space dynamics accessors to BaseArticulationData properties
hujc7 8aa4bf6
Update changelog fragments for the data-layer migration
hujc7 2d62552
Strip floating-base DoF prefix on PhysX; remove joint_to_jacobi_offset
hujc7 77ae8a0
Align J/M/g DoF axis with industry standard; add num_base_dofs
hujc7 707ed8b
Update stale references to removed BaseArticulation.get_* methods
hujc7 b0d179f
Migrate tutorials and demos to data-layer task-space accessors
hujc7 2a814c1
Tighten task-space-accessor docstrings to focus on the contract
hujc7 25fc4c7
Merge remote-tracking branch 'origin/develop' into jichuanh/ik-newton…
hujc7 11f62c5
Collapse jacobi-axis indexing into one block per action term
hujc7 cb484c2
Add OSC + gravity-compensation behavioral tests
hujc7 10d2305
Merge remote-tracking branch 'origin/develop' into jichuanh/ik-newton…
hujc7 1e7fdc9
Merge remote-tracking branch 'origin/develop' into jichuanh/ik-newton…
hujc7 a70e2ef
Copy panda cfg before unfixing root in fixed-to-floating test
hujc7 9522603
Keep fixed-base velocity binding stable across resets
hujc7 2a34f85
Refine task-space accessor wiring and buffer naming
hujc7 3bbe3da
Drop repeated axis-convention comments in task-space action terms
hujc7 f35e091
Merge remote-tracking branch 'origin/develop' into jichuanh/ik-newton…
hujc7 1f5b5c9
Refresh PhysX task-space accessors on each timestamp advance
hujc7 44280a9
Merge branch 'develop' into jichuanh/ik-newton-compat-mvp
hujc7 7471978
Merge branch 'develop' into jichuanh/ik-newton-compat-mvp
kellyguo11 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
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
60 changes: 60 additions & 0 deletions
60
source/isaaclab/changelog.d/jichuanh-ik-newton-compat-mvp.minor.rst
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,60 @@ | ||
| Added | ||
| ^^^^^ | ||
|
|
||
| * Added :attr:`~isaaclab.assets.BaseArticulationData.body_link_jacobian_w` and | ||
| :attr:`~isaaclab.assets.BaseArticulationData.body_com_jacobian_w` properties, | ||
| exposing the per-body geometric Jacobian referenced at the link origin and | ||
| body center of mass respectively. The pair mirrors the existing | ||
| :attr:`~isaaclab.assets.BaseArticulationData.body_link_pose_w` / | ||
| :attr:`~isaaclab.assets.BaseArticulationData.body_com_pose_w` and | ||
| :attr:`~isaaclab.assets.BaseArticulationData.body_link_vel_w` / | ||
| :attr:`~isaaclab.assets.BaseArticulationData.body_com_vel_w` exposure pattern. | ||
| Backends without a native primitive raise :class:`NotImplementedError`. | ||
| * Added :attr:`~isaaclab.assets.BaseArticulationData.mass_matrix` property, | ||
| exposing the joint-space generalized mass matrix ``M(q)``. | ||
| * Added :attr:`~isaaclab.assets.BaseArticulationData.gravity_compensation_forces` | ||
| property, exposing the joint-space gravity-loading torque vector ``g(q)``. | ||
| * Added :attr:`~isaaclab.assets.BaseArticulation.num_base_dofs` — number of | ||
| free DoFs of the floating base (``0`` for fixed-base, ``6`` for floating- | ||
| base). Use it to map an actuated-joint index ``j`` to its column in the | ||
| Jacobian / mass matrix / gravity vector via ``j + num_base_dofs``. | ||
|
|
||
| The Jacobian / mass-matrix / gravity-comp DoF axis includes the floating- | ||
| base DoFs at the front: shape ``(N, num_jacobi_bodies, 6, num_joints + | ||
| num_base_dofs)`` for the Jacobian and ``(N, num_joints + num_base_dofs, | ||
| num_joints + num_base_dofs)`` for the mass matrix. This matches the | ||
| cross-library industry convention (Pinocchio's ``nv = 6 + n_actuated``, | ||
| Drake's ephemeral floating joint, MuJoCo's ``<freejoint/>``, RBDL's | ||
| ``JointTypeFloatingBase``, OCS2's ``generalizedCoordinatesNum = | ||
| 6 + actuatedJointsNum``, iDynTree's ``getFreeFloatingMassMatrix`` | ||
| returning ``(6 + dofs, 6 + dofs)``). | ||
|
|
||
| Changed | ||
| ^^^^^^^ | ||
|
|
||
| * Migrated :class:`~isaaclab.envs.mdp.actions.task_space_actions.DifferentialInverseKinematicsAction`, | ||
| :class:`~isaaclab.envs.mdp.actions.task_space_actions.OperationalSpaceControllerAction`, | ||
| and :class:`~isaaclab.envs.mdp.actions.rmpflow_task_space_actions.RMPFlowAction` | ||
| to fetch dynamic quantities through the new | ||
| :class:`~isaaclab.assets.BaseArticulationData` properties instead of the | ||
| PhysX-only ``root_view``. The OSC action term now also gates the | ||
| per-step mass-matrix and gravity-compensation fetches behind the | ||
| controller cfg's :attr:`inertial_dynamics_decoupling`, | ||
| :attr:`nullspace_control`, and :attr:`gravity_compensation` flags | ||
| so backends without a native primitive are not invoked when the | ||
| controller does not consume the result. | ||
| * Action terms (DiffIK / OSC / RMPFlow / Pink) compute their Jacobian | ||
| joint-axis indices via | ||
| ``[j + asset.num_base_dofs for j in joint_ids]``, which is ``0`` for | ||
| fixed-base and ``+6`` for floating-base. Pink IK previously hardcoded | ||
| a private ``_physx_floating_joint_indices_offset = 6``; that was | ||
| removed in favor of the cross-backend property. | ||
| * PhysX backend's :attr:`body_link_jacobian_w` applies the COM→origin shift to | ||
| PhysX's natively COM-referenced Jacobian. The previously-exposed | ||
| ``Articulation.get_jacobians()`` was a passthrough that returned the raw | ||
| COM-referenced Jacobian, while IK / OSC consumers also read | ||
| :attr:`body_link_pose_w` as the EE pose setpoint — a frame mismatch that | ||
| produced a ``ω × r_com_w`` per-body bias in tracking. The new property | ||
| reads the same engine buffer and applies the shift so ``J · q_dot`` matches | ||
| ``body_link_lin_vel_w``. Consumers that intentionally want the raw | ||
| COM-referenced form can read :attr:`body_com_jacobian_w`. |
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
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
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
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
Oops, something went wrong.
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is the gravity comp mixed into this PR?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just to unify the API to provide it in a backend agnostic way if newton side has plan to provide it in the physx way. Can be removed if there's no such plan