Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions isaaclab.bat
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,13 @@ if exist "%ISAACLAB_PATH%\_isaac_sim\" (
)
)

rem Prefer omni.usd.libs over usd-core for pxr imports to avoid TfType::AddAlias
rem conflicts with ovrtx/ovphysx (see tools/setup_usd_libs.py for details).
for /f "delims=" %%d in ('"%python_exe%" "%ISAACLAB_PATH%\tools\setup_usd_libs.py"') do (
set "PYTHONPATH=%%d;!PYTHONPATH!"
set "PATH=%%d\bin;!PATH!"
)

rem Execute CLI.
"%python_exe%" -c "from isaaclab.cli import cli; cli()" %*

Expand Down
11 changes: 11 additions & 0 deletions isaaclab.sh
Original file line number Diff line number Diff line change
Expand Up @@ -61,5 +61,16 @@ if [ -d "$ISAACLAB_PATH/_isaac_sim" ]; then
fi
fi

# Prefer omni.usd.libs over usd-core for pxr imports to avoid TfType::AddAlias
# conflicts with ovrtx/ovphysx. omni.usd.libs/pxr/ is a namespace package, so
# Python ignores PYTHONPATH order and picks usd-core's regular pxr instead; writing
# a minimal __init__.py promotes it to a regular package so path order takes effect.
_ov_usd_libs_dir=$("$python_exe" "$ISAACLAB_PATH/tools/setup_usd_libs.py")
if [ -n "$_ov_usd_libs_dir" ]; then
export PYTHONPATH="$_ov_usd_libs_dir:$PYTHONPATH"
export LD_LIBRARY_PATH="$_ov_usd_libs_dir/bin:$LD_LIBRARY_PATH"
fi
Comment thread
mataylor-nvidia marked this conversation as resolved.
unset _ov_usd_libs_dir

# Execute CLI.
exec "$python_exe" -c "from isaaclab.cli import cli; cli()" "$@"
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ dependencies = [
# 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 in 'x86_64 AMD64'",
"usd-core>=26.05,<27.0 ; platform_machine in 'x86_64 AMD64'",
Comment thread
mataylor-nvidia marked this conversation as resolved.
Comment thread
mataylor-nvidia marked this conversation as resolved.
"usd-exchange>=2.2 ; platform_machine in 'aarch64 arm64'",
# avoid broken hf-xet pre-release cached on NVIDIA Artifactory
"hf-xet>=1.4.1,<2.0.0 ; platform_machine in 'x86_64 AMD64 aarch64 arm64'",
Expand Down
5 changes: 5 additions & 0 deletions source/isaaclab/changelog.d/mataylor-golden-sim-usd.minor.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Changed
^^^^^^^

* Bumped ``usd-core`` dependency from ``>=25.11,<26.0`` to ``>=26.05,<27.0`` on x86_64 to resolve
a crash in ``libusd_ms`` triggered by USD physics loading (``LoadUsdPhysicsFromRange``) for kitless runs.
4 changes: 2 additions & 2 deletions source/isaaclab/test/benchmark/test_capture.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ def test_capture_versions_preserves_runtime_packages():
StringMetadata(name="ovphysx_version", data="3.0.5"),
StringMetadata(name="mujoco_version", data="3.8.1"),
StringMetadata(name="cuda_bindings_version", data="12.9.4"),
StringMetadata(name="usd_core_version", data="25.11"),
StringMetadata(name="usd_core_version", data="26.05"),
StringMetadata(name="isaaclab_release_version", data="3.0.0"),
]
bm = _Bm({"VersionInfo": _Rec(MeasurementData(measurements=[], metadata=md, artefacts=[]))})
Expand All @@ -89,7 +89,7 @@ def test_capture_versions_preserves_runtime_packages():
assert versions.ovphysx == "3.0.5"
assert versions.mujoco == "3.8.1"
assert versions.cuda_bindings == "12.9.4"
assert versions.usd_core == "25.11"
assert versions.usd_core == "26.05"
assert versions.isaaclab_release == "3.0.0"


Expand Down
6 changes: 3 additions & 3 deletions source/isaaclab/test/cli/test_source_package_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,16 @@ def _repo_root() -> Path:
raise RuntimeError("Could not find Isaac Lab repository root.")


def test_isaaclab_usd_core_pin_stays_on_isaacsim_compatible_usd25_abi():
"""The kit-less USD package must stay on the Isaac Sim compatible USD 25 ABI."""
def test_isaaclab_usd_core_pin_stays_on_isaacsim_compatible_usd26_abi():
"""The kit-less USD package must stay on the Isaac Sim compatible USD 26 ABI."""
with (_repo_root() / "pyproject.toml").open("rb") as f:
pyproject = tomllib.load(f)

usd_core_dependencies = [
dependency for dependency in pyproject["project"]["dependencies"] if dependency.startswith("usd-core")
]

assert usd_core_dependencies == ["usd-core>=25.11,<26.0 ; platform_machine in 'x86_64 AMD64'"]
assert usd_core_dependencies == ["usd-core>=26.05,<27.0 ; platform_machine in 'x86_64 AMD64'"]


def test_isaaclab_standalone_usd_providers_are_platform_disjoint():
Expand Down
30 changes: 30 additions & 0 deletions tools/setup_usd_libs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause

"""Locate omni.usd.libs and promote its pxr package to a regular package.

Prints the extension directory to stdout on success, nothing on failure.
Called by isaaclab.sh / isaaclab.bat to populate PYTHONPATH / LD_LIBRARY_PATH.
"""

import glob
import os
import sys

extscache = os.path.join(os.environ.get("ISAACLAB_PATH", ""), "_isaac_sim", "extscache")
candidates = sorted(glob.glob(os.path.join(extscache, "omni.usd.libs-*")))
if candidates:
usd_libs_dir = candidates[-1]
init_py = os.path.join(usd_libs_dir, "pxr", "__init__.py")
if os.path.exists(os.path.join(usd_libs_dir, "pxr")) and not os.path.isfile(init_py):
try:
open(init_py, "w").close()
except OSError as exc:
print(
f"[WARNING] Cannot promote omni.usd.libs/pxr to a regular package; skipping USD path setup: {exc}",
file=sys.stderr,
)
sys.exit(0)
print(usd_libs_dir, end="")
Loading