-
Notifications
You must be signed in to change notification settings - Fork 3.8k
Fix converted assets spawning without physics, and add an importers extra #6935
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Changes from 5 commits
56ecfd7
54940e4
79b38c7
ed60409
f97e1b2
d5e4cb9
2f6bf12
153bdaf
8817a8d
ecdc05f
d8d4996
021f83b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -67,11 +67,11 @@ dependencies = [ | |
| "pin ; platform_system == 'Linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')", | ||
| "pin-pink==3.3.0 ; platform_system == 'Linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')", | ||
| "daqp==0.8.5 ; platform_system == 'Linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')", | ||
| # OpenUSD (kit-less mode). Both packages vendor a complete ``pxr`` runtime, so | ||
| # they must never co-install: usd-core supplies pxr where it has wheels (x86_64), | ||
| # usd-exchange supplies it on aarch64 (where usd-core has no wheel). | ||
| "usd-core>=25.11,<26.0 ; platform_machine == 'x86_64' or platform_machine == 'AMD64'", | ||
| "usd-exchange>=2.2 ; platform_machine == 'aarch64'", | ||
| # OpenUSD (kit-less mode). Use the same provider required by the URDF and MJCF importer | ||
| # packages so another complete ``pxr`` runtime cannot co-install with it. Two providers in | ||
| # one environment overwrite each other's files, and removing either then breaks ``pxr``. | ||
| # usd-exchange 2.3.0 vendors USD 25.5, matching the Isaac Sim 6.0 wheel stack. | ||
| "usd-exchange==2.3.0", | ||
| # avoid broken hf-xet pre-release cached on NVIDIA Artifactory | ||
| "hf-xet>=1.4.1,<2.0.0 ; platform_machine == 'x86_64' or platform_machine == 'AMD64' or platform_machine == 'aarch64'", | ||
| # ----- tasks ----- | ||
|
|
@@ -88,9 +88,19 @@ dependencies = [ | |
| # ----- newton (default physics engine) ----- | ||
| # Loose bound so the wheel co-resolves with isaacsim's newton[sim]==1.2.0 pin; the | ||
| # exact git commit is forced via [tool.uv].override-dependencies (uv sync only). | ||
| # The importers extra carries the mesh-processing deps (coacd, fast-simplification, | ||
| # ...) that honoring USD-authored ``physics:approximation`` requires. | ||
| "newton[sim,importers]>=1.2.0", | ||
| "newton[sim]>=1.2.0", | ||
| # Import and mesh-processing packages used by Newton, including the ones that honoring | ||
| # USD-authored ``physics:approximation`` requires. Keep these explicit instead of selecting | ||
| # newton[importers], whose standalone USD dependency would overlap with usd-exchange. | ||
| "requests>=2.25.0", | ||
| "scipy>=1.11.0", | ||
| "coacd>=1.0.7", | ||
| "fast-simplification>=0.1.11", | ||
| "alphashape>=1.3.1", | ||
| "meshio>=5.3.5", | ||
| "pycollada>=0.9", | ||
| "resolve-robotics-uri-py>=0.4.0", | ||
| "open3d>=0.19.0 ; python_version < '3.13' and (sys_platform != 'linux' or platform_machine != 'aarch64')", | ||
| # Loose bound co-resolves with isaacsim's ==0.2.0; the override below forces >=0.4.1. | ||
| "newton-usd-schemas>=0.2.0", | ||
| "PyOpenGL-accelerate>=3.1.0", | ||
|
|
@@ -150,6 +160,19 @@ rerun = [ | |
|
|
||
| isaacsim = ["isaacsim[all,extscache]==6.0.1.0"] | ||
|
|
||
| # Packages that cannot share an environment with Isaac Sim, because they provide the same | ||
| # import paths it does. This is not "everything a kit-less setup installs" -- Newton, the RL | ||
| # frameworks and the visualizers work with and without Isaac Sim and stay in the base set. | ||
| # Membership rule: it belongs here only when co-installing it with Isaac Sim breaks imports. | ||
| # | ||
| # * isaacsim-asset-isolated -- standalone URDF/MJCF importers. Contributes to the | ||
| # ``isaacsim`` namespace, so alongside a real Isaac Sim it displaces the Kit extension | ||
| # serving the same import and conversion fails with ``No module named 'isaacsim.asset'``. | ||
| # | ||
| # Runtime-only incompatibilities (ovrtx, ovphysx) do NOT belong here: they install fine | ||
| # beside Isaac Sim and are rejected at launch by ``sim_launcher._validate_runtime``. | ||
| importers = ["isaacsim-asset-isolated>=6.0,<6.1"] | ||
|
|
||
| ov = ["ovphysx==0.5.9", "ovrtx>=0.4.0,<0.5.0", "ovstage==0.1.0.346039"] | ||
| ovphysx = ["ovphysx==0.5.9", "ovstage==0.1.0.346039"] | ||
| ovrtx = ["ovrtx>=0.4.0,<0.5.0", "ovstage==0.1.0.346039"] | ||
|
|
@@ -200,6 +223,7 @@ leapp = [ | |
| # ``test_version_single_source`` fails CI if they drift. | ||
| [tool.isaaclab.versions] | ||
| isaacsim = "6.0.1.0" | ||
| usd_exchange = "2.3.0" | ||
| torch = "2.11.0" | ||
| torchvision = "0.26.0" | ||
| torchaudio = "2.11.0" | ||
|
|
@@ -343,6 +367,7 @@ markers = [ | |
| "benchmark: test covers the Isaac Lab benchmark framework and infrastructure", | ||
| "rendering: test exercises the rendering / camera / visualizer pipeline", | ||
| "smoke: tests for core installation, task, and RL functionality", | ||
| "importers: test must pass inside the Kit-less container, which has no Isaac Sim runtime", | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🟡 Warning · Implementation — Registered marker name does not match tests The tests and
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fixed in 2f6bf12 — registered as |
||
| ] | ||
|
|
||
| # Add pypi.nvidia.com so that `uv pip install isaaclab[isaacsim]` works without --extra-index-url. | ||
|
|
@@ -388,7 +413,7 @@ override-dependencies = [ | |
| "numpy>=2", | ||
| "mujoco~=3.11.0", | ||
| "mujoco-warp~=3.11.0", | ||
| "newton[sim,importers] @ git+https://github.com/newton-physics/newton.git@release-1.5", | ||
| "newton[sim] @ git+https://github.com/newton-physics/newton.git@release-1.5", | ||
| # Force the Newton-matched schemas over isaacsim's ==0.2.0 pin. | ||
| "newton-usd-schemas>=0.4.1", | ||
| "torch==2.11.0", | ||
|
|
@@ -408,6 +433,8 @@ conflicts = [ | |
| [{ extra = "teleop" }, { extra = "ovphysx" }], | ||
| [{ extra = "isaacsim" }, { extra = "ov" }], | ||
| [{ extra = "isaacsim" }, { extra = "ovphysx" }], | ||
| # both supply the ``isaacsim.asset`` importers; together the wheel shadows the Kit extension | ||
| [{ extra = "isaacsim" }, { extra = "importers" }], | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🟡 Warning · Design Architecture — teleop does not inherit the importers conflict The
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fixed in 2f6bf12: added Note that after merging develop the |
||
| ] | ||
| python-preference = "only-managed" | ||
| package = false | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,31 @@ | ||
| Added | ||
| ^^^^^ | ||
|
|
||
| * Added an ``importers`` extra carrying the standalone URDF and MJCF importers, so conversion | ||
| works without Isaac Sim. It cannot be combined with the ``isaacsim`` extra, which ships its own | ||
| copies of the same importers. | ||
|
|
||
| * Added :attr:`~isaaclab.sim.converters.AssetConverterBaseCfg.physics_variant` to choose which | ||
| ``"Physics"`` variant the URDF and MJCF converters select on the generated USD file. | ||
|
|
||
| Fixed | ||
| ^^^^^ | ||
|
|
||
| * Fixed URDF and MJCF conversion producing assets with no joints, articulation roots, or mass | ||
| properties. | ||
|
|
||
| * Fixed MJCF conversion failing with ``Cannot find a valid schema for 'MjcSceneAPI'`` when another | ||
| package queried a USD schema first. | ||
|
|
||
| * Fixed :meth:`~isaaclab.utils.dict.class_to_dict` expanding enum values into their internal | ||
| members, which wrote unusable entries into serialized configurations. | ||
|
|
||
| Changed | ||
| ^^^^^^^ | ||
|
|
||
| * Changed :func:`~isaaclab.sim.utils.select_usd_variants` to raise for a variant set listed in | ||
| :obj:`~isaaclab.sim.utils.REQUIRED_VARIANT_SETS` that is absent or does not offer the requested | ||
| variant. Other variant sets still log a warning and continue. | ||
|
|
||
| * Changed ``./isaaclab.sh --install`` to reject extras that the root ``pyproject.toml`` declares | ||
| conflicting, instead of installing a combination ``uv sync`` refuses. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| Fixed | ||
| ^^^^^ | ||
|
|
||
| * Fixed installation failures caused by overlapping standalone USD providers by using | ||
| ``usd-exchange`` on all supported platforms and installing required Newton mesh-processing | ||
| packages directly. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -674,15 +674,17 @@ def _install_isaacsim() -> None: | |
| # core set. | ||
| VALID_EXTRA_FEATURES: set[str] = { | ||
| "contrib", | ||
| "importers", | ||
| "newton", | ||
| "ov", | ||
| "rl", | ||
| "tetrahedralization", | ||
| "visualizer", | ||
| } | ||
|
|
||
| # Extra features excluded from the automatic ``-i all`` / ``-i`` install. | ||
| MANUAL_EXTRA_FEATURES: set[str] = {"contrib", "ov", "tetrahedralization"} | ||
| # Extra features excluded from the automatic ``-i all`` / ``-i`` install. ``importers`` is | ||
| # here because it cannot coexist with Isaac Sim, so it must be asked for deliberately. | ||
| MANUAL_EXTRA_FEATURES: set[str] = {"contrib", "importers", "ov", "tetrahedralization"} | ||
|
|
||
|
|
||
| def split_install_items(install_type: str) -> list[str]: | ||
|
|
@@ -817,6 +819,11 @@ def _install_extra_feature(feature_name: str, selector: str = "") -> None: | |
| """ | ||
| if feature_name == "contrib": | ||
| _install_contrib_extra_dependencies(selector) | ||
| elif feature_name == "importers": | ||
| if selector: | ||
| print_warning(f"'importers' does not support selectors (got '{selector}').") | ||
| print_info("Installing the kit-less stand-ins for Isaac Sim (URDF/MJCF importers)...") | ||
| _install_root_extra("importers") | ||
| elif feature_name == "newton": | ||
| if selector: | ||
| print_warning(f"'newton' does not support selectors (got '{selector}').") | ||
|
|
@@ -1097,6 +1104,48 @@ def _repoint_prebundle_packages() -> None: | |
| ) | ||
|
|
||
|
|
||
| def _requested_root_extras( | ||
| install_isaacsim: bool, optional_submodules: list[str], extra_features: list[tuple[str, str]] | ||
| ) -> set[str]: | ||
| """Return the root extras this install would apply. | ||
| Tokens are not extras: ``ov[ovrtx]`` installs ``ovrtx``, not ``ov``. | ||
| """ | ||
| extras = set(optional_submodules) | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔵 Suggestion · Implementation — Submodule tokens are not mapped to root extras
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fixed in 2f6bf12: optional submodule tokens are expanded through Verified at the time: |
||
| if install_isaacsim: | ||
| extras.add("isaacsim") | ||
| for feature, selector in extra_features: | ||
| if feature == "ov": | ||
| chosen = {item.strip().lower() for item in selector.split(",") if item.strip()} | ||
| extras |= {"ovphysx", "ovrtx"} if "all" in chosen else chosen | ||
| else: | ||
| extras.add(feature) | ||
| return extras | ||
|
|
||
|
|
||
| def _reject_conflicting_extras(requested: set[str]) -> None: | ||
| """Reject extras that ``[tool.uv].conflicts`` declares incompatible. | ||
| That table only binds a resolver, and each feature here installs in its own pip pass, so | ||
| nothing else would catch the combination. | ||
| Args: | ||
| requested: Names of the extras this install would apply. | ||
| Raises: | ||
| SystemExit: When the request covers every extra of a declared conflict. | ||
| """ | ||
| conflicts = _load_root_pyproject().get("tool", {}).get("uv", {}).get("conflicts", []) | ||
| for conflict in conflicts: | ||
| extras = {entry["extra"] for entry in conflict if "extra" in entry} | ||
| if len(extras) > 1 and extras <= requested: | ||
| names = ", ".join(f"'{extra}'" for extra in sorted(extras)) | ||
| raise SystemExit( | ||
| f"error: {names} cannot be installed together; the root pyproject.toml declares" | ||
| " them conflicting. Drop one of the tokens." | ||
| ) | ||
|
|
||
|
|
||
| def command_install(install_type: str = "all") -> None: | ||
| """Install Isaac Lab extensions and optional extras. | ||
|
|
@@ -1195,6 +1244,8 @@ def append_submodules_once(package_dirs: tuple[str, ...]) -> None: | |
| valid = sorted(OPTIONAL_ISAACLAB_SUBMODULES) + sorted(VALID_EXTRA_FEATURES) + ["isaacsim"] | ||
| print_warning(f"Unknown install token '{name}'. Valid values: {', '.join(valid)}. Skipping.") | ||
|
|
||
| _reject_conflicting_extras(_requested_root_extras(install_isaacsim, requested_optional_submodules, extra_features)) | ||
|
|
||
| # Configure extra package indexes for NVIDIA and MuJoCo wheels. | ||
| os.environ.setdefault("UV_EXTRA_INDEX_URL", "https://pypi.nvidia.com") | ||
| os.environ.setdefault("PIP_EXTRA_INDEX_URL", "https://pypi.nvidia.com") | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The new converter tests and container selection use
pytest.mark.kitless, but this configuration registersimportersinstead. This produces unknown-marker warnings and makes collection fail under--strict-markers.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed in 2f6bf12. The marker is now registered as
kitless, matching the six test files and the-m kitlessselection invalidate-kitless-image. It had been renamed along with the extra by a bulk rename that should only have touched the extra name.