Skip to content

Commit 418ca31

Browse files
authored
Fix Franka paths and pin CI OVRTX to 0.3 (#6695)
# Description Update all 14 Isaac Lab 6.0 references to the Franka Panda instanceable USD so they resolve under `FrankaEmika/Legacy/`. The asset is no longer available at the previous URL: the focused asset-path test reports the old path as missing, while the new S3 object returns HTTP 200. This change covers the spawner examples, simulator and asset tests, `FRANKA_PANDA_CFG`, and the direct Franka cabinet task. Also backport the OVRTX CI pinning behavior from upstream develop commit [`ea8f511280`](ea8f511). The release branch stores its OVRTX requirement in `source/isaaclab_ov/setup.py`, so both release CI jobs now install the matching `ovrtx>=0.3.0,<0.4.0` range. A regression test rejects future bare OVRTX installs. No dependencies are added. ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) ## Screenshots Not applicable. ## Validation - Confirmed the focused asset-path test fails with the old URL (`0 != 2`). - Confirmed the OVRTX regression test fails with the original bare CI inputs. - `uv run python -m pytest source/isaaclab/test/utils/test_assets.py::test_check_file_path_nucleus -q` - `uv run python -m pytest source/isaaclab/test/cli/test_uv_run_pyproject.py -q` - `uv run python tools/changelog/cli.py check release/3.0.0-beta2` - `uv run isaaclab -f` - `uv run isaaclab -d` ## Checklist - [x] I have read and understood the contribution guidelines - [x] I have run the pre-commit checks with `uv run isaaclab -f` - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fixes are effective - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package - [x] My name already exists in `CONTRIBUTORS.md`
1 parent 51b4fb5 commit 418ca31

13 files changed

Lines changed: 73 additions & 16 deletions

File tree

.github/workflows/build.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,7 @@ jobs:
706706
isaacsim-base-image: ${{ needs.config.outputs.isaacsim_image_name }}
707707
isaacsim-version: ${{ needs.config.outputs.isaacsim_image_tag }}
708708
filter-pattern: "isaaclab_tasks"
709-
extra-pip-packages: "ovrtx ovphysx==0.4.13"
709+
extra-pip-packages: "ovrtx>=0.3.0,<0.4.0 ovphysx==0.4.13"
710710
include-files: >-
711711
test_rendering_cartpole_kitless.py,
712712
test_rendering_dexsuite_kuka_homo_kitless.py,

.github/workflows/daily-compatibility.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ jobs:
111111
image-tag: ${{ env.DOCKER_IMAGE_TAG }}
112112
pytest-options: ""
113113
filter-pattern: "isaaclab_tasks"
114-
extra-pip-packages: "ovrtx ovphysx==0.4.13"
114+
extra-pip-packages: "ovrtx>=0.3.0,<0.4.0 ovphysx==0.4.13"
115115

116116
- name: Copy All Test Results from IsaacLab Tasks Container
117117
run: |
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Fixed
2+
^^^^^
3+
4+
* Fixed simulator tests and examples to use the available legacy Franka Panda USD asset.

source/isaaclab/isaaclab/sim/spawners/__init__.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
from isaaclab.utils.assets import ISAACLAB_NUCLEUS_DIR
2020
2121
# spawn from USD file
22-
cfg = sim_utils.UsdFileCfg(usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/panda_instanceable.usd")
22+
cfg = sim_utils.UsdFileCfg(
23+
usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/Legacy/panda_instanceable.usd"
24+
)
2325
prim_path = "/World/myAsset"
2426
2527
# spawn using the function from the module
@@ -33,7 +35,9 @@
3335
from isaaclab.utils.assets import ISAACLAB_NUCLEUS_DIR
3436
3537
# spawn from USD file
36-
cfg = sim_utils.UsdFileCfg(usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/panda_instanceable.usd")
38+
cfg = sim_utils.UsdFileCfg(
39+
usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/Legacy/panda_instanceable.usd"
40+
)
3741
prim_path = "/World/myAsset"
3842
3943
# use the `func` reference in the config class

source/isaaclab/test/cli/test_uv_run_pyproject.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
from __future__ import annotations
99

10+
import ast
1011
import re
1112
from pathlib import Path
1213

@@ -27,6 +28,24 @@ def _root_pyproject() -> dict:
2728
return tomllib.load(f)
2829

2930

31+
def _ovrtx_requirement_from_setup() -> str:
32+
"""Return the OVRTX requirement declared by ``source/isaaclab_ov/setup.py``."""
33+
setup_path = _repo_root() / "source/isaaclab_ov/setup.py"
34+
module = ast.parse(setup_path.read_text(encoding="utf-8"))
35+
36+
for node in module.body:
37+
if not isinstance(node, ast.Assign):
38+
continue
39+
if not any(isinstance(target, ast.Name) and target.id == "EXTRAS_REQUIRE" for target in node.targets):
40+
continue
41+
extras_require = ast.literal_eval(node.value)
42+
for dependency in extras_require["ovrtx"]:
43+
if dependency.startswith("ovrtx"):
44+
return dependency
45+
46+
raise AssertionError("Could not find the OVRTX requirement in source/isaaclab_ov/setup.py")
47+
48+
3049
def test_uv_run_extra_names_match_documented_workflow():
3150
"""Docs must only reference ``uv run --extra`` names that pyproject defines."""
3251
repo_root = _repo_root()
@@ -86,3 +105,19 @@ def test_uv_run_uses_managed_python():
86105
tool_uv = _root_pyproject()["tool"]["uv"]
87106

88107
assert tool_uv["python-preference"] == "only-managed"
108+
109+
110+
def test_ci_ovrtx_installs_match_source_package_requirement():
111+
"""CI must not bypass the OVRTX version range declared by the source package."""
112+
expected_requirement = _ovrtx_requirement_from_setup()
113+
114+
for workflow_path in (
115+
".github/workflows/build.yaml",
116+
".github/workflows/daily-compatibility.yml",
117+
):
118+
workflow = (_repo_root() / workflow_path).read_text(encoding="utf-8")
119+
ovrtx_install_lines = [
120+
line.strip() for line in workflow.splitlines() if "extra-pip-packages:" in line and "ovrtx" in line
121+
]
122+
assert ovrtx_install_lines
123+
assert all(expected_requirement in line for line in ovrtx_install_lines)

source/isaaclab/test/sim/test_spawn_from_files.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def sim():
4444
def test_spawn_usd(sim):
4545
"""Test loading prim from Usd file."""
4646
# Spawn cone
47-
cfg = sim_utils.UsdFileCfg(usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/panda_instanceable.usd")
47+
cfg = sim_utils.UsdFileCfg(usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/Legacy/panda_instanceable.usd")
4848
prim = cfg.func("/World/Franka", cfg)
4949
# Check validity
5050
assert prim.IsValid()

source/isaaclab/test/sim/test_utils_prims.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def test_create_prim():
8484
assert prim.GetAttribute("size").Get() == 100
8585

8686
# check adding USD reference
87-
franka_usd = f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/panda_instanceable.usd"
87+
franka_usd = f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/Legacy/panda_instanceable.usd"
8888
prim = sim_utils.create_prim("/World/Test/USDReference", usd_path=franka_usd, stage=stage)
8989
# check USD reference set
9090
assert prim.IsValid()
@@ -328,7 +328,7 @@ def test_delete_prim():
328328
# check for usd reference
329329
prim = sim_utils.create_prim(
330330
"/World/Test/USDReference",
331-
usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/panda_instanceable.usd",
331+
usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/Legacy/panda_instanceable.usd",
332332
stage=stage,
333333
)
334334
# delete prim
@@ -362,7 +362,7 @@ def test_get_usd_references():
362362
assert len(refs) == 0
363363

364364
# Create a prim with a USD reference
365-
franka_usd = f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/panda_instanceable.usd"
365+
franka_usd = f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/Legacy/panda_instanceable.usd"
366366
sim_utils.create_prim("/World/WithReference", usd_path=franka_usd, stage=stage)
367367
# Check that it has the expected reference (remote URLs are resolved to local paths)
368368
refs = sim_utils.get_usd_references("/World/WithReference", stage=stage)

source/isaaclab/test/sim/test_utils_queries.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,9 @@ def test_get_all_matching_child_prims():
9898
# note: isaac sim function does not support instanced prims so we add it here
9999
# after the above test for the above test to still pass.
100100
sim_utils.create_prim(
101-
"/World/Franka", "Xform", usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/panda_instanceable.usd"
101+
"/World/Franka",
102+
"Xform",
103+
usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/Legacy/panda_instanceable.usd",
102104
)
103105

104106
# test with predicate
@@ -123,13 +125,19 @@ def test_get_first_matching_child_prim():
123125
# create scene
124126
sim_utils.create_prim("/World/Floor")
125127
sim_utils.create_prim(
126-
"/World/env_1/Franka", "Xform", usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/panda_instanceable.usd"
128+
"/World/env_1/Franka",
129+
"Xform",
130+
usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/Legacy/panda_instanceable.usd",
127131
)
128132
sim_utils.create_prim(
129-
"/World/env_2/Franka", "Xform", usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/panda_instanceable.usd"
133+
"/World/env_2/Franka",
134+
"Xform",
135+
usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/Legacy/panda_instanceable.usd",
130136
)
131137
sim_utils.create_prim(
132-
"/World/env_0/Franka", "Xform", usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/panda_instanceable.usd"
138+
"/World/env_0/Franka",
139+
"Xform",
140+
usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/Legacy/panda_instanceable.usd",
133141
)
134142

135143
# test
@@ -152,7 +160,9 @@ def test_find_global_fixed_joint_prim():
152160
# create scene
153161
sim_utils.create_prim("/World")
154162
sim_utils.create_prim("/World/ANYmal", usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/ANYbotics/ANYmal-C/anymal_c.usd")
155-
sim_utils.create_prim("/World/Franka", usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/panda_instanceable.usd")
163+
sim_utils.create_prim(
164+
"/World/Franka", usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/Legacy/panda_instanceable.usd"
165+
)
156166
if "4.5" in ISAAC_NUCLEUS_DIR:
157167
franka_usd = f"{ISAAC_NUCLEUS_DIR}/Robots/Franka/franka.usd"
158168
else:

source/isaaclab/test/utils/test_assets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def test_nucleus_connection():
1818
def test_check_file_path_nucleus():
1919
"""Test checking a file path on the Nucleus server."""
2020
# robot file path
21-
usd_path = f"{assets_utils.ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/panda_instanceable.usd"
21+
usd_path = f"{assets_utils.ISAACLAB_NUCLEUS_DIR}/Robots/FrankaEmika/Legacy/panda_instanceable.usd"
2222
# check file path
2323
assert assets_utils.check_file_path(usd_path) == 2
2424

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Fixed
2+
^^^^^
3+
4+
* Fixed :obj:`~isaaclab_assets.FRANKA_PANDA_CFG` to use the available legacy Franka Panda USD asset.

0 commit comments

Comments
 (0)