Skip to content

Fix Newton self-collisions being uncontrolled via the deprecated PhysX cfg (#7164) - #7217

Merged
kellyguo11 merged 1 commit into
isaac-sim:release/3.0.0from
AntoineRichard:antoiner/backport-7164-to-release-3.0.0
Aug 20, 2026
Merged

Fix Newton self-collisions being uncontrolled via the deprecated PhysX cfg (#7164)#7217
kellyguo11 merged 1 commit into
isaac-sim:release/3.0.0from
AntoineRichard:antoiner/backport-7164-to-release-3.0.0

Conversation

@AntoineRichard

Copy link
Copy Markdown
Collaborator

Summary

Backports #7164 to release/3.0.0.

  • Mirrors deprecated PhysX self-collision configuration to the Newton articulation-root schema.
  • Migrates the Allegro Hand, Shadow Hand, and Kuka Allegro configs to explicit PhysX and Newton articulation fragments.
  • Declares the backend package dependencies required by isaaclab_assets and fixes core package installation order.
  • Preserves a single articulation root during fixed-root relocation, including pre-authored Newton schema state.
  • Initializes the kitless benchmark articulation consistently with production articulation objects.

The backport is patch-identical to the merged #7164 diff and contains no unrelated develop history.

Type of change

  • Bug fix (non-breaking change which fixes an issue)

Test plan

  • source/isaaclab/test/sim/test_schemas.py: 44 passed
  • Kitless benchmark semantics: 18 passed
  • PhysX fixed-base initialization: 4 passed
  • Newton fixed-base initialization: 4 passed
  • Install command parsing: 57 passed
  • uv run isaaclab -f
  • Changelog fragment validation against release/3.0.0

Checklist

  • I have read and understood the contribution guidelines
  • I have run the pre-commit checks
  • My changes generate no new warnings
  • I have added tests that prove the fix is effective
  • I have added changelog fragments for every touched package
  • My name already exists in CONTRIBUTORS.md

…X cfg (isaac-sim#7164)

## Summary
-
`ArticulationRootPropertiesCfg`/`PhysxArticulationRootPropertiesCfg.enabled_self_collisions`
only authored `physxArticulation:enabledSelfCollisions`. Newton's schema
resolver checks `newton:selfCollisionEnabled` first and only falls back
to the PhysX attribute when it's unauthored, so the deprecated cfg's
setting silently never reached Newton simulations.
- `modify_articulation_root_properties` now mirrors
`enabled_self_collisions` onto `newton:selfCollisionEnabled` (applying
`NewtonArticulationRootAPI`) whenever it's set, so the deprecated cfg
controls self-collisions on both backends.
- Migrated `ALLEGRO_HAND_CFG`, `SHADOW_HAND_CFG`,
`SHADOW_HAND_NEWTON_CFG`, and `KUKA_ALLEGRO_CFG` off the deprecated cfg
to explicit `PhysxArticulationCfg` + `NewtonArticulationCfg` fragments.
Several of the reorientation/handover tasks built on these hands
(`Isaac-Reorient-Cube-Allegro*`, `Isaac-Reorient-Cube-Shadow-Direct*`,
`Isaac-Shadow-Handover-Direct`) default to the `newton_mjwarp` preset,
so this was a real training-time gap, not just a hypothetical one.
- Adds `isaaclab_physx`/`isaaclab_newton` as declared dependencies of
`isaaclab_assets` (needed for the fragment imports above).

## Test plan
- [x] `test_physx_articulation_root_writes_self_collisions` extended to
assert `newton:selfCollisionEnabled` / `NewtonArticulationRootAPI` are
authored; confirmed it fails without the fix and passes with it.
- [x] `source/isaaclab/test/sim/test_schemas.py` (43 tests) and
`test_articulation_fragments.py` (26 tests) pass.
- [x] `source/isaaclab_assets` test suite passes (`test_asset_configs`
loads all three migrated robot configs).
- [x] `test_initialization_hand_with_tendons` (Shadow Hand, PhysX
backend) passes with the fragment-based `articulation_props`.
- [x] `uv run isaaclab -f` passes (formatting, changelog fragments).

---------

Co-authored-by: Kelly Guo <kellyg@nvidia.com>
@AntoineRichard
AntoineRichard requested a review from a team August 20, 2026 15:38
@github-actions github-actions Bot added the asset New asset feature or request label Aug 20, 2026
@greptile-apps

greptile-apps Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

The PR backports Newton self-collision handling and fixed-root schema relocation while migrating several hand assets to explicit PhysX/Newton configuration fragments.

  • Mirrors deprecated PhysX self-collision settings to the Newton articulation-root schema.
  • Preserves authored Newton properties when relocating a fixed articulation root.
  • Migrates Allegro, Kuka Allegro, and Shadow Hand assets to backend-specific fragments.
  • Adds and correctly orders the asset package’s backend dependencies.
  • Aligns kitless benchmark articulation initialization with production object state.

Confidence Score: 5/5

The PR appears safe to merge, with no concrete changed-code failure identified.

The schema relocation, backend-specific asset fragments, dependency ordering, and benchmark initialization are internally consistent, and the investigated compatibility concerns were either contradicted by repository usage or lacked a reachable failing condition.

Important Files Changed

Filename Overview
source/isaaclab/isaaclab/sim/schemas/schemas.py Relocates authored Newton root state alongside the existing articulation-root move and mirrors deprecated self-collision configuration after relocation; no actionable defect was established.
source/isaaclab/test/sim/test_schemas.py Extends coverage for Newton self-collision mirroring and verifies that fixed-root relocation leaves one root with the expected schema state.
source/isaaclab/isaaclab/cli/commands/install.py Moves Newton and PhysX packages ahead of assets in the core installation order to satisfy newly declared dependencies.
source/isaaclab_assets/pyproject.toml Declares the two backend packages required by the migrated asset configuration modules.
source/isaaclab_assets/isaaclab_assets/robots/allegro.py Replaces the legacy scalar articulation configuration with explicit PhysX and Newton fragments while preserving prior solver settings.
source/isaaclab_assets/isaaclab_assets/robots/kuka_allegro.py Migrates Kuka Allegro articulation settings to supported backend-specific fragments without changing existing PhysX values.
source/isaaclab_assets/isaaclab_assets/robots/shadow_hand.py Migrates both Shadow Hand variants to explicit PhysX/Newton fragments; current consumers do not rely on the former scalar shape.
source/isaaclab_ov/isaaclab_ov/benchmark/assets/runtime.py Initializes the synthetic articulation’s simulation-config attribute consistently for kitless benchmark use.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  AssetCfg["Asset articulation_props"] --> PhysXCfg["PhysxArticulationCfg"]
  AssetCfg --> NewtonCfg["NewtonArticulationCfg"]
  PhysXCfg --> PhysXSchema["PhysxArticulationAPI"]
  NewtonCfg --> NewtonSchema["NewtonArticulationRootAPI"]
  LegacyCfg["Deprecated PhysX root cfg"] --> Mirror["Self-collision mirror"]
  Mirror --> NewtonSchema
  FixRoot["fix_root_link relocation"] --> ParentRoot["Parent articulation root"]
  PhysXSchema --> ParentRoot
  NewtonSchema --> ParentRoot
Loading

Reviews (1): Last reviewed commit: "Fix Newton self-collisions being uncontr..." | Re-trigger Greptile

@isaaclab-review-bot isaaclab-review-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isaac Lab Review Bot

The backport correctly aligns Newton self-collision authoring, fixed-root relocation, asset dependencies, and install ordering, but two compatibility issues need attention: referenced-layer Newton properties can trigger hard failures during relocation, and public hand configurations now expose a list where callers previously received a single articulation config object.

  • Design and architecture: The mirror-after-relocation ordering preserves a single articulation root, and the new isaaclab_assets backend imports are reflected in package dependencies and installation order. However, Newton relocation must account for authored opinions originating outside the current USD edit target rather than treating unsuccessful removal as fatal.
  • API: The public Allegro, Shadow Hand, and Kuka Allegro configurations change spawn.articulation_props from a single config object to a fragment list. The assets changelog should explicitly document this type change and provide migration guidance for downstream code that mutates articulation properties in place.
  • Implementation: The Newton schema state is flattened to the relocated parent, but IsAuthored() includes referenced-layer opinions while RemoveProperty() operates on the current edit target. Raising on an unremovable referenced property can therefore abort fixed-root spawning; cleanup should tolerate or explicitly handle properties not authored in the editable layer.

Minor fixes needed. Posted 2 actionable findings inline.

Automated review; human maintainers own approval decisions.

if not prop.FlattenTo(parent_prim):
raise RuntimeError(f"Failed to move '{prop.GetPath()}' to '{parent_prim.GetPath()}'.")
for prop in newton_properties:
if not articulation_prim.RemoveProperty(prop.GetName()):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Warning · Implementation — Hard failure removing referenced-layer Newton properties

prop.IsAuthored() is true for opinions coming from a referenced robot USD, but RemoveProperty only removes specs in the current edit target. For assets that pre-author newton:* on the root link, fix_root_link=True can abort spawning with RuntimeError, unlike the adjacent PhysX cleanup which tolerates failure. Prefer warning and skipping when the spec is not editable in the current edit target.

sleep_threshold=0.005,
stabilization_threshold=0.0005,
),
articulation_props=[

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Warning · Api — articulation_props value type changed to list

ALLEGRO_HAND_CFG.spawn.articulation_props (and the same field in shadow_hand.py and kuka_allegro.py) changes from a single cfg instance to a list of fragments, so downstream in-place overrides such as robot.spawn.articulation_props.solver_position_iteration_count = 4 now fail on a list. Call this type change out explicitly in the isaaclab_assets changelog fragment with migration guidance for such overrides.

@kellyguo11 kellyguo11 changed the title Backport #7164 to release/3.0.0 Fix Newton self-collisions being uncontrolled via the deprecated PhysX cfg (#7164) Aug 20, 2026
@kellyguo11
kellyguo11 merged commit 6f4d91a into isaac-sim:release/3.0.0 Aug 20, 2026
46 of 49 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

asset New asset feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants