Skip to content

Use native OVPhysX collision isolation on CUDA - #6948

Draft
kellyguo11 wants to merge 5 commits into
isaac-sim:developfrom
kellyguo11:kellyg/limit-direct-physx-collision-filtering
Draft

Use native OVPhysX collision isolation on CUDA#6948
kellyguo11 wants to merge 5 commits into
isaac-sim:developfrom
kellyguo11:kellyg/limit-direct-physx-collision-filtering

Conversation

@kellyguo11

@kellyguo11 kellyguo11 commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Description

Use explicit USD collision groups in manually cloned direct-workflow environments only when native environment-ID isolation is unavailable:

  • Isaac Sim PhysX always keeps explicit filtering because its replication path uses useEnvIds=False.
  • CPU OVPhysX keeps explicit filtering because environment IDs require GPU dynamics and GPU broadphase.
  • CUDA OVPhysX skips explicit filtering and uses its native environment-ID isolation.

Isaac Lab's managed OVPhysX configuration enables GPU dynamics and GPU broadphase on CUDA. Its public OvPhysxCfg does not expose useEnvIds, so registered tasks cannot disable that isolation through their preset configuration.

This change:

  • applies the backend/device condition consistently at all 12 affected task and standalone-example call sites;
  • preserves each workflow's global ground or terrain collision paths;
  • leaves config-driven InteractiveScene filtering unchanged as the shared fallback;
  • expands the isolated Cartpole regression across Isaac Sim PhysX and OVPhysX on both CPU and CUDA, checking collision-isolation structure in all four cases and constant-effort actuation consistency on CUDA.

This follows up on #6855 and commit 05f68ac.

Type of change

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

Screenshots

Not applicable.

Validation

  • Cartpole backend/device regression: 4 passed (isaacsim_physx and ovphysx, each on CPU and CUDA).
  • Confirmed the CPU OVPhysX regression fails with the previous Isaac-Sim-only condition because no /World/collisions groups are authored while native environment IDs are disabled.
  • Confirmed the CUDA OVPhysX regression fails with the previous broad PhysX condition because redundant /World/collisions groups are authored.
  • uv run --no-sync isaaclab -f
  • Changelog fragment gate against upstream/develop

Checklist

  • I have read and understood the contribution guidelines.
  • I have run the pre-commit checks.
  • Documentation changes are not required for this behavior-only fix.
  • My changes generate no new warnings.
  • I have added tests that prove the fix is effective.
  • I have added a changelog fragment for every touched package.
  • My name already exists in CONTRIBUTORS.md.

OVPhysX assigns native environment IDs during GPU replication, so
manually authoring USD collision groups is redundant. Keep explicit
collision filtering for the Isaac Sim PhysX replication path and cover
both backends with a Cartpole actuation regression.
@github-actions github-actions Bot added the isaac-lab Related to Isaac Lab team label Aug 7, 2026
@kellyguo11
kellyguo11 marked this pull request as ready for review August 7, 2026 04:40
@kellyguo11
kellyguo11 requested a review from a team August 7, 2026 04:40
@greptile-apps

greptile-apps Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

The PR narrows explicit USD collision filtering in manually cloned direct environments to the Isaac Sim PhysX manager, allowing OVPhysX to retain native environment-ID isolation.

  • Replaces broad PhysX substring checks with an exact physxmanager check across 12 direct environments and examples.
  • Adds an isolated Cartpole regression covering actuation consistency and backend-specific collision-group behavior for Isaac Sim PhysX and OVPhysX.
  • Adds the corresponding isaaclab_tasks changelog fragment.

Confidence Score: 5/5

The PR appears safe to merge with no actionable correctness, security, or quality issues identified.

The exact backend identifier matches the Isaac Sim PhysX manager contract, excludes OVPhysX as intended, and the added regression validates both backend-specific collision state and consistent actuation.

Important Files Changed

Filename Overview
source/isaaclab_tasks/isaaclab_tasks/core/cartpole/cartpole_direct_env.py Narrows collision filtering to the exact Isaac Sim PhysX manager while preserving the existing manually cloned scene flow.
source/isaaclab_tasks/test/core/test_cartpole_direct_physx_actuation.py Adds isolated regression coverage for backend-specific collision isolation and consistent Cartpole actuation across environments.
source/isaaclab_tasks/isaaclab_tasks/contrib/factory/factory_env.py Applies the backend-specific filtering condition to a manually cloned multi-asset direct environment.
scripts/demos/pick_and_place.py Keeps explicit filtering for Isaac Sim PhysX while allowing OVPhysX native clone isolation in the standalone demo.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Manually clone environments] --> B{physics_backend}
    B -->|physxmanager| C[Author explicit USD collision groups]
    B -->|ovphysxmanager| D[Use native environment-ID isolation]
    C --> E[Run direct environment]
    D --> E
Loading

Reviews (1): Last reviewed commit: "Merge branch 'develop' into kellyg/limit..." | 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 PR consistently narrows explicit collision filtering at all 12 manually cloned direct-workflow call sites from a broad PhysX substring match to the exact Isaac Sim PhysX manager identifier, while adding the required changelog fragment and a backend-isolated Cartpole regression.

  • Design and architecture: The backend-specific guard remains at the existing manual-cloning boundaries, preserving explicit filtering for physxmanager while allowing OVPhysX to use native environment-ID isolation. Repeating the backend literal across 12 sites remains a non-blocking maintenance tradeoff if the identifier changes later.
  • API: No public signatures, configuration fields, exports, defaults, or registrations change. Existing filter_collisions arguments remain intact, and the touched isaaclab_tasks package has the required patch changelog fragment.
  • Implementation: The 12 call-site replacements are consistent. The regression checks both producer paths by asserting backend-specific /World/collisions presence and consistent constant-effort Cartpole velocities in isolated simulator processes. Its fixed cuda:0 requirement without an explicit GPU marker is a residual CI portability risk, but no numbered actionable finding was supplied for acceptance.

No blocking issues. No inline issue met the actionable-evidence threshold; the assessment above records the review feedback.

Automated review; human maintainers own approval decisions.

OvPhysX environment-ID isolation requires GPU dynamics and GPU
broadphase. Keep USD collision filtering on CPU and native isolation
on CUDA.

Cover each PhysX backend/device pair with the Cartpole regression test.
@kellyguo11 kellyguo11 changed the title Limit direct filtering to Isaac Sim PhysX Use native OVPhysX collision isolation on CUDA Aug 7, 2026
@kellyguo11
kellyguo11 marked this pull request as draft August 7, 2026 16:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant