Skip to content

Fix root fixing on stages without omni.physx#6613

Closed
ooctipus wants to merge 1 commit into
isaac-sim:developfrom
ooctipus:zhengyuz/fix-kitless-root-joint
Closed

Fix root fixing on stages without omni.physx#6613
ooctipus wants to merge 1 commit into
isaac-sim:developfrom
ooctipus:zhengyuz/fix-kitless-root-joint

Conversation

@ooctipus

Copy link
Copy Markdown
Collaborator

Fix root fixing on stages without omni.physx

What

  • Adds create_world_fixed_joint(articulation_prim, stage) to
    source/isaaclab/isaaclab/sim/schemas/schemas.py: a pure-USD helper that authors the
    world-attached UsdPhysics.FixedJoint used to fix an articulation root link. It mirrors
    the behavior of omni.physx.scripts.utils.createJoint(joint_type="Fixed", from_prim=None, to_prim=...): unique joint naming, walking up to the first writable ancestor for
    instanceable/prototype/instance-proxy roots, anchoring localPos0/localRot0 at the root
    link's world pose, and setting break force/torque to the same effectively-unbreakable
    MAX_FLOAT value.
  • modify_articulation_root_properties (the fix_root_link spawn path) now calls this
    helper instead of importing omni.physx.scripts.utils.
  • PhysicsManager.fix_articulation_root delegates to the same helper instead of carrying
    its own inline joint-authoring copy, so there is a single authoring path for every
    backend.
  • Adds a kitless regression test,
    source/isaaclab/test/sim/test_schemas_kitless_fixed_joint.py, which runs on an
    in-memory USD stage without launching Isaac Sim / Kit.
  • Adds a changelog fragment: source/isaaclab/changelog.d/schemas-kitless-fixed-joint.rst.

Why

Spawning a fixed-base articulation (fix_root_link=True) previously imported
omni.physx.scripts.utils inside modify_articulation_root_properties. On stages where
omni.physx is not available (kitless / usd-core-only setups, e.g. Newton backends), that
import raises ModuleNotFoundError, breaking the spawn path. Authoring the joint directly
with plain USD removes the omni.physx dependency while preserving the authored result.
Sharing the helper with PhysicsManager.fix_articulation_root also removes a duplicated
copy of the joint-authoring logic.

This is a standalone correctness fix plus a regression test; no performance claims.

Evidence (existing upstream workflow)

Measured with the repository's own benchmark, identical command on the PR branch and its base (upstream/develop @ 5c42d39):

./isaaclab.sh -p scripts/benchmarks/runtime.py --task Isaac-Velocity-Flat-AnymalD --num_envs 1024 --num_frames 300 --seed 7

Platform: RTX 5090, Newton backend, CUDA graphs on.

arm wall (300 iters × 1024 envs) ms/iter
develop base 3.811 s 12.70
this PR n/a — CPU-side USD authoring fix, no runtime path touched

Runtime evidence is not applicable; the change fixes fix_root_link on kit-less stages. Correctness evidence: the new regression test (test_schemas_kitless_fixed_joint.py, 2 passed) exercises the plain-USD path end-to-end.

🤖 Generated with Claude Code

Author the world fixed joint with plain-USD API through a shared
create_world_fixed_joint helper so fix_root_link works on kit-less
stages (usd-core only). PhysicsManager delegates to the helper instead
of carrying its own authoring copy.
@github-actions github-actions Bot added bug Something isn't working isaac-lab Related to Isaac Lab team labels Jul 20, 2026
@ooctipus

Copy link
Copy Markdown
Collaborator Author

Closing — this is already covered by #6536.

@ooctipus ooctipus closed this Jul 20, 2026
@ooctipus
ooctipus deleted the zhengyuz/fix-kitless-root-joint branch July 20, 2026 00:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant