Skip to content

[Bump] Require isaacsim-asset-isolated 6.1 so package:// meshes survive fixed-joint merging - #7230

Closed
hujc7 wants to merge 6 commits into
isaac-sim:developfrom
hujc7:jichuanh/isaacsim-asset-isolated-6-1
Closed

[Bump] Require isaacsim-asset-isolated 6.1 so package:// meshes survive fixed-joint merging#7230
hujc7 wants to merge 6 commits into
isaac-sim:developfrom
hujc7:jichuanh/isaacsim-asset-isolated-6-1

Conversation

@hujc7

@hujc7 hujc7 commented Aug 20, 2026

Copy link
Copy Markdown
Collaborator

Description

Moves the standalone URDF/MJCF importers from isaacsim-asset-isolated 6.0 to 6.1, the first line
where merging fixed joints keeps package:// meshes resolvable.

Merging fixed joints relocates the URDF into a scratch directory (/tmp/urdf_import_<robot>_*/),
and the 6.0 importer resolved package://<pkg>/... against that copy. No meshes live there, so
every visual and collision mesh resolved to a missing file while conversion still reported success:
the asset carried its full joint and rigid-body hierarchy and no geometry at all.

The fix is importer-side, in omni_isaac_sim!9476
(nvbug 6606673). package:// now resolves through the configured ros_package_paths mapping, and
falls back to walking up from the source URDF directory when no mapping is given. Nothing on the
Isaac Lab side has to pass a mapping.

Warning

This PR cannot go green yet. See "Blocked on" below — 6.1 is not published, and the 6.1 wheels
built so far are missing modules they import. It is filed now so the pin move is ready the moment
both clear.

Stacked on

Chained on #7192 (jichuanh/usd-exchange-3-rc3). The series is cross-fork, so GitHub cannot
retarget this PR's base to the parent branch; the diff below is the SHA-pinned equivalent.

PR Own changes
#7192 — usd-exchange 3.0.0rc3 + thread limits base
this PR 03abad3f3b6...f259b941ae6

Type of change

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

Changes

  1. pyproject.tomlisaacsim-asset-isolated>=6.0,<6.1>=6.1,<6.2.
  2. test_source_package_metadata.py — the literal pin assertion mirrors it.
  3. source/isaaclab/changelog.d/isaacsim-asset-isolated-6-1.minor.rst — new fragment.

uv.lock is deliberately not regenerated. The pin has nothing to resolve against yet:

$ uv lock
  × No solution found when resolving dependencies ...
  ╰─▶ Because only isaacsim-asset-isolated==6.0.1.0 is available and your project
      depends on isaacsim-asset-isolated>=6.1,<6.2, we can conclude that your
      project's requirements are unsatisfiable.

No other pin moves. Every [tool.uv].override-dependencies entry stays: the isaacsim extra
remains 6.0.1.0, so the overrides that exist to beat its transitive pins (mujoco~=3.11.0,
newton-usd-schemas>=0.4.1, typing-extensions, websockets, coverage) are still load-bearing.
usd-exchange==3.0.0rc3 also stays put — every consumer in the 6.1 chain requires only
usd-exchange>=2.2.2:

Package usd-exchange requirement
isaacsim-asset-isolated 6.1.0a60 >=2.2.2
urdf-usd-converter 0.3.2 >=2.2.2
mujoco-usd-converter 0.5.0 >=2.2.2

The importer config surfaces are unchanged — urdf/impl/config.py and mjcf/impl/config.py are
byte-identical between 6.0.1.0 and 6.1.0a60 — so UrdfConverterCfg / MjcfConverterCfg need no
adaptation.

Validation

Measured kit-less on anymal_d_simple_description (18 meshes) against an Isaac Lab checkout that
forwards cfg.ros_package_paths unchanged, i.e. with no Isaac Lab-side workaround, so the
importer alone is under test.

# merge_fixed_joints ros_package_paths 6.0.1.0 6.1.0a60
1 True unset 0 B / 0 meshes 375,835 B / 38 meshes
2 True mapping given 376,109 B / 38 375,835 B / 38
3 False unset 376,109 B / 38 375,835 B / 38
4 False mapping given 376,111 B / 38 375,835 B / 38

Row 1 is the defect; the other three were already working and stay working.

The nvbug's own QA step, with no mapping supplied:

python scripts/tools/convert_urdf.py \
    anymal_d_simple_description/urdf/anymal.urdf out/anymal.usd \
    --merge_joints --viz newton

Newton Viewer reports Bodies 13, Shapes 55 (visual 38 / collision 17), Joints 13 and the robot
renders fully textured — matching the figures the bug cites for the working case. Zero
could not be parsed / No such file or directory mesh warnings remain.

The fix was also confirmed directly against the published wheels: loading urdf_utils.py out of the
a59 and a60 artifacts and running the relocation shows package:// unresolved on a59 and resolved
to an on-disk path on a60, with and without an explicit mapping.

Blocked on

  1. 6.1 is not published. Public PyPI and pypi.nvidia.com carry only 6.0.1.0 for both
    isaacsim-asset-isolated and isaacsim-robot-schema. 6.1 GA is scheduled for 08/25.

  2. The 6.1 wheels built so far cannot import. isaacsim-asset-isolated 6.1 stopped shipping
    modules its own code imports — from a55 onward on develop and rc7 onward on release/6.1,
    including rc9, the current GA candidate. Last good builds are a54 and rc6.

    Missing from the wheel Imported by
    isaacsim/asset/importer/utils/ (10 modules) urdf/impl/converter.py:28, mjcf/impl/converter.py:27
    isaacsim/asset/transformer/{__init__,extension,manager,models,rule_interface,utils}.py transformer/rules/extension.py:37

    A clean install therefore fails at import isaacsim.asset.importer.urdf with
    ModuleNotFoundError: No module named 'isaacsim.asset.importer.utils'. Both extensions still
    exist in the Isaac Sim source tree, and no other published wheel provides them in importable
    form, so this is a packaging gap rather than a refactor Isaac Lab can adapt to. The Kit path is
    unaffected — Kit serves isaacsim.asset from its extension roots.

    Separately, isaacsim-robot-schema 6.1.0a60 ships dist-info only (6.3 KB vs 54 KB at 6.0.1.0,
    no usd/schema/isaac/), which makes the Make Robot Schema transformer rule fail during
    conversion so the converted asset gets no IsaacRobotAPI.

    The validation above was obtained by restoring the missing modules from a54 into the
    environment; it exercises the real 6.1 URDF importer, but is not a pure clean-wheel install.

Once fixed 6.1 wheels are published, this needs only uv lock and a re-run of the table.

Checklist

  • I have read and understood the contribution guidelines
  • 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 added a changelog fragment under source/<pkg>/changelog.d/ for every touched package
  • I have added my name to the CONTRIBUTORS.md or my name already exists there

hujc7 added 6 commits August 19, 2026 15:52
usd-exchange 3.0.0 is the first release carrying the reworked flavor matrix from
usd-exchange!257: OpenUSD 26.08 becomes the default flavor and Python 3.13 joins
the wheel matrix. The PyPI wheel ships the default flavor, so moving the pin moves
``pxr`` in kit-less installs from OpenUSD 25.05 to 26.08.

The pin is the only constraint that had to move. isaacsim-asset-isolated,
isaacsim-robot-schema, urdf-usd-converter and mujoco-usd-converter each require
``usd-exchange>=2.2.2`` with no upper bound, so nothing else in the resolve changes.

Regenerating uv.lock also picks up the workspace package versions that had drifted
from the committed lock (isaaclab, isaaclab-ov, isaaclab-tasks).
Five test sites pinned OpenUSD's work-thread pool to a single thread to avoid a
heap-corruption race in the physics parser, and the LEAPP export CLI carried a
hidden --limit_cpu_threads flag that existed only to feed them. Three of the five
carried a TODO to remove them once usd-core reached 26.5.

usd-exchange 3.0.0rc3 moves the kit-less pxr to OpenUSD 26.08, clearing that
precondition for the kit-less rendering fixture. Kit still supplies OpenUSD 25.11
to the sites that launch a simulation app, so those are removed on test evidence
rather than on the version bound; the pull request lists the suites that were run.

The multi-GPU PXR_WORK_THREAD_LIMIT in AppLauncher is a separate, long-standing
option for limiting CPU threads per process and is left in place.
Merging fixed joints relocates the URDF into a scratch directory, and the 6.0
importer resolved package:// URIs against that copy, where no meshes exist.
Every mesh dropped while conversion still reported success, so the asset kept
its full joint and rigid-body hierarchy and carried no geometry at all.

The importer-side fix ships in the 6.1 line (omni_isaac_sim!9476): package://
now resolves through the configured ros_package_paths mapping, falling back to
a walk up from the source URDF directory when no mapping is given.

uv.lock is deliberately not regenerated. 6.1 is not published to pypi.nvidia.com
yet, so the pin has nothing to resolve against and `uv lock` fails.
@github-actions github-actions Bot added isaac-lab Related to Isaac Lab team infrastructure labels Aug 20, 2026
@hujc7

hujc7 commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator Author

fixed in upstream

@hujc7 hujc7 closed this Sep 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

infrastructure isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant