[pull] develop from isaac-sim:develop - #38
Merged
Merged
Conversation
## Description Remove backend-specific task and training changes from rough velocity configurations so physics selection no longer silently changes the comparison inputs. - Remove MJWarp-only actuator armature overrides from Anymal-C, Cassie, Go1, and Go2. - Use the same 5,000-iteration G1 PPO budget for every physics backend. - Replace the one-option base-COM PresetCfg with its owned EventTerm and update the robot-specific callers. - Remove tests whose only contract was the deleted G1 budget or Go2 armature special case. Keep the legacy Newton alias check tied to the selected solver instead of an actuator side effect. Downstream configurations that intentionally require different values can still set them explicitly. ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) ## Release backport - [ ] Backport this pull request to the active release branch after it merges into develop ## Testing - `uv run --extra test python -m pytest source/isaaclab_tasks/test/core/test_hydra.py source/isaaclab_tasks/test/core/test_velocity_newton_cfg.py` — 88 passed. - `uv run isaaclab -f` — passed. - No new tests were added. ## Checklist - [x] I have read and understood the contribution guidelines. - [x] I have run the pre-commit checks. - [x] Documentation changes are not required. - [x] My changes generate no new warnings. - [x] I removed tests that encoded the deleted backend-specific tuning. - [x] I added an isaaclab_tasks changelog fragment. - [x] My name already exists in CONTRIBUTORS.md.
# Description Add `--no-sync` to RLinf train and play commands to preserve GR00T-compatible package versions. <!-- Thank you for your interest in sending a pull request. Please make sure to check the contribution guidelines. Link: https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html 💡 Please try to keep PRs small and focused. Large PRs are harder to review and merge. --> Fixes # (issue) <!-- As a practice, it is recommended to open an issue to have discussions on the proposed pull request. This makes it easier for the community to keep track of what is being developed or added, and if a given feature is demanded by more than one party. --> ## Type of change <!-- As you go through the list, delete the ones that are not applicable. --> - Documentation update ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Please attach before and after screenshots of the change if applicable. <!-- Example: | Before | After | | ------ | ----- | | _gif/png before_ | _gif/png after_ | To upload images to a PR -- simply drag and drop an image while in edit mode and it should upload the image directly. You can then paste that source into the above before/after sections. --> ## Checklist Docker and GPU tests run on demand. Push the commits you want tested, then comment `run-ci` on the pull request. - [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 - [x] I have added tests that prove my fix is effective or that my feature works - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (do **not** edit `CHANGELOG.rst` or bump `extension.toml` — CI handles that) - [x] 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 -->
# Description The environment browser advertises SKRL support for the native multi-agent tasks but previously omitted the algorithm from its generated commands. SKRL consequently used its PPO default, converted the environment to single-agent form, and selected the wrong algorithm for pretrained-checkpoint lookup. This change marks MAPPO as the generated-command default whenever a task registers an SKRL MAPPO configuration, then appends `--algorithm MAPPO` in the environment browser. Explicit runtime algorithm selection remains unchanged, so other algorithm checkpoints are still supported. This currently updates the generated commands for: - `Isaac-Pendulum-MARL-Direct` - `Isaac-Shadow-Handover-Direct` Tracks NVBug 6675391. No matching existing PR was found; #7360 addresses the separate benchmark play environment-creation path. No new dependencies are required. ## Type of change - Bug fix (non-breaking change which fixes an issue) - Documentation update ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable. A headless browser smoke test generated: `uv run --extra skrl isaaclab train --rl_library skrl --task Isaac-Shadow-Handover-Direct --algorithm MAPPO physics=newton_mjwarp` ## Validation - `uv run --extra test python -m pytest --confcutdir=tools/test tools/test/test_environ_docs.py -q` (28 passed) - `uv run --isolated --extra dev --extra ov -- make -C docs current-docs` (passed) - `uv run isaaclab -f` (passed) - Headless Chrome environment-browser command generation smoke test (passed) ## 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 repository formatting and 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 the fix is effective - [x] No changelog fragment is required because no source package changed - [x] My name already exists in `CONTRIBUTORS.md`
# Description `NewtonVisualizer` dropped its viewer without closing it in two paths: - normal shutdown through `close()` - the `step()` recovery path that disables the viewer after an initialization failure This left OVRTX resources to be released by the garbage collector in an undefined order. If the renderer was destroyed before its active bindings and retained step results, shutdown could report: ``` Renderer destroyed with 1 active binding(s) OV RTX: Leaking step result outputs ``` Both paths now use a shared `_release_viewer()` helper that calls `viewer.close()` before clearing the reference. During normal shutdown, teardown failures continue to propagate after the remaining cleanup completes. If viewer cleanup also fails in the `step()` recovery path, the error is logged without interrupting training. ## Type of change - Bug fix (non-breaking) ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` The same issue is present on `release/3.0.0`. ## Validation ### Controlled teardown reproduction The controlled test reproduced the reported shutdown signature: | Version | Active-binding warnings | Leaked-step-result errors | | --- | --- | --- | | Without fix | 1 | 2 | | With fix | 0 | 0 | ### Windows — RTX PRO 6000 Ran each of the two reported workloads three times, for six runs per batch: | Version | Completed | Active-binding warnings | Leaked-step-result errors | New warnings | | --- | --- | --- | --- | --- | | Without fix | 6/6 | 1/6 | 0/6 | — | | With fix | 6/6 | 0/6 | 0/6 | 0 | The OVRTX window failed to initialize on this machine, so every run exercised the `step()` recovery path. A pre-existing USD asset-loading crash occurred once in each batch before viewer initialization and is being tracked separately. ### Linux — L40 The nine new regression tests fail against the original implementation and pass with the fix: | Version | Visualizer test results | | --- | --- | | Without fix | 58 passed, 9 failed | | With fix | 67 passed, 0 failed | Seven tests requiring the full Isaac Sim runtime were excluded because of a pre-existing collection error. ## 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` - [ ] I have made corresponding changes to the documentation — not applicable - [x] My changes generate no new warnings - [x] I have added tests that prove the fix is effective - [x] I have added the required changelog fragment under `source/<pkg>/changelog.d/` - [x] My name is already included in `CONTRIBUTORS.md` --------- Co-authored-by: Kelly Guo <kellyg@nvidia.com>
# Description Fixes NVBug 6675392 and NVBug 6684416 This PR fixes two camera-rendering failures at their respective boundaries: - Newton Warp rendering now marks deformable triangle-mesh render work as non-graph-capturable because Warp mesh refits record allocation nodes that conditional CUDA graph bodies do not support. Other graph-safe sensor tasks remain capturable. - Isaac RTX rendering now treats an empty annotator warm-up frame as not ready, clears the destination buffer, and skips Warp slicing and reshape work for that frame. No new dependencies are required. ### Validation #### NVBug 6675392 exact command ```console uv run --extra isaacsim,all,rlinf,mimic,teleop,tetrahedralization,video,leapp isaaclab train --rl_library rsl_rl --task Isaac-Lift-Cloth-Franka-Camera --info --max_iterations 5 ``` - PR parent `3639364a`: reproduced `Conditional body graph contains an unsupported operation (memory allocation)` and the `sensor CUDA graph capture failed` traceback, then completed learning iterations 0/5 through 4/5 via the existing eager fallback. - This PR: completed learning iterations 0/5 through 4/5 without the conditional-body or sensor-capture traceback. #### NVBug 6684416 exact commands Primary command (Windows path separators translated to Linux path separators only): ```console uv run --extra all,isaacsim,rlinf,mimic,teleop,tetrahedralization,video,leapp python scripts/environments/zero_agent.py --task IsaacContrib-Stack-Cube-Franka-IK-Rel-Visuomotor-Cosmos --visualizer newton_gl ``` Ubuntu multi-visualizer command: ```console uv run --extra isaacsim,all,rlinf,mimic,teleop,tetrahedralization,video,leapp python scripts/environments/zero_agent.py --task IsaacContrib-Stack-Cube-Franka-IK-Rel-Visuomotor-Cosmos --visualizer kit,rerun,newton_gl,viser physics=isaacsim_physx ``` - PR parent and this PR: both commands completed environment setup, reached `Zero agent is running`, and stepped until an external watchdog stopped the intentionally unbounded process (90-120 seconds). Neither revision raised `Invalid indexing in slice` on the locally available repository-pinned Isaac Sim 6.0.1.0 stack. - The ticket reports Isaac Sim 6.1.0.0-rc.12, which is not installed locally. A run using the closest local 6.1 source build (6.1.0-alpha.56) at the ticket's reported Isaac Lab revision stopped on an unrelated 4096-environment RTX allocation/OOM failure before reaching the reported invalid-slice path, so it is not counted as a reproduction. - The focused empty-annotator-frame regression test deterministically fails on the PR parent with the reported invalid-slice behavior and passes on this PR. The unbounded zero-agent commands were wrapped only in a timeout, and `OMNI_KIT_ACCEPT_EULA=YES` was scoped to the processes after confirming an existing accepted-EULA marker. Their command arguments were otherwise unchanged. #### Focused and repository checks - `uv run --frozen --extra test python -m pytest source/isaaclab_newton/test/physics/test_newton_manager_abstraction.py source/isaaclab_physx/test/renderers/test_isaac_rtx_renderer_contract.py -q` — 200 passed - The new focused regression tests were verified to fail before the fixes and pass afterward. - `uv run --frozen isaaclab -f` - `uv run --frozen --extra test python tools/changelog/cli.py check develop` ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable. ## Checklist Docker and GPU tests run on demand. Push the commits you want tested, then comment `run-ci` on the pull request. - [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 `uv run isaaclab -f` - [x] I have made corresponding changes to the documentation (changelog fragments; no public API change) - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (do **not** edit `CHANGELOG.rst` or bump `extension.toml` — CI handles that) - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
…7532) # Description Preset-based `--agent` auto-selection is dead code for `rsl_rl`, `rl_games` and `sb3`. Two defects sit **in series** on the same code path: 1. **The selection guard cannot see past the CLI default.** `_auto_select_agent` in `source/isaaclab_tasks/isaaclab_tasks/utils/preset_cli.py` was only reached when `args.agent is None`. `add_common_train_args` registers `--agent` with `default=agent_default`, and every backend except `skrl` passes a non-`None` `agent_default` (`rsl_rl_cfg_entry_point`, `rl_games_cfg_entry_point`, `sb3_cfg_entry_point`). The parsed value is therefore never `None`, so the branch never runs. 2. **The benchmark entrypoints never asked for it.** `benchmark_train_{rsl_rl,rl_games,sb3}.py` and `benchmark_play_{rsl_rl,rl_games,sb3}.py` called `setup_preset_cli(parser, argv)` without `agent_library`, so auto-selection was not attempted at all (and the registered-agent help listing was missing too). Only the `skrl` benchmark entrypoints wired it. ## Provenance and symptom Benchmark sweep dispatch `20260901-153531` (image built from `release/3.0.0` at `f88dbc59c82`, `rsl_rl`) produced **60 failed rows**: `resnet18` (30) and `theia_tiny` (30), failing 100% across all three renderers and all physics backends. Every one died before the first training step: ``` ValueError: Observation 'critic' in observation set 'critic' not found in the observations from the environment. Available observations from the environment: ['policy'] ``` Call chain: `OnPolicyRunner.__init__` → `ppo.py construct_algorithm` → `rsl_rl/utils/utils.py:233 resolve_obs_groups`. ## Why this is an agent-entrypoint bug, not a missing observation group `Isaac-Cartpole-Camera` already declares the correct pairing: ```python "agent_preset_compatibility": { "rsl_rl_cfg_entry_point": _RAW_CAMERA_PRESETS, "rsl_rl_feature_cfg_entry_point": ("resnet18", "theia_tiny"), ... } ``` and `CartpoleCameraFeaturePPORunnerCfg` sets `obs_groups` with `critic: ["policy"]`. The feature entry point exists, is registered, is correct — it was simply unreachable, so `resnet18`/`theia_tiny` ran against the raw-camera `CartpoleCameraPPORunnerCfg`, whose `obs_groups` asks for a `critic` group the env does not expose. Nothing needs to be added to the environment. ## Why both defects are in one PR Neither half fixes the observed failure alone; this was measured, not assumed. Reverting either half of the change and running the regression test: | state | result | | --- | --- | | defect 2 fixed only (`agent_library` wired, guard unchanged) | 4 failed — `--agent` still parses to the non-`None` default, so the guard rejects | | defect 1 fixed only (guard fixed, `agent_library` not wired) | 4 failed — `if agent_library and ...` is `False`, auto-selection never attempted | | both fixed | passes | They are two links in one chain, so splitting them yields a PR that fixes nothing observable and a PR that cannot be tested end-to-end. ## Scope: train **and** play, benchmark **and** non-benchmark To pre-empt the obvious question — this is not a play-only or a train-only fix. | path | affected by | fixed by | proven by | | --- | --- | --- | --- | | `benchmark_train_{rsl_rl,rl_games,sb3}` | defects 1 + 2 | `preset_cli.py` + `agent_library=` wiring | `test_training_request_selects_preset_compatible_agent` — **this is the observed 60-row failure** | | `benchmark_play_{rsl_rl,rl_games,sb3}` | defects 1 + 2 | `preset_cli.py` + `agent_library=` wiring | `test_play_request_selects_preset_compatible_agent` | | `isaaclab_rl` `train_*`/`play_*` (non-benchmark) | defect 1 only — they already pass `agent_library` | `preset_cli.py` alone; **no file in this PR touches them** | `test_setup_preset_cli_auto_selects_agent_over_non_none_default` | Each half of the benchmark wiring was reverted independently and re-tested: * revert the three **train** wirings → the 4 training selection cases fail. Load-bearing for the reported failure. * revert the three **play** wirings → the 2 playback selection cases fail. There is **no train/play asymmetry** that would justify wiring only one of them: both register `--agent` with the same non-`None` default via the same helper, both call `setup_preset_cli`, and both feed `args.agent` into the same `resolve_task_config(...)` and then into the same `OnPolicyRunner(...)` construction. The reason the sweep only surfaced the training failure is ordering, not asymmetry — a row that dies at `train_rc=1` never reaches playback. Measured on the playback path before the wiring was added: ``` $ BenchmarkPlayRequest(backend="rsl_rl", task="Isaac-Cartpole-Camera", presets=("resnet18",)) args.agent : rsl_rl_cfg_entry_point # raw-camera config, wrong # with the wiring: args.agent : rsl_rl_feature_cfg_entry_point # correct ``` Playback would therefore have loaded a feature-trained checkpoint into the raw-camera policy architecture. ## Fix chosen Detect an explicitly typed `--agent` by re-parsing the same argv into a namespace pre-seeded with a sentinel: argparse only applies a default for a destination the namespace does not already carry, so the sentinel survives unless the user actually typed the flag. Auto-selection runs only when it does survive; an explicit `--agent` still wins. The six benchmark entrypoints now pass `agent_library`. The probe uses the same parser on the same argv as the real parse, so its verdict *is* argparse's verdict. Verified across every spelling — `--agent V`, `--agent=V`, the abbreviation `--age V`, repeated flags, and `--agent` after a `--` separator (correctly not explicit: argparse does not set it in the real parse either). A literal argv scan for `--agent` would get the abbreviation wrong and silently override a user's explicit choice, which is why the probe is preferred; the repo's existing `ExplicitAction` idiom would work too but requires touching all ten `--agent` registration sites across three packages, and a missed site fails the same silent way. ### Rejected: make `--agent` default to `None` everywhere This is the obvious fix and it is not safe. `skrl` can default to `None` because `train_skrl.py` reconstructs the entry point from `--algorithm` when it is `None`. The other three pass `args_cli.agent` straight into `resolve_task_config(...)`, which has no such fallback — `hydra.py:619` sets `agent_cfg = load_cfg_from_registry(...) if agent_entry else None`, and the entrypoints then dereference `agent_cfg.max_iterations`. A `None` default would break every plain `--task=X` run that relies on the canonical entry point, i.e. the overwhelmingly common case. Fixing that would mean adding a fallback to each of the six benchmark entrypoints plus the four train/play entrypoints: a much wider blast radius than the bug. ### Blast radius Behavior changes only where auto-selection actually fires, and only when the user did **not** type `--agent`: * **Rule 1 (preset-based)** fires only for tasks that opted in with `agent_preset_compatibility` — today `Isaac-Cartpole-Camera` and the two cartpole-showcase tasks. That is the declared contract finally being honored. Anyone who wants the previous (broken) pairing can still pass `--agent rsl_rl_cfg_entry_point` explicitly; covered by a test. * **Rule 2 (default-absent)** fires only when `<library>_cfg_entry_point` is *not* registered and exactly one other entry point is. That path previously resolved an unregistered entry point and crashed, so this is strictly a repair. * Everything else — no preset pairing declared, or the canonical default is registered — keeps the exact default it had; covered by a test for all three libraries. * `skrl` is unaffected: it already passed `agent_default=None`, and the explicit/implicit distinction collapses to the old `is None` check for it. `rl_games` and `sb3` share the defect and are fixed by the same change. **`sb3` has no task declaring `agent_preset_compatibility`, so there is no positive selection test for it** — its wiring is covered by the shared code path and by a default-preservation test only. ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Screenshots Not applicable. ## Validation Regression tests were confirmed to fail on `develop` without the fix and pass with it. **Before the fix** (production changes reverted to `develop`, tests in place): ``` $ uv run --frozen --extra test python -m pytest source/isaaclab_tasks/test/core/test_preset_cli.py \ source/isaaclab/test/benchmark/test_api.py -q -p no:warnings \ -k "preset_compatible_agent or keeps_backend_default_agent or auto_selects_agent_over_non_none or keeps_explicit_agent" FAILED test_preset_cli.py::test_setup_preset_cli_auto_selects_agent_over_non_none_default FAILED test_api.py::test_training_request_selects_preset_compatible_agent[resnet18-rsl_rl] FAILED test_api.py::test_training_request_selects_preset_compatible_agent[resnet18-rl_games] FAILED test_api.py::test_training_request_selects_preset_compatible_agent[theia_tiny-rsl_rl] FAILED test_api.py::test_training_request_selects_preset_compatible_agent[theia_tiny-rl_games] 5 failed, 6 passed, 53 deselected E AssertionError: assert 'rl_games_cfg_entry_point' == 'rl_games_feature_cfg_entry_point' ``` **After the fix:** ``` $ uv run --frozen --extra test python -m pytest source/isaaclab_tasks/test/core/test_preset_cli.py \ source/isaaclab_tasks/test/core/test_hydra.py source/isaaclab/test/benchmark \ source/isaaclab_rl/test/test_entrypoints_common.py -q -p no:warnings 492 passed, 1 skipped in 30.89s $ uv run --frozen --extra test --extra skrl --extra sb3 --extra rl-games --extra rsl-rl \ python -m pytest source/isaaclab_rl/test/test_typed_preset_cli_train_play.py -q -p no:warnings 8 passed in 33.27s ``` (The last suite fails on a bare `--extra test` environment on `develop` too — `ModuleNotFoundError: No module named 'skrl'` etc. — so it was rerun with the RL extras.) ``` $ uv run --frozen python tools/changelog/cli.py check develop ✓ All modified packages have valid changelog fragments. $ uv run --frozen isaaclab -f all hooks passed ``` Tests added: * `source/isaaclab_tasks/test/core/test_preset_cli.py` — auto-selection over a non-`None` default; explicit `--agent` wins over the preset, parametrized over the three spellings argparse accepts. The two pre-existing auto-selection tests only covered `skrl` with `agent_default=None`, which is exactly why this bug went unnoticed. * `source/isaaclab/test/benchmark/test_api.py` — drives the real benchmark entrypoints via `BenchmarkTrainingRequest`/`BenchmarkPlayRequest` and `_parse_args`, asserting the feature entry point is selected for `resnet18`/`theia_tiny` × `rsl_rl`/`rl_games` on the train path (mirroring the failing rows), the same on the play path, and that the canonical default survives otherwise (`rsl_rl`, `rl_games`, `sb3`). Both assert the *selected agent config*, not merely absence of an exception. Not run: a real training job on the failing rows (requires GPU sim). The failure is a construction-time config selection, fully reproduced at CLI level. ## Related PRs — checked, no overlap * **#7491** (Select pretrained checkpoints from resolved task configs) touches `isaaclab_rl/entrypoints/common.py`, the four `play_*` entrypoints, the four `benchmark_play_*` entrypoints, `cartpole/__init__.py` and `test_preset_cli.py` — adjacent, but changes neither `agent_default` nor the selection guard. Textual conflicts are possible in `test_preset_cli.py` and the `benchmark_play_*` files (one-line `setup_preset_cli(...)` call); no semantic conflict. * **#6440** (`fix(rsl_rl): default obs_groups for new runners`) adds an `obs_groups` default in `isaaclab_rl/rsl_rl/utils.py`. It would mask this symptom for runners that omit `obs_groups`, but `CartpoleCameraPPORunnerCfg` sets `obs_groups` explicitly, so it does not fix these 60 rows — and it would not make the correct feature config get selected either. Complementary, not duplicate. * `gh pr list --search "agent preset"` returned nothing touching this code. ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` --------- Co-authored-by: hujc <jichuanh@nvidia.com>
… ages (#7574) # Description `ContactSensor.compute_first_contact(dt)` / `compute_first_air(dt)` silently missed most touchdowns and lift-offs once the simulation had run for a few seconds. On a transition step the contact (resp. air) timer is exactly one sensor update interval, so the check degenerated to `dt < dt + 1e-8`. The sensor clock is a float32 accumulator whose rounding error reaches ~1e-6 after a few seconds of simulated time, roughly 100x the default tolerance, so the events vanished depending on the magnitude of the sim clock. The reporter's CPU reproducer shows 352/500 touchdowns and lift-offs missed at the default tolerance; it reproduces exactly on `develop`. All three backends (Newton, PhysX, OVPhysX) share the same logic, and the 2.x torch sensor had the same defect, so this is long-standing rather than a Newton regression. **Fix.** `abs_tol` now defaults to `None` and is resolved at call time by a single helper in `BaseContactSensor` to **half the sensor update interval**, i.e. `0.5 * max(cfg.update_period, physics_dt)`. Valid timer values are integer multiples of that interval, so half an interval is the midpoint between "one update ago" and "two updates ago". This stays robust to float32 clock drift for hours of simulated time and works for both `history_length == 0` (lazy, once-per-policy-step refresh) and `history_length > 0` (every physics substep). The Warp kernels are unchanged. Passing an explicit `abs_tol` still works; callers who want the previous behaviour can pass `abs_tol=1e-8`. **Tests.** Public-API regression tests in the Newton, PhysX and OVPhysX contact sensor suites: settle a body in contact, age the sensor clock to 2.5 / 10 / 30 s, lift and land the body, and poll `compute_first_contact` / `compute_first_air` with default arguments. These fail on the unfixed code (e.g. `compute_first_air missed the lift-off at clock 2.833s: reported [], expected [0]`) and pass with the fix. The Newton variant covers both `history_length` modes. **Refresh before query.** Both methods now call the sensor's outdated-buffer refresh before comparing, restoring what the 2.x torch sensor did by reading through `self.data`. The Warp port (#4707 / #4716) read the private timer buffer directly, so a `history_length == 0` caller that polled before touching `data` saw the previous step's timers. The aged-clock tests now poll before reading `data`; the Newton lazy-mode cases fail without the refresh (transition reported one policy step late) and pass with it. Adopted from the approach in #7294. **Out of scope, noted for follow-up.** - The transition interval is counted in both the ending and the starting phase, so `last_air_time` / `last_contact_time` overestimate each phase by one update interval (also raised in the issue). That bias is present since 2.x and baked into tuned `feet_air_time` thresholds, so changing it would rescale rewards for trained velocity policies and deserves its own PR. - On `cuda:0` with `history_length == 0`, the PhysX and OVPhysX sensors serve stale net forces when buffers refresh only on data access, independently of this change. That is why the PhysX/OVPhysX public-API tests cover only the substep cadence. Fixes #7283 ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## 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 - [x] I have added tests that prove my fix is effective or that my feature works - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (do **not** edit `CHANGELOG.rst` or bump `extension.toml` — CI handles that) - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
# Description Fixes #6829. Preserve MuJoCo-authored joint friction loss when Isaac Lab imports USD stages for the Newton MJWarp backend. Before this change, both Newton production import paths passed only `SchemaResolverNewton` and `SchemaResolverPhysx` to Newton: * vectorized clone replication; and * standalone stage import. Consequently, a joint authored with `mjc:frictionloss=0.11` finalized with `Model.joint_friction=0.0`, even though Newton supports the attribute through `SchemaResolverMjc`. This PR makes USD resolver selection an active-manager policy: * `NewtonManager` defaults to Newton then PhysX resolvers; * `NewtonMJWarpManager` appends the MuJoCo resolver; * clone and standalone imports consume the same manager-owned resolver list; and * resolver order remains Newton → PhysX → MuJoCo, so MJC values are fallbacks and do not override higher-priority authored values. MuJoCo custom attributes continue to be registered through the existing `_builder_attribute_solvers = (SolverMuJoCo,)` mechanism. The follow-up removes the redundant MJWarp registration override instead of duplicating that base-class path. ## Scope and alternative considered PR #7386 fixes the immediate `frictionloss` symptom by appending the complete `SchemaResolverMjc` to every Newton physics import. That resolver also interprets additional joint, shape, contact, and scene attributes. Applying it unconditionally would therefore expand MJC semantics to Featherstone, XPBD, VBD, Kamino, and MPM rather than changing only MJWarp. This PR intentionally keeps the immediate fix solver-scoped: the manager that registers and consumes MuJoCo-specific attributes also owns the MuJoCo resolver. Regression coverage verifies that MJWarp imports `mjc:frictionloss` and `mjc:damping`, while Featherstone preserves its previous behavior. A broader cross-backend solution should separately classify portable MJC core semantics from MuJoCo-specific extensions, ideally by splitting those resolver responsibilities in Newton upstream. That larger architecture change is outside the scope of this bug fix. No dependency or public API is added. ## Type of change * Bug fix (non-breaking change which fixes an issue) ## Release backport * [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable; this fixes a non-visual USD import path. ## Verification Latest follow-up commit: * focused production-path regression matrix: 5 passed; * MJWarp × clone/standalone preserves `frictionloss=0.11` and `damping=0.23`; * Featherstone × clone/standalone leaves both MJC-authored values unconsumed; * the existing explicit-global clone import test still passes; * full pre-commit suite passed; * changelog validation passed; * Python bytecode compilation passed; and * `git diff --check` passed. Previous PR head verification in the matching isolated environment: * Python 3.12.13; * `isaaclab-newton==5.4.0`; * `newton==1.5.0`; * `warp-lang==1.16.0`; * `mujoco-warp==3.11.0`; and * full Newton manager abstraction suite: 157 passed on a CUDA host. ## Checklist * [x] I have read and understood the [[contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) * [x] I have run the pre-commit checks * [x] I have made corresponding changes to the documentation (not applicable: no public API or user workflow changed) * [x] My changes generate no new warnings * [x] I have added tests that prove my fix is effective * [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package * [x] I have added my name to `CONTRIBUTORS.md` --------- Co-authored-by: NeoZng <neozng@foxmail.com>
## Summary - Document that Isaac RTX's `rtx.scenedb.plugin` caps the number of scene partitions at 15625; requesting more environments than that with scene partitioning enabled silently discards additional partitions and causes environments to share tiled camera views. - Add a warning note to the scene partitioning section of the renderers overview doc. - Add a corresponding Known Issues entry under the Renderers section, following the existing animated-curve scene-partition entry's format. ## Type of change - Documentation update ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Test plan - [x] `uv run isaaclab -f` passes (docs/rst formatting checks) - [x] Manually reviewed rendered structure/headings match existing doc conventions in both files
# Description Fix surface-gripper stack observations so `object_grasped` and `object_stacked` return one boolean per environment. The surface-gripper state was reshaped to `(num_envs, 1)` before being combined with an `(num_envs,)` predicate, which caused PyTorch to broadcast the result to `(num_envs, num_envs)` while stepping the environment. No new dependencies are required. Reported in TC_146506 for `IsaacContrib-Stack-Cube-UR10-Long-Suction-IK-Rel` with the Newton Kamino backend. ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable; this corrects an observation tensor shape. ## Validation - `uv run python tools/changelog/cli.py check --include-worktree develop` - `uv run isaaclab -f` ## 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 with `uv run isaaclab -f` - [x] Documentation changes are not required for this internal shape correction - [x] My changes generate no new warnings - [x] I have added a changelog fragment under `source/isaaclab_tasks/changelog.d/` - [x] My name already exists in `CONTRIBUTORS.md` --------- Co-authored-by: Kelly Guo <kellyg@nvidia.com>
…#7621) # Description Backports #7619 from `release/3.0.0` to `develop`. The change restores native keyboard, gamepad, and SpaceMouse teleoperation for both supported Franka Reach relative-IK configurations: - `physics=isaacsim_physx presets=diffik` - `physics=newton_mjwarp presets=newton_ik` Both configurations accept six-dimensional relative pose actions, so their native device configurations disable the unsupported gripper command. The default joint-position and absolute-pose presets remain unchanged. This is an exact patch replay of merged release commit `17e5f3d51620168806647feeaeab85c2688d2bc4`; no conflict resolution or develop-specific adaptation was required. No new dependencies are required. ## Type of change - Bug fix (non-breaking change which fixes an issue) - Documentation update ## Release backport - [ ] <!-- backport-active-release --> This change originated on `release/3.0.0`; do not backport it again. ## Screenshots Not applicable. ## Validation - Stable patch ID matches the merged #7619 release commit. - `uvx --from pre-commit==4.6.2 pre-commit run --all-files` — passed. - `tools/changelog/cli.py check develop` — passed against the current develop base. - `git diff --check upstream/develop..HEAD` — passed. - Source PR validation for this exact patch: 23 Reach preset tests passed, the Newton random-agent smoke test passed, the documentation build passed without warnings, and `uv run isaaclab -f` passed. The targeted test and documentation commands could not be rerun on this macOS host because the current lockfile supports Linux x86_64/aarch64 and Windows AMD64 only. Develop CI provides the supported-platform verification. ## Checklist - [x] I have read and understood the contribution guidelines. - [x] I have run the available pre-commit checks. - [x] I have included the corresponding documentation change. - [x] My changes generate no new warnings in the available checks. - [x] The source PR's tests cover this exact patch. - [x] I have included the `isaaclab_tasks` changelog fragment. - [x] The original contributor already appears in `CONTRIBUTORS.md`. Co-authored-by: Maximilian Krause <99733341+maxkra15@users.noreply.github.com>
# Description Updates the registry-backed environment browser so it advertises `physics=newton_mjwarp` only for validated contributed task combinations. The following Galbot visuomotor registrations are documented as PhysX-only after nvbug 6695019 reported their shared Newton sensor-initialization failure: - `IsaacContrib-Stack-Cube-Galbot-Left-Arm-Gripper-Visuomotor` - `IsaacContrib-Stack-Cube-Galbot-Left-Arm-Gripper-Visuomotor-Joint-Position` - `IsaacContrib-Stack-Cube-Galbot-Left-Arm-Gripper-Visuomotor-RmpFlow` The support matrix also documents these tasks as PhysX-only: - `IsaacContrib-Factory-Franka` - `IsaacContrib-Stack-Cube-UR10-Long-Suction-IK-Rel` The UR10 task uses the PhysX-only surface-gripper implementation and already rejects Newton during configuration validation. Renderer selectors remain available for the Galbot tasks because renderer selection is independent of the physics backend. Regenerating the browser also captures existing registry drift for the two DR Legs tasks, whose PhysX and Newton Kamino presets were missing from the generated rows. Focused regression coverage verifies every newly excluded task while preserving supported task combinations. ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) - [x] Documentation update ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable; this updates generated environment metadata and command options. ## Validation - `uv run --frozen python -m pytest --confcutdir=tools/test tools/test/test_environ_docs.py -q` (33 passed) - `uv run --frozen python tools/update_environments_rst.py --check` - `uv run --isolated --extra dev --extra ov -- make -C docs current-docs SPHINXOPTS=-q` - `SKIP=check-changelog-fragments uv run --frozen isaaclab -f` (all applicable hooks passed; no source package changed) - `git diff --check` ## 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 applicable pre-commit checks - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective - [x] No source package changed, so no changelog fragment is required - [ ] I have added my name to `CONTRIBUTORS.md` or my name already exists there
This automated draft updates CI to the current Isaac Sim nightly image. | Field | Value | |---|---| | Image | `nvcr.io/0947644777160149/internal/isaac-sim` | | Moving tag | `latest-develop` | | Current pin | `latest-develop@sha256:0bd319db2e50e667e75abf897ec48c2315e6707fed4faa6bb514bf393e537f8a` | | Candidate pin | `latest-develop@sha256:b6222dffc0182e82f49d656d08dabdfb6a279e368a478cbd38080bbe959bb2ba` | Source: https://registry.ngc.nvidia.com/orgs/0947644777160149/teams/internal/containers/isaac-sim/tags New PRs are opened as drafts so maintainers can merge after the CI results are acceptable. ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` --------- Co-authored-by: isaaclab-bot[bot] <282401363+isaaclab-bot[bot]@users.noreply.github.com> Co-authored-by: Kelly Guo <kellyg@nvidia.com>
# Description `test-contrib-environments` failed on #7610 (run [34042243157](https://github.com/isaac-sim/IsaacLab/actions/runs/34042243157/job/101511058208)) in `test_contrib_environments[IsaacContrib-DrLegs-Walk]` with `AssertionError: Invalid data` on the policy observation. The PR itself only touched `source/isaaclab/test/install_ci`, so this is unrelated to that change. **Root cause.** The first row of the failing observation is NaN across projected gravity, base angular velocity and joint positions, i.e. the robot state itself is non-finite, not a single observation term. Reproducing the test scenario locally (2 envs, 20 random-action steps, fresh env per seed) shows the Kamino P-ADMM solver diverging mid-episode: in 1 of 12 seeds the entire state of env 0 (root position, root quaternion, joint positions and velocities) turns NaN at step 6. The heading-driven velocity command then inherits the NaN through `heading_w`, and the `root_height` / `bad_orientation` termination terms cannot fire because every comparison against NaN is false, so the episode is never reset. The sibling `IsaacContrib-DrLegs-HoldPose` task (same robot, same solver preset, same random actions) stayed finite in 9 of 9 local trials and passed in the same CI job, as did the deprecated alias id of the Walk task, which is why the failure is intermittent rather than deterministic. **Change.** Add `DrLegs-Walk` to `_SKIPPED_TASK_SUBSTRINGS` in `test_contrib_environments.py` with the reason documented inline. The substring covers both `IsaacContrib-DrLegs-Walk` and its deprecated alias `Isaac-DrLegs-Walk-v0`, which the test also enumerates. HoldPose keeps running. This is a test-side skip; the solver instability itself needs to be addressed in Kamino/Newton (or by retuning the DR Legs solver preset), and the inline comment says to re-enable once that lands. ## Validation - Reproduction script (launches once, rebuilds the env per seed, mirrors `env_test_utils._run_environments`): Walk 1/12 seeds NaN at step 6 with root pose, joint state and the velocity command all non-finite; HoldPose 0/9. - `pytest source/isaaclab_tasks/test/contrib/test_contrib_environments.py -k DrLegs-Walk -rs`: both ids report `SKIPPED ... Kamino solver intermittently produces NaN robot state under random actions.`; HoldPose ids still collect as runnable. - Ruff and ruff-format pass; `isaaclab_tasks` changelog `.skip` fragment included. ## Type of change - Test fix (non-breaking) ## 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` - [ ] 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 - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (do **not** edit `CHANGELOG.rst` or bump `extension.toml` — CI handles that) - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
# Description Published checkpoint lookup included the task, physics backend, renderer backend, and RL library, but ignored domain presets. As a result, a depth policy could not be found and an unsuffixed RGB policy could be selected for an incompatible preset. This change: - adds non-default domain presets to the canonical checkpoint filename; - keeps aliases of the default preset, such as RGB, on the existing unsuffixed filename; - derives the selection centrally from the existing preset overrides, covering all checkpoint consumers; - declares the published Cartpole depth checkpoint and disables the environment-browser pretrained option for undeclared preset selections. No new dependencies. ## Type of change - Bug fix (non-breaking change which fixes an issue) - Documentation update ## Release backport - [x] Backport this pull request to the active release branch after it merges into develop ## Screenshots Not applicable; the UI change disables the existing pretrained-checkpoint checkbox for unsupported preset selections. ## Validation - 17 existing/new pretrained-checkpoint tests passed. - 28 existing/new environment documentation tests passed. - Environment browser generation check passed for 137 registered training environments. - Ruff lint and formatting hooks passed on all touched Python files. - The repository-wide format command passed every hook except the changelog-fragment comparison, which reports pre-existing develop/base differences in unrelated isaaclab_newton, isaaclab_experimental, isaaclab_tasks, and isaaclab_visualizers files. ## Checklist - [x] I have read and understood the contribution guidelines - [ ] I have run the complete pre-commit checks without unrelated base failures - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove the fix is effective - [x] I have added a changelog fragment for every touched package - [x] My name already exists in CONTRIBUTORS.md
# Description Fixes NVBug 6684415. The three contrib stack tasks that configure a PhysX `SurfaceGripper` now select CPU simulation by default, and config validation rejects an explicit unsupported GPU override before simulator initialization. The zero and random agent entrypoints now preserve a task-defined simulation device unless the user explicitly passes `--device`, allowing `AppLauncher` to start these tasks on CPU automatically. The public `parse_env_cfg` helper also preserves the registered task device when its `device` argument is omitted, while continuing to apply explicit device overrides. This also corrects the two UR10 suction configs, which previously assigned `self.device` instead of `self.sim.device`. No new dependencies are required. ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable. ## Testing - `uv run --isolated --frozen --extra test --extra teleop python -m pytest source/isaaclab_rl/test/test_entrypoints.py source/isaaclab_tasks/test/core/test_parse_cfg.py source/isaaclab_tasks/test/contrib/stack/test_surface_gripper_task_cfg.py -q` (`44 passed, 2 skipped`) - `uv run --frozen isaaclab -f` - `uv run --frozen python tools/changelog/cli.py check develop` - Verified the task-config regression test fails against the reported 3.0 commit because all three affected tasks resolved to `cuda:0`. - Verified the `parse_env_cfg` regression against the first PR revision: the omitted device resolved back to `cuda:0` and failed CPU-only validation. The full Isaac Sim smoke test was attempted in a fresh environment but stopped at the interactive Omniverse EULA prompt before Kit startup. ## 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 `uv run isaaclab -f` - [x] I have confirmed that no documentation or environment-browser selector change is required - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package - [x] My name already exists in `CONTRIBUTORS.md`
Bumped packages: - isaaclab: 24.0.0 → 24.1.0 - isaaclab_newton: 6.1.1 → 6.2.0 - isaaclab_ov: 3.0.2 → 3.1.0 - isaaclab_physx: 7.0.1 → 7.1.0 - isaaclab_rl: 0.17.0 → 0.17.1 - isaaclab_tasks: 20.1.0 → 20.1.1 - isaaclab_visualizers: 1.10.2 → 1.10.3
# Description Reduces common Direct Locomotion task overhead used by Ant and Humanoid without introducing the experimental Ant post-step path. The change: - stages effort targets once per environment step because articulation command buffers persist across decimation substeps; - uses the cached all-joint target path instead of repeatedly uploading joint indices; - keeps scalar zero assignments on-device; - removes a duplicate articulation reset already performed by the scene reset; - removes redundant clones after advanced indexing; and - uses the common fused joint-state writer provided by PhysX, Newton, and Isaac Lab OV. The isolated device scalar change improved the Ant host-return measurement from 3.433 ms to 3.231 ms. The remaining changes remove repeated launches, index transfers, copies, and reset writes; the larger fused post-step and device-mask work is deliberately excluded. This is one focused slice of superseded Draft PR #6509 and is independent of benchmark PR #6474. ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable. ## Validation - `uv run python tools/changelog/cli.py check develop` - `uv run --frozen isaaclab -f` - `uv run --frozen --extra test python -m pytest source/isaaclab_tasks/test/core/test_environments_newton.py -k 'Direct and (Ant or Humanoid)' -q` (`2 passed`) - Verified the fused writer interface on PhysX, Newton, and Isaac Lab OV. - The source change was exercised by the original focused CPU/CUDA validation before the PR split; new test files are intentionally omitted from this slice. ## Checklist Docker and GPU tests run on demand. Push the commits you want tested, then comment `run-ci` on the pull request. - [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 (not required for this internal performance fix) - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (do **not** edit `CHANGELOG.rst` or bump `extension.toml` — CI handles that) - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
# Description Small additive updates for leapp. 1. Pins the leapp version to latest 0.6.1 which improves robustness for slicing operations. Previously this wasn't supported but now new features should automatically enable more types of operations. 2. Adds graph level expected frequency to leapp yaml. This change helps downstream deployment set default frequency based on training configs. 3. Adds the Isaac Lab env.yaml to the exported leapp bundle for convenience. Isaac sim 6.2 will add leapp controller features. the env.yaml is required to set things up. This will make porting the policy and its environment much more convenient. ## Type of change <!-- As you go through the list, delete the ones that are not applicable. --> - New feature (non-breaking change which adds functionality) - Documentation update ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## 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 - [x] I have added tests that prove my fix is effective or that my feature works - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (do **not** edit `CHANGELOG.rst` or bump `extension.toml` — CI handles that) - [x] 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 -->
# Description Fixes #6475. This change makes Python import-path configuration consistent across Isaac Lab source checkouts, installed packages, and generated external projects, including both VS Code/Pylance and Cursor/basedpyright. The configuration is split by ownership: - Checked-in Pyright policy lives in `pyproject.toml`. - Machine-specific paths are written to a git-ignored `pyrightconfig.json` that extends the project policy. - VS Code settings retain interpreter and editor behavior without defining a competing `python.analysis.extraPaths` value. The shared `isaaclab.utils.editor` utility discovers: - Isaac Sim extension paths from the selected installation. - Isaac Lab monorepo packages under `source/*`. - Standard downstream packages under a `src` layout. - Isaac Lab packages visible to the active interpreter, covering editable and wheel installs. The repository setup script and installed-package workflow now use that shared utility. The template generator copies the canonical setup wrapper instead of maintaining a second implementation, and the generated `pyproject.toml`, README, tests, and documentation are aligned with the new single-package uv `src` layout introduced on `develop`. Invalid explicit `--isaac_path` values now fail clearly rather than silently selecting another installation. No new runtime dependency is required. ## Type of change - Bug fix (non-breaking change which fixes an issue) - Documentation update ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable. ## Validation - `uv run pytest source/isaaclab_rl/test/test_template_generator.py source/isaaclab/test/cli/test_installed_workflow_entrypoints.py -q` — 34 passed - `uv run pytest --confcutdir=tools/template tools/template/test_cli.py -q` — 7 passed - `uv run pytest source/isaaclab/test/cli/test_wheel_builder_metadata.py -q` — 11 passed - Pyright 1.1.411 configuration check — 0 errors and 0 warnings - `uv run isaaclab -f` — passed, including changelog validation against the current upstream `develop` - `uv run --isolated --extra dev -- make -C docs current-docs` — warning-free build passed ## 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 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 fix is 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`
# Description `conda install -c nvidia cuda-toolkit=12.8` now pulls in a GCC 14 toolchain (the defaults channel jumped from GCC 11 to 14). This documentation change adds a small command fix. ## Type of change - Documentation update ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Checklist - [x] I have read and understood the [contribution guidelines](https://isaacsim.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 - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
# Description Fix three failures in the documented template-generator workflows: - Pin generated external projects and their optional extras to the exact Isaac Lab version that ran the generator. This prevents `uv sync` from silently selecting an older prerelease whose CLI may do nothing and return success. - Let the repository environment-listing script run without constructing `AppLauncher`, so task and preset discovery works in the default Kit-less environment. - Document the explicit non-PPO agent entry point for generated internal tasks while retaining automatic selection when the task exposes one unambiguous agent configuration. No new dependencies are required. Internal bug: NVBug 6695420 validation follow-up. ## Type of change - Bug fix (non-breaking change which fixes an issue) - Documentation update ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable. ## Validation - `uv run --frozen python -m pytest --confcutdir=tools/template tools/template/test_cli.py -q` — 7 passed - `uv run --frozen python -m pytest --confcutdir=tools/test tools/test/test_list_envs.py -q` — 1 passed - `uv run --frozen python -m pytest --confcutdir=source/isaaclab_tasks source/isaaclab_tasks/test/core/test_preset_cli.py -q` — 31 passed - `uv run --frozen python -m pytest --confcutdir=source/isaaclab source/isaaclab/test/cli/test_installed_workflow_entrypoints.py -q` — 10 passed - `uv run --isolated --extra dev -- make -C docs current-docs` — passed without warnings - `uv run --frozen isaaclab -f` — passed ## Checklist - [x] I have read and understood the contribution guidelines - [x] I have run the pre-commit checks - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added focused tests that prove the fixes are effective - [x] No package changelog fragment is required because no `source/<package>/` code changed - [x] My name already exists in `CONTRIBUTORS.md`
# Description
This PR bundles four fixes for issues found:
1. 6684416: **RTX renderer: fix crash on not-yet-warmed-up annotator
buffers.** `IsaacRtxRenderer.render()` unconditionally trimmed the tiled
buffer to 2/3 channels for
`motion_vectors`/`normals`/`SIMPLE_SHADING_MODES`/`RGB_HDR`. Immediately
after an annotator is attached (e.g. at env creation, before the RTX
renderer has pumped a frame), Replicator can momentarily return a buffer
whose channel dimension is 0. Warp's array slicing rejects trimming an
already-empty dimension (unlike NumPy, which allows it), raising
`RuntimeError: Invalid indexing in slice: 0:0:1`. Guard the trim and
skip writing that data type for the frame instead of crashing.
2. 6683697: **`robust_eval.py`/`play.py`: pass `enable_cameras=True`
explicitly.** `release/3.0.0` removed the `--enable_cameras` CLI flag
and the `ENABLE_CAMERAS` env-var fallback from `AppLauncher` in favor of
`launch_simulation()`'s scene-scan auto-detection, but these two
robomimic scripts still use the legacy `AppLauncher(args_cli)` pattern
and were never migrated. Without cameras enabled, and with the old
explicit "pass --enable_cameras" guard in `IsaacRtxRenderer.__init__`
also removed in this release, the failure now surfaces as an opaque
`ValueError: Invalid object in Py_Graph in getWrappedGraphFromNode` deep
inside OmniGraph/SyntheticData. Pass `enable_cameras=True` explicitly,
matching the pattern already used in `generate_dataset.py`.
3. 6683610: **Docs: add `uv run` examples for the HDF5/MP4 conversion
and merge tools.** The Augmented Imitation Learning doc recommends `uv`
as the primary workflow throughout (dataset generation, training, eval
all show a "uv (Recommended)" tab), but the `hdf5_to_mp4.py`,
`mp4_to_hdf5.py`, and `merge_hdf5_datasets.py` examples only showed a
bare `python ...` invocation with no indication of which
environment/extras to use. Added matching `uv (Recommended)` /
`isaaclab.sh` tab-sets (`--extra mimic`, since these tools only need
`h5py`/`opencv`/`numpy`, no Isaac Sim import).
4. 6702683: **RTX renderer: fail fast on oversized tiled camera
buffers.** `IsaacRtxRenderer.render()` flattens every environment's
camera tile into one Warp array per data type. Warp requires every array
dimension to fit in a signed 32-bit int, so a large enough `num_envs *
resolution` combination overflows that limit and crashes deep inside
`render()`'s `.flatten()` call with `ValueError: Array shapes must not
exceed the maximum representable value of a signed 32-bit integer, got
2621440000 in dimension 0` and no indication of what to change. Compute
the worst-case tiled buffer size upfront in `create_render_data()` and
raise a clear error naming the offending env count/grid/resolution and
suggesting to reduce `--num_envs` or camera resolution. This does not
lift the underlying Warp/RTX limit — it only replaces the opaque failure
with an actionable one.
## Type of change
- Bug fix (non-breaking change which fixes an issue)
- Documentation update
## Release backport
- [x] <!-- backport-active-release --> Backport this pull request to the
active release branch after it merges into `develop`
## 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 added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (do **not** edit
`CHANGELOG.rst` or bump `extension.toml` — CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
# Description Complete preset-aware pretrained checkpoint support for feature-extractor policies on `Isaac-Cartpole-Camera`. - Advertise every feature-agent preset supported by the preferred RSL-RL workflow in the checkpoint publication matrix. The currently registered feature presets are `resnet18` and `theia_tiny`. - Flatten arbitrary multi-dimensional frozen image-encoder outputs after the environment batch dimension. This is a no-op for ResNet18's already-flat output and converts Theia-Tiny's token output from `(num_envs, 36, 192)` to the flat observation required by the MLP policy. - Validate checkpoint metadata registry-wide: workflows must be registered, presets must be unique, and every advertised preset must be a real domain preset. - Derive the Cartpole coverage assertion from `agent_preset_compatibility`, so adding a future feature preset without checkpoint publication metadata fails CI. - Regenerate the environment browser so supported pretrained feature presets are visible. The mechanism is not tied to the two QA commands: #7594 provides generic preset-aware naming/lookup/publication, while this PR covers arbitrary feature encoder shapes and future feature-preset registry additions. Other raw camera/rendering/domain presets remain explicit opt-ins because each advertised entry requires a compatible trained artifact. This builds on the agent preset selection fixed by #7532 and the checkpoint naming/lookup fixed by #7594. Both are merged. Addresses NVBug 6675381. ## Type of change - Bug fix (non-breaking change which fixes an issue) - Documentation update ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable. ## Validation - Regression test failed on merged `develop`: encoder output remained `torch.Size([4, 6, 8])` instead of `(4, 48)`. - `.venv/bin/python -m pytest scripts/tools/test/test_train_and_publish_checkpoints.py source/isaaclab/test/envs/test_stacked_image_mdp.py source/isaaclab_rl/test/test_pretrained_checkpoint.py -q` — 44 passed. - `UV_FROZEN=1 uv run isaaclab -f` — passed. - `uv run python tools/changelog/cli.py check develop` — passed. - `uv run --isolated --extra test -- make -C docs current-docs` — generated the updated browser and completed all pages, but exited 2 because the local isolated environment reports 44 pre-existing import/reference warnings as errors (including unavailable `ovstage` and `isaaclab_ppisp` modules). The PR docs CI is the authoritative warning-free build. - ResNet18 and Theia-Tiny RSL-RL policies trained for 1,638,400 steps each with local Isaac Sim 6.1 and reached mean episode lengths of 222.25 and 177.00, respectively (benchmark threshold: 150). - Both checkpoints loaded and reached policy playback; Theia-Tiny used the corrected flattened observation size of 6,912. - Both default Newton MJWarp/Newton renderer artifacts are present on the internal Nucleus server under the exact preset-aware filenames: - `rsl_rl/Isaac-Cartpole-Camera_resnet18_newtonmjwarp_newton_rsl_rl.pt` — 6,985,267 bytes, SHA-256 `13cbec819675809d6904c57d68a20d7c7d92d283999502509e8fd8da006099f8` - `rsl_rl/Isaac-Cartpole-Camera_theia_tiny_newtonmjwarp_newton_rsl_rl.pt` — 43,450,675 bytes, SHA-256 `9f75a2069bdec9bd06f888b9264da3ad664d3707fa038cf09929045ce5b526c0` ## Artifact coverage The uploaded pair covers the default Newton MJWarp/Newton renderer selection. The generic core publication matrix also schedules both feature presets for these additional supported backend/renderer pairs, whose artifacts still need to be trained and published for full cross-backend coverage: - PhysX / RTX - PhysX / Newton renderer - Newton MJWarp / RTX ## 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 `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 fix is 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`
#7647) # Description KitVisualizationMarkers.visualize() re-resolved and re-authored the primvars:omni:scenePartition token array on every call. Marker ownership is static in most tasks, but visualize() runs every frame — and ObjectUniformPoseCommand._update_metrics() calls it independently of debug_vis. At 4096 envs, every frame paid a device synchronization, a 4096-entry tuple rebuild, and 4096 token strings for a value that never changed. Isaac-Lift-KukaAllegro-Camera has two such instancers (SuccessMarkers, ObservationPointCloud). This caches the resolved tokens, the tensor they came from, and the tokens currently authored, so the primvar is rebuilt only when the environment IDs change. The partition-active probe caches its positive result; a negative one is still re-checked, since markers can be created before the renderer prepares the stage. Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. Fixes # (issue) <!-- As a practice, it is recommended to open an issue to have discussions on the proposed pull request. This makes it easier for the community to keep track of what is being developed or added, and if a given feature is demanded by more than one party. --> ## 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) ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Benchmark Results Measured on `Isaac-Lift-KukaAllegro-Camera` (4096 envs, `duo_camera` preset, single L40 GPU), 200-step `isaaclab benchmark runtime` run before vs. after this commit on top of `develop` (25fad3e): | Metric | Before | After | Change | | --- | --- | --- | --- | | Mean Total FPS | 3773.4 | 4270.6 | **+13.2%** | | Mean Iteration Time | 1085.5 ms | 959.1 ms | -11.6% | | Max Total FPS | 4284.9 | 4703.1 | +9.8% | | GPU Utilization | 28.6% | 37.3% | +8.7 pts | | Scene Creation Time | 295.9 s | 282.0 s | -4.7% | Single run per side, but well outside the ~150-180 FPS std-dev band reported within each run. Confirms the throughput improvement claimed above for this task's SuccessMarkers/ObservationPointCloud instancers. ## Screenshots Please attach before and after screenshots of the change if applicable. <!-- Example: | Before | After | | ------ | ----- | | _gif/png before_ | _gif/png after_ | To upload images to a PR -- simply drag and drop an image while in edit mode and it should upload the image directly. You can then paste that source into the above before/after sections. --> ## Checklist Docker and GPU tests run on demand. Push the commits you want tested, then comment `run-ci` on the pull request. - [ ] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [ ] I have run the [`pre-commit` checks](https://pre-commit.com/) 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 (do **not** edit `CHANGELOG.rst` or bump `extension.toml` — CI handles that) - [ ] 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 -->
# Description Updates the CUDA-enabled PyTorch commands in the Isaac Lab Python package installation workflow to use `uv pip`, matching the uv-based environment setup. The managed conda workflow continues to render `python -m pip`. No new dependencies are required. ## Type of change - Bug fix (non-breaking change which fixes an issue) - Documentation update ## Release backport - [x] Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable. ## Validation - `uv run --isolated --extra dev -- sphinx-build -W --keep-going -j auto docs <temporary-output-directory>` — passed without warnings. - Verified the rendered Python-package commands use `uv pip` for Linux x86_64, Windows x86_64, and Linux aarch64. - `uv run isaaclab -f` — all applicable formatting and documentation hooks passed. The repository-wide changelog hook reports unrelated existing `develop` discrepancies in packages untouched by this docs-only change. ## Checklist - [x] I have read and understood the contribution guidelines - [x] I have run the applicable pre-commit checks - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] No source package was changed, so no changelog fragment is required - [x] My name already exists in `CONTRIBUTORS.md`
# Description Improve the environment browser by presenting related task variants as visual cards and making task capabilities easier to discover. This change: - groups manager-based, direct, camera, and direct-camera variants into one card - adds preview images and physics, renderer, and RL capability badges - supports searching by task name or capability - moves the Core, Contrib, and Warp scope selector alongside the task filters - updates responsive styling for the new card layout No additional dependencies are required. ## Type of change - Documentation update ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not included; the rendered documentation preview shows the updated card layout. ## 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 formatting and pre-commit checks - [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 - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (no source packages are touched) - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
…les demo (#7652) # Description Deformable objects in the Newton VBD deformables demo passed through the ground plane, and cloth sheets were occasionally launched several metres into the air. Two causes: - Collision ran once per 10 ms tick with no continuous collision detection, while objects dropped from up to 3.5 m cross the 18 mm contact detection band within a single tick. The plane was missed during the crossing tick and the penalty force resolved on the next one, ejecting the object. - Young's modulus was sampled up to 1e8 Pa, far stiffer than the contact penalty can resist, so the elastic response overwhelmed the ground contact and vertices ended up below the plane. This sets `collision_decimation` to 1 so the collision pipeline re-runs on every solver substep, caps the sampled Young's modulus at 1e7 Pa, and raises the VBD iteration count to 20. Only affects `--physics newton_vbd`; the PhysX paths are unchanged. Measured over 6 s with two seeds, the stiffness and iteration changes alone still left 5 objects stranded in the air (one cloth at 3.27 m, another at 0.53 m, a volume deformable at 1.43 m). With `collision_decimation = 1` every object settles on the plane and worst-case penetration drops from 51 mm to 29 mm. Fixes nvbugs 6201420 ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Type of change - 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] My changes generate no new warnings - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
# Description Forward-ports #7633 from `release/3.0.0` to `develop`. `VideoRecorder` logs the Kit/Newton "requires cubric" warning from `_frame_from_visualizer()`, which is called on every captured frame. Because the condition is fixed recorder configuration state, repeating the warning once per frame floods the terminal without adding information. This change adds a per-recorder guard so the warning is emitted on the first applicable capture only. Frame capture continues on every frame, the warning text is unchanged, and each independent recorder still emits its own warning. The original commit by @klakhi is preserved. The test also covers a second recorder instance, addressing the review feedback on #7633. ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` Existing release PR: #7633 ## Screenshots N/A — console-output behavior only. ## Validation - Regression test on unmodified `upstream/develop`: failed as expected with 6 warnings instead of 2. - `PYTHONPATH=source/isaaclab:source/isaaclab_visualizers uv run --no-project --with pytest --with numpy --with torch --with gymnasium --with lazy-loader --with warp-lang --with 'moviepy<2' python -m pytest source/isaaclab/test/envs/test_video_recorder.py -q` — 33 passed. - Changelog fragment gate — passed against the current `upstream/develop`. - `uv run --no-project --with-editable ./source/isaaclab --with pre-commit isaaclab -f` — passed all hooks. ## 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 with `uv run isaaclab -f` - [x] I have made corresponding changes to the documentation (none required; no public API or documented behavior changed) - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package - [x] The original contributor already exists in `CONTRIBUTORS.md` --------- Co-authored-by: Krishna Lakhi <klakhi@nvidia.com>
…positioned (#7650) …itioned # Description QA reported that after pressing `R` during SO-101 leader-arm joint teleoperation (`IsaacContrib-Stack-Cube-SO101-Joint-Teleop-v0`), the environment resets but teleoperation appears to "stop working" and the robot no longer responds to the physical leader arm. This is expected, not a bug: pressing `R` calls `reset(pause=True)`, which resets the environment **and** pauses teleoperation until the operator presses `B` to resume. This task's joint-teleop pipeline mirrors the leader arm's raw joint angles onto the follower with no re-anchoring or clutch, so resuming immediately after a reset -- without first moving the physical leader arm back to match the follower's reset pose -- would command an instantaneous, large joint motion on the follower. The pause exists specifically to give the operator a chance to reposition the leader arm safely before resuming. This behavior was previously undocumented. This PR adds a note explaining it, placed directly after the keyboard-shortcuts table in the SO-101 example section of the teleop docs. Fixes # (issue) ## Type of change - Documentation update ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Checklist Docker and GPU tests run on demand. Push the commits you want tested, then comment `run-ci` on the pull request. - [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 - [x] I have added tests that prove my fix is effective or that my feature works - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (do **not** edit `CHANGELOG.rst` or bump `extension.toml` — CI handles that) - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
# Description The released aggregate wheel currently copies all root optional dependencies into its metadata. The pinned RL-Games and Robomimic integrations are Git requirements and do not provide package-index wheels, so they cannot be included in the released PyPI package. This change keeps both integrations available in source checkouts while making the aggregate wheel metadata publishable: - omit the `rl-games` extra and its transitive helper requirements from generated wheel metadata; - remove the `robomimic` requirement from the wheel-only `mimic` extra while retaining Isaac Lab Mimic; - document that RL-Games and Robomimic require a source checkout; and - add regression coverage for the generated metadata. No new dependencies are required. ## Type of change - Bug fix (non-breaking change which fixes an issue) - Documentation update ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` A direct cherry-pick PR for `release/3.0.0` is being opened alongside this PR. ## Validation - `PYTHONPATH=source/isaaclab uv run --no-project --with pytest --with rich --with toml python -m pytest source/isaaclab/test/cli/test_wheel_builder_metadata.py -q` (11 passed) - `uv run --no-project --with ruff ruff check tools/wheel_builder/gen_pyproject.py source/isaaclab/test/cli/test_wheel_builder_metadata.py` - `uv run --no-project --with ruff ruff format --check tools/wheel_builder/gen_pyproject.py source/isaaclab/test/cli/test_wheel_builder_metadata.py` - `uv run --no-project python tools/changelog/cli.py check` against `upstream/develop` - `bash tools/wheel_builder/build.sh`; inspected the built wheel METADATA and confirmed it has neither the `rl-games` extra nor `rl-games`/`robomimic` requirements - Sphinx rendered the changed installation page successfully in a lightweight macOS docs environment. The repository lockfile excludes macOS, so the complete warning-free docs environment is left to Linux CI. ## Screenshots Not applicable. ## Checklist - [x] I have read and understood the contribution guidelines - [x] I have run the applicable pre-commit checks - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove the fix is effective - [x] I have added a changelog fragment under `source/isaaclab/changelog.d/` - [x] My name already exists in `CONTRIBUTORS.md`
# Description Update the Docker documentation to use the Isaac Lab 3.0.0 RC1 release images: - `nvcr.io/nvidia/isaac-lab:3.0.0-rc1` - `nvcr.io/nvidia/isaac-lab:3.0.0-rc1-kitless` Also update the OSMO workflow default so it matches the documented container image, and refresh the stale editable-package versions in `uv.lock`. Wheel installation remains version-independent. ## Type of change - Documentation update - Lockfile maintenance ## Release backport - [x] Backport this pull request to the active release branch after it merges into `develop` ## Validation - [x] `git diff --check` - [x] `uv lock --check` (436 packages) - [x] Running `uv lock` produces no further lockfile changes - [x] Wheel installation files match `upstream/develop` - [ ] Full repository formatting/docs build (the uv lock excludes this macOS host) ## Checklist - [x] I have read and understood the contribution guidelines - [ ] I have run the pre-commit checks locally - [x] I have made corresponding changes to the documentation - [x] Tests are not applicable to this documentation and generated-lockfile update - [x] No source package was touched, so no changelog fragment is required - [x] My name already exists in `CONTRIBUTORS.md`
## Summary Ports the focused security updates from internal MR7 onto develop. - Updates GitPython, Pillow, and PyArrow security selections and refreshes the lockfile. - Installs a checksum-verified Git LFS 3.8.0 executable in both container images. - Adds offline regression coverage for dependency pins and the Git LFS installer. - Includes the IsaacLab changelog fragment. ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Release backport - [ ] Backport this pull request to the active release branch after it merges into develop A matching release/3.0.0 PR is being opened directly because both security branches were explicitly requested. ## Validation - Nine security dependency tests pass. - pyproject.toml and uv.lock parse successfully. - Git LFS installer passes bash syntax validation. - Focused pre-commit hooks pass. ## Checklist - [x] I have read and understood the contribution guidelines - [x] I have run the pre-commit checks - [x] I have made corresponding changelog changes - [x] My changes generate no new warnings - [x] I have added tests that prove the fix is effective - [x] I have added a changelog fragment for the touched package - [x] My name already exists in CONTRIBUTORS.md Co-authored-by: Sheikh Dawood <sabdulajees@nvidia.com>
…ns (#7805) ## Summary - Ports the SonarQube and security hardening changes from internal MR6 onto current `develop`. - Rejects legacy pickled actuator checkpoints before deserialization and requires TorchScript archives. - Hardens CI command argument handling and MDL import parsing. - Pins RL-Games to `02d1958`, where Ray and Weights & Biases are optional dependencies. - Adds an explicit IsaacLab `wandb` extra while keeping Ray and W&B out of the default `all` container installation. ## Validation - `uv lock --check` - Verified `--extra all` exports RL-Games without Ray or W&B. - Verified `--extra wandb` exports W&B explicitly. - Built the RL-Games wheel and verified its metadata marks `ray` and `wandb` as extras only. - Ruff, Ruff format, YAML, TOML, codespell, security, shell syntax, and Python compilation checks passed. - GPU/runtime actuator tests require Linux/Windows CI; the project lock does not support this macOS host. ## Type of change - Bug fix (non-breaking change except that unsafe legacy pickle actuator checkpoints must be converted to TorchScript) ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Checklist - [x] I have read and understood the contribution guidelines - [x] I have run formatting and lint checks - [x] My changes generate no new warnings - [x] I have added a regression test for unsafe checkpoint deserialization - [x] I have added the required changelog fragment - [x] My name already exists in `CONTRIBUTORS.md` --------- Co-authored-by: Sheikh Dawood <sabdulajees@nvidia.com>
# Description `--video` enabled a headless Kit visualizer and continuous PhysX Fabric transform updates for the full training run, even though frames are only needed during capture windows. This caused a substantial FPS drop between recordings. This change treats headless visualizers as on-demand rather than continuous renderers, disables continuous Fabric synchronization after PhysX initialization, and synchronizes transforms immediately before each visualizer frame capture. RTX camera sensors explicitly retain continuous Fabric updates. ### RTX 5090 benchmark `Isaac-Humanoid-Direct`, PhysX, 4,096 environments, RSL-RL, 16 iterations. Idle results exclude iterations 0 and 10, which contain the two scheduled 32-frame capture windows. | Configuration | Mean idle FPS | Difference | | --- | ---: | ---: | | Plain headless | 360,635 | — | | Offscreen RTX enabled, no video recorder | 326,336 | -9.5% vs. plain headless | | Periodic `--video` with this fix | 315,966 | -3.2% vs. offscreen RTX control | The unfixed periodic-video run reproduced approximately 214,300 FPS between captures, about 34% below its plain-headless control. With this fix, most of that avoidable idle-window regression is removed. Capture iterations still drop as expected; the fixed periodic run measured 76,127 and 135,151 FPS during its two capture iterations, with 289,675 FPS overall including both captures. No new dependencies are required. ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Release backport - [ ] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable; this is a performance fix. A frame probe on the RTX 5090 verified that all 20 captured frames were non-black and changed over time (`temporal_std=72.21`, mean consecutive delta `12.46`). ## Checklist Docker and GPU tests run on demand. Push the commits you want tested, then comment `run-ci` on the pull request. - [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 (not applicable; no public API or user workflow changed) - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (do **not** edit `CHANGELOG.rst` or bump `extension.toml` — CI handles that) - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there ### Validation - `uv run --frozen --extra test --extra rerun python -m pytest source/isaaclab/test/sim/test_simulation_context_visualizers.py source/isaaclab/test/envs/test_video_recorder.py -q` — 74 passed - `uv run --frozen isaaclab -f` — all hooks passed - `source/isaaclab/test/sensors/test_camera.py::test_camera_init` — passed on RTX 5090
## Description Warn when the deprecated `isaaclab.sh` wrapper is invoked and direct users to `uv run isaaclab`. Warn users when legacy RSL-RL configuration fields are migrated at runtime; this compatibility support will end in Isaac Lab 3.1. ## Type of change - Documentation update ## Release backport - [ ] Backport this pull request to the active release branch after it merges into `develop` ## Checklist - [x] I have read and understood the contribution guidelines - [x] I have run the pre-commit formatting and lint checks - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there ## Validation - `uv run python -m pytest source/isaaclab_rl/test/test_rsl_rl_cfg_deprecation.py` - `uv run isaaclab -f` (all formatting and lint hooks passed; the changelog gate reports unrelated baseline changes)
## Description Implicit actuators on the standard ovphysx path submitted their PD effort estimate as an additional joint force while native joint drives remained enabled. Submit the processed effort command so implicit joints receive only their feedforward effort, while explicit joints retain their computed motor output. This matches the existing PhysX adapter. Extend the existing tests to cover both actuator execution paths and reordered implicit joints, including force readback, native gains and effort telemetry. Refresh the Shadow Hand and Kuka motion-vector golden images to match the corrected implicit-actuator motion. ## Type of change - Bug fix ## Validation - The original selector fails the ordinary mixed-actuator GPU case and the reordered implicit CPU/GPU cases at the force assertions. The native actuator case already passes. - All four focused cases pass with the corrected selector, using separate CPU and GPU processes. - The base commit passes both motion-vector comparisons. With the corrected selector, both cases fail against the old goldens and pass against the refreshed images at the existing 3% pixel threshold. The refreshed images reproduce the CI outputs byte-for-byte. - Formatting and changelog checks pass. ## Release backport - [ ] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Checklist - [x] I have read the contribution guidelines. - [x] I have run the pre-commit checks with `uv run isaaclab -f`. - [x] I have added regression coverage and a package changelog fragment. - [x] My name already appears in `CONTRIBUTORS.md`. --------- Co-authored-by: marcodiiga <1969828+marcodiiga@users.noreply.github.com>
Bumped packages: - isaaclab: 24.2.1 → 24.2.2 - isaaclab_ov: 3.1.1 → 3.1.2 - isaaclab_rl: 0.17.4 → 0.17.5
…http (#7835) # Description Ports the supply-chain hardening from internal MR !8 onto the current `develop` branch and updates the remaining compatible web dependency selection. - installs CI contract-test tools from a complete hash-locked, wheel-only requirements file - restricts Git LFS downloads and redirects to HTTPS - preserves the newer uv-based cuRobo build, which no longer downloads or executes `get-pip.py` - raises Starlette to `>=1.3.1` - pins aiohttp to `==3.14.1` to match `isaacsim-kernel==6.1.0.0` - adds dependency-selection and supply-chain regression coverage ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Release backport - [ ] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable. ## Validation - Docker/security contract tests: 50 passed, 12 subtests passed - Full pre-commit suite passed - Changelog fragment validation passed - `uv lock --check` passed - Independently verified the pinned `get-pip.py` digest used by the release implementation ## Checklist - [x] I have read and understood the contribution guidelines - [x] I have run the pre-commit checks - [x] Documentation is not required for this dependency and CI hardening change - [x] My changes generate no new warnings - [x] I have added tests that prove the fix is effective - [x] I have added a changelog fragment for the affected package - [x] My name already exists in `CONTRIBUTORS.md` --------- Co-authored-by: Sheikh Dawood <sabdulajees@nvidia.com>
## Description Updates the `rsl-rl-lib` pin from 5.4.1 to 5.5.1 and removes the redundant direct `onnxscript` dependency, which RSL-RL already provides. This is the dependency-only portion of #7784; no compatibility shims, tests, or runtime code are changed. ## Type of change - Dependency update ## Release backport - [ ] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable. ## Validation - `uv lock --check` - `uv run isaaclab -f` - `uv run python -m pytest source/isaaclab_rl/test/test_rsl_rl_cfg_deprecation.py -q` (39 passed) ## Checklist - [x] I have read and understood the contribution guidelines - [x] I have run the pre-commit checks with `uv run isaaclab -f` - [x] Documentation changes are not required for this dependency-only update - [x] My changes generate no new warnings - [x] Existing compatibility tests cover this dependency-only update - [x] A changelog fragment is not required because no source package is changed - [x] My name already exists in `CONTRIBUTORS.md`
## Description The environment browser currently requests preview images from flattened documentation paths that do not exist. Its MP4 previews are also Git LFS objects, so multi-version documentation deployments can serve pointer text instead of decodable video. This change: - serves task preview images from the Isaac Sim S3-backed download host while preserving their `tasks/...` paths; - removes the 93 task preview JPEGs from the repository; - resolves the four existing MP4 previews from their actual `_static/tasks/previews` directory; - falls back to the task image when a preview video cannot be loaded or decoded; and - remembers failed video URLs so later control changes do not expose the broken video again. For example, the Cartpole fallback now loads from: `https://download.isaacsim.omniverse.nvidia.com/isaaclab/images/tasks/classic/cartpole.jpg` The S3 objects must be uploaded under `isaaclab/images/tasks/` before this PR is ready to merge. Supersedes #7814. ## Type of change - Bug fix (non-breaking change which fixes an issue) - Documentation update ## Validation - `node --check docs/source/_static/css/environment-browser.js` - `uv run --extra test python -m pytest --noconftest tools/test/test_environ_docs.py` (35 passed) - `uv run --isolated --extra dev -- make -C docs current-docs` (succeeded without warnings) - `uv run isaaclab -f` (all hooks passed) - Verified the upload archive contains all 93 task preview JPEGs and all 65 unique browser image paths ## Checklist - [x] I have read and understood the contribution guidelines - [x] I have run the pre-commit checks - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] Existing environment documentation tests pass - [x] No source package was touched, so no changelog fragment is required - [x] My name already exists in `CONTRIBUTORS.md` --------- Co-authored-by: Kelly Guo <kellyg@nvidia.com>
…y tasks (#7520) ## The problem `ArticulationData._sim_bind_joint_pos` is bound straight to `ArticulationView.get_dof_positions()`: ```python # isaaclab_newton/assets/articulation/articulation_data.py:1594 self._sim_bind_joint_pos = self._root_view.get_dof_positions(SimulationManager.get_state_0())[:, 0] # newton/_src/utils/selection.py:1587 def get_dof_positions(self, source): """Get the joint coordinate positions (DoF positions) ...""" return self._get_attribute_values("joint_q", source) ``` The name says DOF, the return is `joint_q` which is coordinate space. Newton (like MuJoCo) stores a ball joint as a 4-component unit quaternion against 3 DOFs, so for an articulation containing one the array is wider than `num_joints`, while `joint_names`, `joint_vel`, `default_joint_pos` and every joint gain stay in DOF space. On Agility Digit (6 ball joints) that is **56 coordinates against 50 DOFs**. PhysX is unaffected: its articulations are reduced-coordinate, a spherical joint is 3 scalars, `nq == nv`, and the string `joint_q` does not appear anywhere in `isaaclab_physx`. The MDP layer was written against that assumption and the Newton backend inherited it without a conversion. IsaacLab addresses joints by DOF index everywhere in `joint_names`, `find_joints`, `SceneEntityCfg.joint_ids`, so both directions break, and they break silently. ### Reads Every MDP term indexes both arrays with the same ids: ```python # isaaclab/envs/mdp/rewards.py:186 asset.data.joint_pos.torch[:, asset_cfg.joint_ids] - asset.data.default_joint_pos.torch[:, asset_cfg.joint_ids] ``` The two arrays are in different spaces, so past the first ball joint they refer to different joints. On Digit `joint_pos[13]`, `left_leg_knee`, reads a quaternion `w`, which barely leaves 1.0, so the knee angle never reaches the policy or the rewards. `sync_torque_telemetry` carries the same offset. ### Writes `write_joint_position_to_sim_*` scatters DOF-indexed values into coordinate slots, so `reset_joints_by_scale` corrupts the pose on every reset: the loop-closure residual goes from 0.0004 mm to 828 mm and the solver diverges within 10 steps. ## The fix `joint_coordinates.py` adds `JointCoordinateMap`, which builds the coordinate ↔ DOF index tables once per articulation and converts with four small Warp kernels. Ball joints go through rotation vector ↔ quaternion; the gather forces `w >= 0` first, because a quaternion double-covers SO(3) and without that a fixed pose can decode to `+θ` one step and `-(2π − θ)` the next, injecting discontinuities into the observation. Rotation vector is the representation consistent with `joint_qd`, which already holds angular velocity in the joint frame. `required` is False when every joint has one coordinate per DOF — i.e. every articulation without a ball joint. Those keep the existing zero-copy view onto `joint_q` and cost nothing. Four call sites: the binding in `articulation_data.py`, a lazy `_refresh_joint_positions()` in `update()` and the `joint_pos` property, a `_flush_joint_positions()` after each of the four joint position writers in `articulation.py`, and a forced refresh in `_post_actuator` (it runs inside the step, before `update()` bumps the timestamp). The scatter is scoped to the environments each write touched. Resets are staggered, so an unscoped scatter would round-trip every environment's ball joints through the log map on nearly every step, and the float32 rounding lands on the loop-closure constraints. ## The Digit tasks `DigitPhysicsCfg` gains a `newton_mjwarp` branch, so `presets=newton_mjwarp` selects it on the shipped tasks; the PhysX default is unchanged. Digit was never PhysX-only by design — that missing branch was the whole implementation of it. Four items specific to `digit_v4.usd`, all gated on the preset: * 32 `CollisionAPI` prims, every one a `/Visual/` decoration mesh on a RealSense camera mount. They become 57% of the robot's shapes and produced 3e7 N contact forces 1.4 m above the ground. * Ten joints ship with armature below MJWarp's explicit-damping bound `c·h/I < 2` — `wrist_yaw` at 7.86, eight more at 2.74. They get their own actuator group with `armature = preset(default=None, newton_mjwarp=0.10)`. * No `articulation_props`, so Newton filtered all 253 intra-articulation shape pairs and the legs passed through each other. * `entropy_coef = preset(default=0.01, newton_mjwarp=0.005)`. MJWarp is less forgiving of the action tail than PhysX, and at 0.01 a seed occasionally diverges late in training while the policy itself is still healthy. ## Result on the task this came from Digit was listed in `docs/source/refs/issues.rst` as "not currently validated" on Newton, attributed to its closed kinematic loops. The loops import and solve fine; this was the actual blocker. With it fixed (3 seeds each, 4096 envs, `Metrics/success_rate` at the final iteration): | | before | after | |---|---|---| | Velocity-Flat-Digit | 0.000 / 0.000 / 0.000 | **1.000 / 1.000 / 1.000** | | Velocity-Rough-Digit | 0.019 / 0.005 / 0.002 | **0.992 / 0.993 / 1.000** | Episode length 985–1000 of 1000, tip-over termination 0.008 (was 1.000 on rough), terrain curriculum climbing to 3.5 (was pinned at 0). - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [x] bug fixed - [ ] I have run the [`pre-commit` checks](https://pre-commit.com/) 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 - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (do **not** edit `CHANGELOG.rst` or bump `extension.toml` — CI handles that) - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there --------- Co-authored-by: ooctipus <zhengyuz@nvidia.com>
…7800) # Description Fixes the AnymalD / OVPhysX env-step regression introduced when #7713 made the native Newton actuator path the default (perf team repro: 16384 envs, 47 → 256 ms per env step, GPU utilization 65% → 12%; bisected to `cdb244d1`). **Root cause.** `PhysxActuatorRuntime._run_native_actuator_kernels` launches `sync_torque_telemetry` with `data.joint_stiffness`, `data.joint_damping` and `data.joint_effort_limits` every physics step. On OVPhysX those are CPU-only bindings whose getters were gated on the simulation timestamp, so each access was a blocking `TensorBinding.read` into pinned host staging plus an H2D copy — three host round-trips per physics step, re-fired every step because `update()` bumps the timestamp, with cost linear in the environment count (measured 0.35 ms at 256 envs, 1.07 ms at 1024; extrapolates to ~15 ms per physics step at 16384). PhysX returns cached views and the Isaac Lab actuator path only reads gains for implicit actuators, which is why only OVPhysX × native regressed. The LSTM itself is on the GPU throughout (`DriveNeuralLSTM` reports `warp_device=cuda:0 torch_device=cuda:0`); the regression is host-side. **Fix.** Joint properties (gains, limits, armature, friction) and body mass/inertia are static under stepping, and their `write_*` / `set_*` setters already update the data buffers in place before pushing to the wheel. They are now read through the existing `_read_static_binding_into_buf` gate — once after explicit invalidation — instead of once per step. Body state buffers (poses, velocities, accelerations) keep the per-step refresh. Tendon properties are left unchanged (GPU-resident; separate writers) and can follow in a later PR. **Measured (laptop RTX 5000 Ada, `isaaclab benchmark runtime`, `Isaac-Velocity-Flat-AnymalD`, `physics=ovphysx`, 1024 envs, 100 steps):** | | native actuators, before | native actuators, after | Isaac Lab actuators | | --- | --- | --- | --- | | env step | 22–30 ms (unstable) | **14 ms, std 0** | 14–15 ms | | actuator step / physics step (median) | 2.0–2.4 ms | **0.94 ms** | 0.75 ms | | gain/limit getters / physics step | 1.07 ms (3 blocking reads) | 0.01 ms | n/a | Regression test `test_static_property_reads_are_not_invalidated_by_simulation_steps` asserts one binding read across several steps for joint and body properties, one more after explicit invalidation, per-step refresh for state buffers, and the joint-ordering gather path. It fails on `develop` (`assert 3 == 1`) and passes with this change. Fixes # (perf team regression report; no issue filed yet) ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## 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` - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (do **not** edit `CHANGELOG.rst` or bump `extension.toml` — CI handles that) - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
## Description Downstream projects do not inherit Isaac Lab's uv overrides. The published wheel's loose Torch requirements therefore allowed newer, untested builds from PyPI, as reported by the SO-101 tutorial with Torch 2.13.0. Pin torch/torchaudio 2.11.0 and torchvision 0.26.0 directly in the published dependencies, remove the redundant uv overrides and their generated copies, and refresh the lockfile metadata. The existing platform-specific PyTorch indexes remain unchanged: CUDA 12.8 on Linux x86_64 and Windows, and CUDA 13.0 on Linux aarch64. Normal `uv sync` and `uv run` commands require no CUDA selectors. Document that downstream uv projects must configure their own PyTorch indexes. The corresponding tutorial fix adds those indexes, keeps x86 on CUDA 12, and removes its obsolete Newton release-1.5 override. The pinned Warp 1.17.0 installation reports CUDA Toolkit 12.9. Isaac Lab already pins the compatible Newton 1.6.0rc1 release and documents the OpenUSD parser workaround. ## Validation - 22 focused metadata and wheel-builder tests passed, including the updated check that direct Torch pins match the central version table. - `uv lock --check` and `uv run isaaclab -f` passed. - Tutorial: 61 tests, Ruff, and the reported 8-environment/100-step zero-agent command passed with the default CUDA 12.8 build and `PXR_WORK_THREAD_LIMIT=1`. - Co-installation: `uv sync --locked --extra isaacsim --extra test` installed Isaac Sim 6.1.0.0 alongside Torch 2.11.0+cu128, matching Isaac Sim's Torch pin without an override. `uv run --extra isaacsim isaaclab train --rl_library rsl_rl --task Isaac-Cartpole-Direct --num_envs 16 --max_iterations 5` passed with both `physics=isaacsim_physx` and `presets=newton_mjwarp` in the same environment (exit 0 and `Training time:` for each). PhysX used the existing install-CI Carbonite environment shim preload; both runs set `PXR_WORK_THREAD_LIMIT=1`. - GPU validation used an RTX PRO 6000 Blackwell Workstation Edition with driver 580.159.03. No Windows or aarch64 hardware runs were performed. ## Type of change - Bug fix - Documentation update ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Checklist - [x] Ran pre-commit checks with `uv run isaaclab -f` - [x] Updated installation documentation - [x] Updated existing version-pin coverage - [x] Added an Isaac Lab changelog fragment
# Description The environment browser generated the Franka soft-lift command without the optional tetrahedralization dependencies, causing the task to fail at startup. Add task-level required extras to the generated browser metadata so both the standard and camera variants now produce commands beginning with: ```bash uv run --extra tetrahedralization isaaclab train --rl_library rsl_rl --task Isaac-Lift-Soft-Franka ``` The browser continues to append the selected physics and task presets. Regression tests cover required-extra collection and row generation. ## Type of change - Bug fix (non-breaking change which fixes an issue) - Documentation update ## Release backport - [ ] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable. ## Validation - `uv run --extra test python -m pytest --confcutdir=tools/test tools/test/test_environ_docs.py -q` (38 passed) - `uv run --isolated --extra dev -- make -C docs current-docs` (warning-free build) - Staged pre-commit hooks passed; the branch-wide changelog hook was skipped because this PR does not touch a `source/<package>/` package and the checkout contains unrelated changelog findings. ## Checklist - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [ ] 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 - [x] I have added tests that prove my fix is effective or that my feature works - [x] Changelog fragment is not applicable because no `source/<package>/` package changed - [x] My name already exists in `CONTRIBUTORS.md`
## Description Follow-up to #7822 that addresses the two review comments left on the merged PR: - resolve task-card thumbnails from the external task-image host instead of the deleted local `_static/tasks` assets; and - keep non-task preview images, such as `Lift-Soft-Franka`, on their local `_static` paths. Both the selected-task preview and task-card thumbnails now use one shared URL resolver. Addresses: - #7822 (comment) - #7822 (comment) ## Type of change - Bug fix (non-breaking change which fixes an issue) - Documentation update ## Release backport - [ ] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Validation - `node --check docs/source/_static/css/environment-browser.js` - `uv run --extra test python -m pytest --noconftest tools/test/test_environ_docs.py` (35 passed) - `uv run --isolated --extra dev -- make -C docs current-docs` (succeeded without warnings) - Headless Chrome verified Cartpole resolves to the external task-image URL and `Lift-Soft-Franka` resolves to the local built `_static/newton` image. - `uv run isaaclab -f` (all applicable hooks passed; changelog validation passed separately against `upstream/develop` because the fork base is stale) ## Checklist - [x] I have read and understood the contribution guidelines - [x] I have run the pre-commit checks - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] Existing environment documentation tests pass - [x] No source package was touched, so no changelog fragment is required - [x] My name already exists in `CONTRIBUTORS.md`
# Description The Franka deformable-lift environments default to the Newton MJWarp/VBD proxy preset, but the shared Menagerie USD was not told to select its MuJoCo physics payload. The asset therefore retained its authored PhysX variant even when the environment selected Newton. This change keeps the choice task-owned and backend-specific: - Newton/default selects the asset's `Physics=mujoco` variant. - Isaac Sim PhysX and automatic PhysX select `Physics=physx`. - No asset, actuator, reward, observation, or rigid-task behavior changes. A focused regression test covers the default, explicit Newton, Isaac Sim PhysX, and automatic PhysX resolutions. It fails in all four cases on the unmodified base (`spawn.variants` is `None`) and passes after the fix. ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable; this fixes configuration resolution before the USD is spawned. ## Validation - `uv run python -m pytest source/isaaclab_tasks/test/core/test_lift_env_cfg.py -q` — 7 passed. - `uv run python tools/changelog/cli.py check develop` — passed. - `uv run isaaclab -f` — passed. - `Isaac-Lift-Soft-Franka`, one environment, 32 random-agent steps with `physics=newton_mjwarp_vbd_proxy` — passed. - `Isaac-Lift-Soft-Franka`, one environment, 32 random-agent steps with `physics=isaacsim_physx` — passed. ## 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 changelog changes - [x] My changes generate no new warnings - [x] I have added tests that prove the fix is effective - [x] I have added a changelog fragment for every touched source package - [x] My name already exists in `CONTRIBUTORS.md`
# Description OvStage 0.1.1 had transform issues when using the GPU_INCREMENTAL setting. OvStage has fixed these issues in 0.2.0. The compat file was added to allow GPU_INCREMENTAL to be used when 0.2.0 is detected but still falls back to CPU_INCREMENTAL Fixes # (issue) Performance boost ~9x FPS when using ovstage 0.2.0 ## Type of change - Compatibility module for ovstage 0.1.1 and 0.2.0 ## Checklist Docker and GPU tests run on demand. Push the commits you want tested, then comment `run-ci` on the pull request. - [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 - [x] I have added tests that prove my fix is effective or that my feature works - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (do **not** edit `CHANGELOG.rst` or bump `extension.toml` — CI handles that) - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
# Description Prevents Newton VBD initialization from hanging indefinitely while Warp balances graph colors. Warp's optional balancing pass can cycle between valid color assignments without changing the maximum-to-minimum group-size ratio. Newton VBD only requires a valid coloring for correctness, so this change keeps Warp's initial valid coloring and disables the optional balancing pass at both VBD builder-coloring call sites. This is a temporary downstream workaround. No new dependencies are introduced. Related issues: - Upstream Warp defect: [NVIDIA/warp#1964](NVIDIA/warp#1964) - Isaac Lab cleanup tracker for restoring balancing after the upstream fix: #7827 ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) ## Release backport - [ ] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable. ## Testing - `uv run --extra test python -m pytest source/isaaclab_newton/test/physics/test_vbd_core.py -q` — 8 passed - `OMNI_KIT_ACCEPT_EULA=Y uv run --extra test --extra tetrahedralization --extra isaacsim python -m pytest source/isaaclab_contrib/test/deformable/test_deformable_object.py -q` — 19 passed; six consecutive full-file runs completed without a hang - `uv run python tools/changelog/cli.py check develop` — passed - `uv run isaaclab -f` — passed ## 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 with `uv run isaaclab -f` - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective - [x] I have added a changelog fragment under `source/isaaclab_newton/changelog.d/` - [x] My name already exists in `CONTRIBUTORS.md`
# Description Promotes Isaac Lab from the Newton `1.6.0rc1` release candidate to the final `1.6.0` release for both workspace and wheel installs. This updates the root dependency and uv override, generated override files, wheel-install assertion, and lockfile. No user migration is required. ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Release backport - [ ] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots Not applicable. ## Validation - `uv lock --check` - `PYTHONPATH=source/isaaclab uv run --no-project --with pytest python -m pytest source/isaaclab/test/cli/test_wheel_builder_metadata.py source/isaaclab/test/cli/test_uv_run_pyproject.py` — 22 passed - `uv run --no-project python tools/changelog/cli.py check <develop-base>` — passed - Changed-file pre-commit checks — all applicable checks passed. The Git LFS pointer hook was skipped because `git-lfs` is unavailable on the macOS host; no LFS-managed files changed. ## Checklist - [x] I have read and understood the contribution guidelines - [x] I have run the applicable pre-commit checks - [x] Documentation changes are not required for this dependency promotion - [x] My changes generate no new warnings - [x] Existing metadata tests cover the updated dependency contract - [x] I have added a changelog fragment for the affected package - [x] My name already exists in `CONTRIBUTORS.md`
## Summary - make `develop` the multi-version documentation landing-page default - render and validate the selected documentation redirect on Unix and Windows - continue building `v3.0.0-EA` as an available versioned tag without making it the site default - prepare `develop` to own the repository's scheduled workflows - remove the obsolete backwards-compatibility cron so the default-branch switch does not activate it - replace stale default-branch comments and point active nightly examples at `develop` and `release/3.0.0` The GitHub Pages deployment environment already permits `develop`, so no environment policy change is required. ## Cutover order 1. Merge the README backport (#7771) into `release/3.0.0` and create the exact-case `v3.0.0-EA` tag from the intended release commit. 2. Merge this PR and the develop README PR (#7770) into `develop`. 3. Change the repository default branch to `develop`. 4. Manually dispatch the Docs workflow from `develop` and verify the site root redirects to `/develop/`. The previous release-default preparation PRs (#7768 and #7769) are superseded by this plan. ## Type of change - Bug fix (non-breaking change which fixes an issue) - Documentation update ## Validation - passed the applicable pre-commit formatting, YAML, spelling, license, and Git LFS checks - exercised redirect generation with the default `DOCS_DEFAULT_REF=develop` - verified a missing default ref fails the build - verified the scheduled workflow set and branch targets that will become active on `develop` - verified the GitHub Pages deployment branch policy already allows `develop` - `uv run --isolated --extra test -- make -C docs current-docs` and `uv run isaaclab -f` cannot resolve on macOS arm64 because the project lockfile supports Linux and Windows; Linux PR CI remains the authoritative full build No package source changed, so no changelog fragment is required.
## Summary - keep the `develop` README documentation links on the published `develop` documentation - replace the repository-source RL link with the published reinforcement-learning page - replace the obsolete Tutorials landing page with the current tutorials and how-to index - remove the deleted `#local-installation` anchor - replace the beta2 release-branch compatibility entry with the exact `v3.0.0-beta2` tag ## Cutover note The compatibility table records the planned `v3.0.0-EA` tag, but this branch's README links intentionally continue to track `/develop/` before and after `develop` becomes the repository default. The release-specific counterpart is #7771, whose links point to the immutable `/v3.0.0-EA/` documentation. ## Type of change - Documentation update ## Validation - verified every linked `develop` documentation URL returns HTTP 200 - verified every linked page source exists on both `develop` and `release/3.0.0` - verified all local README targets exist - passed the applicable pre-commit formatting, spelling, and Git LFS checks - `uv run --isolated --extra test -- make -C docs current-docs` and `uv run isaaclab -f` cannot resolve on macOS arm64 because the project lockfile supports Linux and Windows; PR CI remains the authoritative full check No package source changed, so no changelog fragment is required.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )