Skip to content

Fix Newton USD import dropping mjc joint attributes - #7386

Closed
AntoineRichard wants to merge 2 commits into
isaac-sim:developfrom
AntoineRichard:antoiner/fix-newton-mjc-frictionloss
Closed

Fix Newton USD import dropping mjc joint attributes#7386
AntoineRichard wants to merge 2 commits into
isaac-sim:developfrom
AntoineRichard:antoiner/fix-newton-mjc-frictionloss

Conversation

@AntoineRichard

@AntoineRichard AntoineRichard commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator

Description

Fixes #6829.

Joint Coulomb friction authored on a USD as mjc:frictionloss never reached the Newton solver: Isaac Lab's add_usd calls passed schema_resolvers=[SchemaResolverNewton(), SchemaResolverPhysx()], so mjc:* attributes were dropped and Model.joint_friction stayed 0.0 even though the same asset loads correctly through Newton core's Mjc resolver.

This adds SchemaResolverMjc to the schema-resolver list on the two paths that build the live physics model:

  • isaaclab_newton/physics/newton_manager.py (main stage import)
  • isaaclab_newton/cloner/replicate.py (clone-plan build path)

The visualization builder and the core ordering-resolver emulation are deliberately left untouched: schema resolvers only control which attributes are parsed, so they cannot affect rendering or joint ordering, and keeping them out makes the change minimal.

Safety: SchemaResolverMjc populates the core Model.joint_friction field and is a no-op-safe addition when a solver has not registered MuJoCo custom attributes (verified with a no-registration import), so the change is unconditional rather than MJWarp-gated.

Adds a kitless regression test in test_newton_manager_abstraction.py that authors a revolute joint with mjc:frictionloss=0.11 and asserts the value reaches Model.joint_friction through NewtonManager.instantiate_builder_from_stage() — it fails without this change and passes with it.

Type of change

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

Testing

  • test_newton_manager_abstraction.py::test_usd_mjc_frictionloss_reaches_newton_model — new regression (fails on develop, passes here); full file 162 passed
  • source/isaaclab/test/assets/test_articulation_ordering.py — 63 passed (untouched by this PR)

Checklist

  • I have run the pre-commit checks with ./isaaclab.sh --format
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • I have updated the changelog and the corresponding version in the extension's config/extension.toml file
  • I have added my name to the CONTRIBUTORS.md or my name already exists there

@AntoineRichard
AntoineRichard requested a review from a team August 27, 2026 16:02
@github-actions github-actions Bot added bug Something isn't working isaac-lab Related to Isaac Lab team labels Aug 27, 2026
@greptile-apps

greptile-apps Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

The PR consistently adds the MuJoCo USD schema resolver to Newton's main import, replication, visualization, and articulation-ordering paths so authored mjc:* joint properties reach the Newton model.

  • Adds SchemaResolverMjc after the existing Newton and PhysX resolvers at all four coordinated builder paths.
  • Adds a regression test for importing mjc:frictionloss.
  • Updates ordering-test mocks and changelog fragments.

Confidence Score: 4/5

The implementation appears safe to merge, with one non-blocking test-portability issue caused by fixing the regression test to cuda:0.

The resolver lists remain aligned across the relevant Newton builder paths and the new regression covers the intended import behavior; only the test's hard-coded device can make it fail on otherwise supported test hosts or shards.

Files Needing Attention: source/isaaclab_newton/test/sim/test_mjc_usd_import.py

Important Files Changed

Filename Overview
source/isaaclab_newton/isaaclab_newton/physics/newton_manager.py Adds the MJC resolver to the primary USD-to-Newton model import path in the same order used by the coordinated paths.
source/isaaclab_newton/isaaclab_newton/cloner/replicate.py Preserves MJC-authored properties while building replicated Newton worlds.
source/isaaclab_newton/isaaclab_newton/physics/visualization_builder.py Keeps visualization-only model construction aligned with the primary resolver list.
source/isaaclab/isaaclab/assets/articulation/ordering_resolvers.py Keeps MJWarp ordering emulation aligned with the live Newton import path.
source/isaaclab_newton/test/sim/test_mjc_usd_import.py Adds effective friction-import coverage, but hard-codes cuda:0 instead of honoring the repository's test-device selection.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  A[USD stage with mjc attributes] --> B[Newton / PhysX / MJC schema resolvers]
  B --> C[Newton ModelBuilder]
  C --> D[Cloned simulation worlds]
  C --> E[Visualization builder]
  C --> F[Articulation ordering emulation]
  C --> G[Final Newton model joint friction]
Loading

Reviews (1): Last reviewed commit: "Fix Newton USD import dropping mjc joint..." | Re-trigger Greptile

"""A USD joint authored with ``mjc:frictionloss`` yields a matching ``joint_friction``."""
sim_cfg = SimulationCfg(
dt=0.005,
device="cuda:0",

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.

P2 Hard-coded CUDA test device

The regression test bypasses the repository's ISAACLAB_TEST_DEVICES-based selection by fixing SimulationCfg.device to cuda:0. On a CPU-only host or a shard assigned another GPU, initialization fails independently of the resolver behavior; please parameterize this through the existing test-device utility.

@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 change appends SchemaResolverMjc to the Newton USD import paths used by stage loading, clone replication, visualization building, and articulation-ordering emulation, with a focused mjc:frictionloss regression test and package changelog fragments.

  • Design and architecture: The resolver ordering remains consistent across the four affected producer paths, preserving the documented lockstep relationship between live Newton imports and MJWarp ordering emulation. Existing joint and body ordering settings are unchanged.
  • API: No public signatures, defaults, exports, or return types change. The behavioral compatibility surface is limited to retaining USD-authored mjc:* attributes that were previously dropped during Newton import.
  • Implementation: The resolver list is updated wherever the relevant builders call add_usd, and the ordering-resolver mock is extended accordingly. The regression test exercises the manager import through Model.joint_friction; its explicit cuda:0 device remains a non-blocking portability tradeoff for CPU-only test environments.

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.

@hujc7

hujc7 commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator

run-ci

@isaaclab-bot isaaclab-bot Bot added ci:run-docker Trigger the on-demand Docker and GPU CI workflow and removed ci:run-docker Trigger the on-demand Docker and GPU CI workflow labels Aug 27, 2026

@hujc7 hujc7 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This might have wider effect as previously dropped attributes are now read in newton?

@NeoZng

NeoZng commented Aug 28, 2026

Copy link
Copy Markdown

i think it is better to patch mjc schema only for mjwarp manager?
check my pr #7298, hope it help

@kellyguo11

Copy link
Copy Markdown
Contributor

my agent also believes #7298 is a better fix.

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.

4 participants