Skip to content

Commit 674fbd0

Browse files
kellyguo11ooctipus
andauthored
Fixes camera fast path logic and GPU buffer in dexsuite (isaac-sim#4776)
# Description Fixes a bad merge of the camera class logic to check for when to enable the fast paths. Also fixes GPU buffer size that now needs to be increased for dexsuite environments. Fixes IMU tests and URDF converter logic. Fixes teleop tests where patching wasn't working correctly with the new lazy export mechanism. Switches Factory and Forge environments to use timestamp logging to avoid overwriting the same folder when running multiple training runs. Removes omni.kit.pip_archive from our app files to avoid any version conflicts between our and Kit's python dependencies. ## Type of change <!-- As you go through the list, delete the ones that are not applicable. --> - Bug fix (non-breaking change which fixes an issue) ## Checklist - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format` - [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 - [ ] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there <!-- As you go through the checklist above, you can mark something as done by putting an x character in it For example, - [x] I have done this task - [ ] I have not done this task --> --------- Co-authored-by: Octi Zhang <zhengyuz@nvidia.com>
1 parent 8e2f38f commit 674fbd0

40 files changed

Lines changed: 896 additions & 247 deletions

.github/actions/run-tests/action.yml

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,14 @@ inputs:
3535
description: 'Run only cuRobo and SkillGen tests (requires the cuRobo Docker image)'
3636
default: 'false'
3737
required: false
38+
cuda-issue-only:
39+
description: 'Run only tests with known CUDA issues (isolated from general tests)'
40+
default: 'false'
41+
required: false
42+
include-files:
43+
description: 'Comma-separated list of specific test file paths to include (e.g., source/pkg/test/test_a.py,source/pkg/test/test_b.py)'
44+
default: ''
45+
required: false
3846

3947
runs:
4048
using: composite
@@ -52,6 +60,8 @@ runs:
5260
local pytest_options="$6"
5361
local filter_pattern="$7"
5462
local curobo_only="$8"
63+
local cuda_issue_only="$9"
64+
local include_files="${10}"
5565
5666
echo "Running tests in: $test_path"
5767
if [ -n "$pytest_options" ]; then
@@ -63,6 +73,12 @@ runs:
6373
if [ "$curobo_only" = "true" ]; then
6474
echo "cuRobo-only mode enabled: running only cuRobo and SkillGen tests"
6575
fi
76+
if [ "$cuda_issue_only" = "true" ]; then
77+
echo "cuda-issue-only mode enabled: running only CUDA issue tests"
78+
fi
79+
if [ -n "$include_files" ]; then
80+
echo "Include files: $include_files"
81+
fi
6682
6783
# Create reports directory
6884
mkdir -p "$reports_dir"
@@ -86,6 +102,16 @@ runs:
86102
echo "Setting TEST_CUROBO_ONLY=true"
87103
fi
88104
105+
if [ "$cuda_issue_only" = "true" ]; then
106+
docker_env_vars="$docker_env_vars -e TEST_CUDA_ISSUE_ONLY=true"
107+
echo "Setting TEST_CUDA_ISSUE_ONLY=true"
108+
fi
109+
110+
if [ -n "$include_files" ]; then
111+
docker_env_vars="$docker_env_vars -e TEST_INCLUDE_FILES=$include_files"
112+
echo "Setting TEST_INCLUDE_FILES=$include_files"
113+
fi
114+
89115
if [ -n "$filter_pattern" ]; then
90116
if [[ "$filter_pattern" == not* ]]; then
91117
# Handle "not pattern" case
@@ -167,4 +193,4 @@ runs:
167193
}
168194
169195
# Call the function with provided parameters
170-
run_tests "${{ inputs.test-path }}" "${{ inputs.result-file }}" "${{ inputs.container-name }}" "${{ inputs.image-tag }}" "${{ inputs.reports-dir }}" "${{ inputs.pytest-options }}" "${{ inputs.filter-pattern }}" "${{ inputs.curobo-only }}"
196+
run_tests "${{ inputs.test-path }}" "${{ inputs.result-file }}" "${{ inputs.container-name }}" "${{ inputs.image-tag }}" "${{ inputs.reports-dir }}" "${{ inputs.pytest-options }}" "${{ inputs.filter-pattern }}" "${{ inputs.curobo-only }}" "${{ inputs.cuda-issue-only }}" "${{ inputs.include-files }}"

.github/workflows/build.yml

Lines changed: 138 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ jobs:
5959
image-tag: ${{ env.DOCKER_IMAGE_TAG }}
6060
pytest-options: ""
6161
filter-pattern: "isaaclab_tasks"
62+
include-files: "test_multi_agent_environments.py,test_pickplace_stack_environments.py,test_environments.py,test_factory_environments.py,test_environments_training.py,test_cartpole_showcase_environments.py,test_teleop_environments.py"
6263

6364
- name: Copy Test Results from IsaacLab Tasks Container
6465
run: |
@@ -91,6 +92,67 @@ jobs:
9192
exit 1
9293
fi
9394
95+
test-isaaclab-tasks-2:
96+
runs-on: [self-hosted, gpu]
97+
timeout-minutes: 180
98+
continue-on-error: true
99+
100+
steps:
101+
- name: Checkout Code
102+
uses: actions/checkout@v4
103+
with:
104+
fetch-depth: 0
105+
lfs: true
106+
107+
- name: Build Docker Image
108+
uses: ./.github/actions/docker-build
109+
with:
110+
image-tag: ${{ env.DOCKER_IMAGE_TAG }}
111+
isaacsim-base-image: ${{ env.ISAACSIM_BASE_IMAGE }}
112+
isaacsim-version: ${{ env.ISAACSIM_BASE_VERSION }}
113+
114+
- name: Run IsaacLab Tasks Tests 2
115+
uses: ./.github/actions/run-tests
116+
with:
117+
test-path: "tools"
118+
result-file: "isaaclab-tasks-2-report.xml"
119+
container-name: "isaac-lab-tasks-2-test-$$"
120+
image-tag: ${{ env.DOCKER_IMAGE_TAG }}
121+
pytest-options: ""
122+
filter-pattern: "isaaclab_tasks"
123+
include-files: "test_teleop_environments_with_stage_in_memory.py,test_lift_teddy_bear.py,test_environment_determinism.py,test_hydra.py,test_env_cfg_no_forbidden_imports.py,test_rl_device_separation.py,test_cartpole_showcase_environments_with_stage_in_memory.py,test_environments_with_stage_in_memory.py"
124+
125+
- name: Copy Test Results from IsaacLab Tasks 2 Container
126+
run: |
127+
CONTAINER_NAME="isaac-lab-tasks-2-test-$$"
128+
if docker ps -a | grep -q $CONTAINER_NAME; then
129+
echo "Copying test results from IsaacLab Tasks 2 container..."
130+
docker cp $CONTAINER_NAME:/workspace/isaaclab/tests/isaaclab-tasks-2-report.xml reports/ 2>/dev/null || echo "No test results to copy from IsaacLab Tasks 2 container"
131+
fi
132+
133+
- name: Upload IsaacLab Tasks 2 Test Results
134+
uses: actions/upload-artifact@v4
135+
if: always()
136+
with:
137+
name: isaaclab-tasks-2-test-results
138+
path: reports/isaaclab-tasks-2-report.xml
139+
retention-days: 1
140+
compression-level: 9
141+
142+
- name: Check Test Results for Fork PRs
143+
if: github.event.pull_request.head.repo.full_name != github.repository
144+
run: |
145+
if [ -f "reports/isaaclab-tasks-2-report.xml" ]; then
146+
# Check if the test results contain any failures
147+
if grep -q 'failures="[1-9]' reports/isaaclab-tasks-2-report.xml || grep -q 'errors="[1-9]' reports/isaaclab-tasks-2-report.xml; then
148+
echo "Tests failed for PR from fork. The test report is in the logs. Failing the job."
149+
exit 1
150+
fi
151+
else
152+
echo "No test results file found. This might indicate test execution failed."
153+
exit 1
154+
fi
155+
94156
test-general:
95157
runs-on: [self-hosted, gpu]
96158
timeout-minutes: 180
@@ -213,8 +275,69 @@ jobs:
213275
exit 1
214276
fi
215277
278+
cuda-issue-tests:
279+
runs-on: [self-hosted, gpu]
280+
timeout-minutes: 120
281+
continue-on-error: true
282+
283+
steps:
284+
- name: Checkout Code
285+
uses: actions/checkout@v4
286+
with:
287+
fetch-depth: 0
288+
lfs: true
289+
290+
- name: Build Docker Image
291+
uses: ./.github/actions/docker-build
292+
with:
293+
image-tag: ${{ env.DOCKER_IMAGE_TAG }}
294+
isaacsim-base-image: ${{ env.ISAACSIM_BASE_IMAGE }}
295+
isaacsim-version: ${{ env.ISAACSIM_BASE_VERSION }}
296+
297+
- name: Run CUDA Issue Tests
298+
uses: ./.github/actions/run-tests
299+
with:
300+
test-path: "tools"
301+
result-file: "cuda-issue-tests-report.xml"
302+
container-name: "isaac-lab-cuda-issue-test-$$"
303+
image-tag: ${{ env.DOCKER_IMAGE_TAG }}
304+
pytest-options: ""
305+
filter-pattern: ""
306+
cuda-issue-only: "true"
307+
308+
- name: Copy Test Results from CUDA Issue Tests Container
309+
run: |
310+
CONTAINER_NAME="isaac-lab-cuda-issue-test-$$"
311+
if docker ps -a | grep -q $CONTAINER_NAME; then
312+
echo "Copying test results from CUDA Issue Tests container..."
313+
docker cp $CONTAINER_NAME:/workspace/isaaclab/tests/cuda-issue-tests-report.xml reports/ 2>/dev/null || echo "No test results to copy from CUDA Issue Tests container"
314+
fi
315+
316+
- name: Upload CUDA Issue Test Results
317+
uses: actions/upload-artifact@v4
318+
if: always()
319+
with:
320+
name: cuda-issue-test-results
321+
path: reports/cuda-issue-tests-report.xml
322+
retention-days: 1
323+
compression-level: 9
324+
325+
- name: Check Test Results for Fork PRs
326+
if: github.event.pull_request.head.repo.full_name != github.repository
327+
run: |
328+
if [ -f "reports/cuda-issue-tests-report.xml" ]; then
329+
# Check if the test results contain any failures
330+
if grep -q 'failures="[1-9]' reports/cuda-issue-tests-report.xml || grep -q 'errors="[1-9]' reports/cuda-issue-tests-report.xml; then
331+
echo "Tests failed for PR from fork. The test report is in the logs. Failing the job."
332+
exit 1
333+
fi
334+
else
335+
echo "No test results file found. This might indicate test execution failed."
336+
exit 1
337+
fi
338+
216339
combine-results:
217-
needs: [test-isaaclab-tasks, test-general, test-curobo]
340+
needs: [test-isaaclab-tasks, test-isaaclab-tasks-2, test-general, test-curobo, cuda-issue-tests]
218341
runs-on: [self-hosted, gpu]
219342
if: always()
220343

@@ -236,6 +359,13 @@ jobs:
236359
path: reports/
237360
continue-on-error: true
238361

362+
- name: Download IsaacLab Tasks 2 Test Results
363+
uses: actions/download-artifact@v4
364+
with:
365+
name: isaaclab-tasks-2-test-results
366+
path: reports/
367+
continue-on-error: true
368+
239369
- name: Download General Test Results
240370
uses: actions/download-artifact@v4
241371
with:
@@ -249,6 +379,13 @@ jobs:
249379
path: reports/
250380
continue-on-error: true
251381

382+
- name: Download CUDA Issue Test Results
383+
uses: actions/download-artifact@v4
384+
with:
385+
name: cuda-issue-test-results
386+
path: reports/
387+
continue-on-error: true
388+
252389
- name: Combine All Test Results
253390
uses: ./.github/actions/combine-results
254391
with:

apps/isaaclab.python.headless.kit

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@ isaac.startup.ros_bridge_extension = ""
104104
# disable the metrics assembler change listener, we don't want to do any runtime changes
105105
metricsAssembler.changeListenerEnabled = false
106106

107+
# explicitly disable omni.kit.pip_archive to prevent conflicting dependencies
108+
app.extensions.excluded = ["omni.kit.pip_archive"]
109+
107110
# Extensions
108111
###############################
109112
[settings.exts."omni.kit.registry.nucleus"]

apps/isaaclab.python.headless.rendering.kit

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ exts."omni.replicator.core".Orchestrator.enabled = false
106106
# disable the metrics assembler change listener, we don't want to do any runtime changes
107107
metricsAssembler.changeListenerEnabled = false
108108

109+
# explicitly disable omni.kit.pip_archive to prevent conflicting dependencies
110+
app.extensions.excluded = ["omni.kit.pip_archive"]
111+
109112
[settings.exts."omni.kit.registry.nucleus"]
110113
registries = [
111114
{ name = "kit/default", url = "https://ovextensionsprod.blob.core.windows.net/exts/kit/prod/${kit_version_short}/shared" },

apps/isaaclab.python.kit

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,9 @@ exts."omni.replicator.core".Orchestrator.enabled = false
254254
# NuRec
255255
omni.rtx.nre.compositing.rendererHints = 3
256256

257+
# explicitly disable omni.kit.pip_archive to prevent conflicting dependencies
258+
app.extensions.excluded = ["omni.kit.pip_archive"]
259+
257260
[settings.app.livestream]
258261
outDirectory = "${data}"
259262

apps/isaaclab.python.rendering.kit

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ exts."omni.replicator.core".Orchestrator.enabled = false
9292
# disable the metrics assembler change listener, we don't want to do any runtime changes
9393
metricsAssembler.changeListenerEnabled = false
9494

95+
# explicitly disable omni.kit.pip_archive to prevent conflicting dependencies
96+
app.extensions.excluded = ["omni.kit.pip_archive"]
97+
9598
[settings.physics]
9699
updateToUsd = false
97100
updateParticlesToUsd = false

apps/isaaclab.python.xr.openxr.headless.kit

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ cameras_enabled = true
3636
[settings]
3737
xr.profile.ar.enabled = true
3838

39+
# explicitly disable omni.kit.pip_archive to prevent conflicting dependencies
40+
app.extensions.excluded = ["omni.kit.pip_archive"]
41+
3942
[settings.app.python]
4043
# These disable the kit app from also printing out python output, which gets confusing
4144
interceptSysStdOutput = false

apps/isaaclab.python.xr.openxr.kit

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ xr.openxr.components."omni.kit.xr.openxr.ext.hand_tracking".enabled = true
6262
xr.openxr.components."isaacsim.xr.openxr.hand_tracking".enabled = true
6363
xr.openxr.components."isaacsim.kit.xr.teleop.bridge".enabled = true
6464

65+
# explicitly disable omni.kit.pip_archive to prevent conflicting dependencies
66+
app.extensions.excluded = ["omni.kit.pip_archive"]
67+
6568
[settings.app.python]
6669
# These disable the kit app from also printing out python output, which gets confusing
6770
interceptSysStdOutput = false

scripts/tutorials/00_sim/launch_app.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def main():
7070
"""Main function."""
7171

7272
# Initialize the simulation context
73-
sim_cfg = sim_utils.SimulationCfg(dt=0.01, device=args_cli.device)
73+
sim_cfg = sim_utils.SimulationCfg(device=args_cli.device, dt=0.01)
7474
sim = sim_utils.SimulationContext(sim_cfg)
7575
# Set main camera
7676
sim.set_camera_view([2.0, 0.0, 2.5], [-0.5, 0.0, 0.5])

source/isaaclab/isaaclab/cli/commands/install.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,11 @@ def command_install(install_type: str = "all") -> None:
271271
print_warning(f"Unknown sub-package '{name}'. Valid values: {', '.join(valid)}. Skipping.")
272272
framework_type = "none" # RL frameworks not applied in selective mode
273273

274+
# Configure extra package indexes for NVIDIA and MuJoCo wheels.
275+
os.environ.setdefault("UV_INDEX", "https://pypi.nvidia.com")
276+
os.environ.setdefault("PIP_EXTRA_INDEX_URL", "https://pypi.nvidia.com")
277+
os.environ.setdefault("PIP_FIND_LINKS", "https://py.mujoco.org/")
278+
274279
# if on ARM arch, temporarily clear LD_PRELOAD
275280
# LD_PRELOAD is restored below, after installation
276281
saved_ld_preload = None

0 commit comments

Comments
 (0)