Skip to content

Avoid duplicate MuJoCo schema registration - #7393

Merged
kellyguo11 merged 4 commits into
isaac-sim:developfrom
kellyguo11:fix/avoid-duplicate-mujoco-schema-registration
Aug 31, 2026
Merged

Avoid duplicate MuJoCo schema registration#7393
kellyguo11 merged 4 commits into
isaac-sim:developfrom
kellyguo11:fix/avoid-duplicate-mujoco-schema-registration

Conversation

@kellyguo11

@kellyguo11 kellyguo11 commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Description

Isaac Lab exposes the codeless mjcPhysics plugin through PXR_PLUGINPATH_NAME before OpenUSD builds its schema registry. The Kit experiences also enabled omni.usd.schema.mujoco, which bundles a second plugin with the same name and reports the duplicate registration as an error even though the schema is already available.

This change removes the redundant extension dependency from the GUI and headless Kit experiences. It keeps the early Isaac Lab schema exposure needed by kitless MJCF conversion and documents why Kit must not register a second copy.

No Kit extension replaces omni.usd.schema.mujoco: importing isaaclab adds the standalone mujoco_usd_converter/plugins directory to PXR_PLUGINPATH_NAME, and the OpenUSD Plug.Registry discovers its codeless schema metadata. This is the same mechanism in Kit and kitless processes.

No new dependencies are required.

Type of change

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

Release backport

  • Backport this pull request to the active release branch after it merges into develop

Screenshots

Not applicable; this removes a startup log error.

Validation

  • Live isaaclab.python.kit experience: launched successfully with headless=True; MjcSceneAPI and the mjcPhysics plugin were available, omni.usd.schema.mujoco remained disabled, and the duplicate-registration error had zero matches
  • Fresh kitless probe: AppLauncher.is_available() was false while MjcSceneAPI and mjcPhysics were available from the standalone converter plugin directory
  • Existing kitless MJCF converter suite: 12 passed
  • Existing experience-file tests: 6 passed
  • Changelog validation against upstream/develop: passed
  • Full repository formatting and pre-commit gate: passed

No new regression test was added, as requested.

Checklist

  • I have read and understood the contribution guidelines
  • I have run the pre-commit checks
  • 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 added a changelog fragment under source/isaaclab/changelog.d/
  • My name already exists in CONTRIBUTORS.md

@kellyguo11
kellyguo11 requested a review from a team August 27, 2026 19:30
@github-actions github-actions Bot added bug Something isn't working isaac-sim Related to Isaac Sim team 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 removes the redundant omni.usd.schema.mujoco dependency from GUI and headless Kit experiences while retaining Isaac Lab’s early schema exposure through mujoco_usd_converter.

  • Prevents duplicate mjcPhysics plugin registration during Kit startup.
  • Documents the single-provider requirement in Isaac Lab initialization.
  • Adds a changelog fragment describing the startup fix.

Confidence Score: 5/5

The PR appears safe to merge with no concrete blocking or non-blocking defects identified.

The supported Kit dependency stack supplies mujoco_usd_converter, and importing Isaac Lab exposes its schema plugin before framework code queries the OpenUSD schema registry, while removing the redundant extension eliminates the duplicate registration path.

Important Files Changed

Filename Overview
apps/isaaclab.python.headless.kit Removes the redundant MuJoCo schema extension from the headless experience without an identified supported-path regression.
apps/isaaclab.python.kit Removes the redundant MuJoCo schema extension from the GUI experience without an identified supported-path regression.
source/isaaclab/isaaclab/init.py Documents why Kit experiences must rely on the converter plugin path rather than registering a second schema plugin.
source/isaaclab/changelog.d/fix-duplicate-mujoco-schema-registration.rst Records the duplicate-registration startup fix.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
    A[Import isaaclab] --> B[Locate mujoco_usd_converter]
    B --> C[Expose converter plugins through PXR_PLUGINPATH_NAME]
    C --> D[OpenUSD builds schema registry]
    D --> E[MjcSceneAPI available]
    F[Kit experiences] -->|No redundant omni.usd.schema.mujoco dependency| D
Loading

Reviews (1): Last reviewed commit: "Avoid duplicate MuJoCo schema registrati..." | 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 dependency removal consistently avoids duplicate MuJoCo schema registration in both Kit experiences, but the changelog describes schema unavailability rather than the duplicate-registration error actually fixed.

  • Design and architecture: The change consolidates schema exposure through Isaac Lab’s existing PXR_PLUGINPATH_NAME setup and removes the redundant omni.usd.schema.mujoco registration path from both GUI and headless experiences.
  • API: No public Python API changes are introduced. The externally visible change is limited to Kit experience dependencies and release documentation.
  • Implementation: Both experience files remove the redundant dependency consistently, and the added docstring records the registration constraint. The changelog should be corrected to say that startup no longer reports duplicate mjcPhysics plugin registration, rather than claiming the schema was reported unavailable.

Minor fixes needed. Posted 1 actionable finding inline.

Automated review; human maintainers own approval decisions.

Fixed
^^^^^

* Fixed Kit visualizer startup reporting that the ``mjcPhysics`` schema was unavailable when the

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.

🔵 Suggestion · Implementation — Changelog describes the wrong startup symptom

The fragment says startup reported that mjcPhysics "was unavailable", but the added docstring and the actual change address the opposite case: the schema was already available and the extra omni.usd.schema.mujoco extension logged its duplicate plugin registration as an error. Users matching the release note against their startup log will look for the wrong message. Reword to state that the redundant Kit extension was removed to avoid duplicate mjcPhysics schema registration.

@kellyguo11

Copy link
Copy Markdown
Contributor Author

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 28, 2026
@kellyguo11

Copy link
Copy Markdown
Contributor Author

CI follow-up: commit 3cbd836ea7 adds an early ISAAC_PATH fallback for source Isaac Sim, where mujoco_usd_converter is not importable until its prebundle is exposed after Kit startup. That late exposure caused the MjcCollisionAPI and MjcJointAPI failures in core shards 2/3 and the downstream PhysX IMU/PVA setup errors.

Local validation after the follow-up:

  • live source-runtime isaaclab.python.kit launch with converter package discovery masked: schema/plugin available, wrapper extension disabled, zero duplicate-registration errors
  • live Kit MJCF and URDF conversions: passed with zero invalid-schema errors
  • MJCF + URDF converter suites: 35 passed
  • experience-file tests: 6 passed
  • monolithic wheel build and wheel-root fallback probe: passed
  • full formatting and changelog gate: passed

No regression test was added, as requested.

The older x86 installation job failure is unrelated to this patch: its log reports CUDA error 999 and a Newton version assertion.

@kellyguo11 kellyguo11 added the ci:run-docker Trigger the on-demand Docker and GPU CI workflow label Aug 29, 2026
@kellyguo11

Copy link
Copy Markdown
Contributor Author

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 29, 2026
@kellyguo11

Copy link
Copy Markdown
Contributor Author

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 31, 2026
@kellyguo11
kellyguo11 merged commit 493e3e3 into isaac-sim:develop Aug 31, 2026
45 checks passed
isaaclab-bot Bot pushed a commit that referenced this pull request Aug 31, 2026
# Description

Isaac Lab exposes the codeless `mjcPhysics` plugin through
`PXR_PLUGINPATH_NAME` before OpenUSD builds its schema registry. The Kit
experiences also enabled `omni.usd.schema.mujoco`, which bundles a
second plugin with the same name and reports the duplicate registration
as an error even though the schema is already available.

This change removes the redundant extension dependency from the GUI and
headless Kit experiences. It keeps the early Isaac Lab schema exposure
needed by kitless MJCF conversion and documents why Kit must not
register a second copy.

No Kit extension replaces `omni.usd.schema.mujoco`: importing `isaaclab`
adds the standalone `mujoco_usd_converter/plugins` directory to
`PXR_PLUGINPATH_NAME`, and the OpenUSD `Plug.Registry` discovers its
codeless schema metadata. This is the same mechanism in Kit and kitless
processes.

No new dependencies are required.

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)

## Release backport

- [x] <!-- backport-active-release --> Backport this pull request to the
active release branch after it merges into `develop`

## Screenshots

Not applicable; this removes a startup log error.

## Validation

- Live `isaaclab.python.kit` experience: launched successfully with
`headless=True`; `MjcSceneAPI` and the `mjcPhysics` plugin were
available, `omni.usd.schema.mujoco` remained disabled, and the
duplicate-registration error had zero matches
- Fresh kitless probe: `AppLauncher.is_available()` was false while
`MjcSceneAPI` and `mjcPhysics` were available from the standalone
converter plugin directory
- Existing kitless MJCF converter suite: 12 passed
- Existing experience-file tests: 6 passed
- Changelog validation against `upstream/develop`: passed
- Full repository formatting and pre-commit gate: passed

No new regression test was added, as requested.

## Checklist

- [x] I have read and understood the contribution guidelines
- [x] I have run the pre-commit checks
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] I have added a changelog fragment under
`source/isaaclab/changelog.d/`
- [x] My name already exists in `CONTRIBUTORS.md`

(cherry picked from commit 493e3e3)
@isaaclab-bot

isaaclab-bot Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Backported to release/3.0.0 as 2c411d4.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants