refactor: fuse set_world_poses/set_scales into single _compose_fabric_transform#5
Draft
pv-nvidia wants to merge 171 commits into
Draft
refactor: fuse set_world_poses/set_scales into single _compose_fabric_transform#5pv-nvidia wants to merge 171 commits into
pv-nvidia wants to merge 171 commits into
Conversation
# Description Replaces the single-buffer WrenchComposer with a dual-buffer architecture that stores global (world-frame) and local (body-frame) forces separately. Follows develop's warp-first paradigm: all internal buffers are warp arrays, inputs accept both torch.Tensor and wp.array (warp ingests both natively), outputs are wp.array. Updates PhysX and Newton asset write_data_to_sim to use add_raw_buffers_from + compose_to_body_frame instead of the old composed_force/composed_torque merge pattern. ## Type of change - Bug fix (non-breaking change which fixes an issue) - ## Checklist - [ ] 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: ClemensSchwarke <clemens.schwarke@gmail.com>
…c-sim#5268) # Description - Add message-channel-based start/stop/reset control from the XR headset, replacing the legacy carb message bus path with TeleopCore's native `teleop_control_pipeline`. - Introduce `ControlEvents` dataclass, `poll_control_events()` helper, and `MessageChannelTeleopStateManager` for consuming control commands over the OpenXR opaque data channel (`XR_NV_opaque_data_channel`). - Bridge pipeline-based control events to legacy `add_callback()` callbacks so existing scripts work without migration. - Fix `IsaacTeleopDevice.reset()` to propagate reset to retargeters via `ExecutionEvents`, and fix `record_demos.py` to reset the teleop device on success-triggered environment resets. - Fix shutdown hang caused by Kit's pre-shutdown callback racing with the simulation loop. Fixes # (issue) ## Type of change <!-- As you go through the list, delete the ones that are not applicable. --> - Bug fix (non-breaking change which fixes an issue) ## Checklist - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format` - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
# Description
For the rendering correctness test, we don't really need the
`env.reset()` call to fill the camera output buffers. Instead, if we
remove `env.reset()`, the camera output buffers will be filled on the
invocation of camera.data:
```python
@Property
def data(self) -> CameraData:
# update sensors if needed
self._update_outdated_buffers()
# return the data
return self._data
```
This means we can remove `env.reset()` calls in the rendering
correctness test to avoid non-deterministic initial pose. Articulation
bodies will be at their default pose for rendering for all combos. With
this removal I can set the max pixel diff threshold to smaller
(stricter) values:
```python
"cartpole": 1.0, # decreased from 2.0
"shadow_hand": 3.0, # decreased from 8.0
"dexsuite_kuka": 4.0, # decreased from 10.0
```
The test will become more sensitive to capture rendering changes but
hopefully it can still tolerate minor pixel noise.
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
- Test-only change
## 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
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [ ] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
<!--
As you go through the checklist above, you can mark something as done by
putting an x character in it
For example,
- [x] I have done this task
- [ ] I have not done this task
-->
…5360) # Description Adds a new column to the environments list with available presets defined for all example environments. Fixes recent doc build errors. ## Type of change - Documentation update ## Checklist - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format` - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there <!-- As you go through the checklist above, you can mark something as done by putting an x character in it For example, - [x] I have done this task - [ ] I have not done this task --> --------- Co-authored-by: Kelly Guo <kelly@nvidia.com>
…and shared contract tests (isaac-sim#5179) # Description ### Summary Rewrites the Newton `XformPrimView` from scratch with correct local-pose semantics, a clean site-based architecture, and a shared test contract that enforces the same invariants across all backends (USD, Fabric, Newton). **Key changes:** - **Fix local poses**: `get_local_poses` / `set_local_poses` now correctly compute parent-relative transforms on GPU (`inv(parent_world) * prim_world`) instead of incorrectly returning world poses - **Fix set_world_poses**: Updates `site_local` offset instead of writing `body_q` directly (which would move the parent body) - **Guard against misuse**: Raises `ValueError` if prim path resolves to a physics body or collision shape — XformPrimView is for non-physics child prims only (cameras, sensors, markers) - **Warp-native API**: All inputs/outputs are `wp.array` — no torch/list conversion overhead - **Factory dispatch**: `from isaaclab.sim.views import XformPrimView` now auto-selects the correct backend (USD, Fabric, Newton) via `XformPrimViewFactory` - **Composition over inheritance**: PhysX `FabricXformPrimView` uses composition (`self._usd_view`) instead of inheriting from `UsdXformPrimView` - **Explicit class names**: `UsdXformPrimView`, `FabricXformPrimView`, `NewtonSiteXformPrimView` — no more ambiguous `XformPrimView` in every package - **Shared contract tests**: 16 test functions in `xform_contract_tests.py` that any backend imports and runs by providing a `view_factory` fixture - **Benchmark updates**: Both benchmark scripts support Newton, use warp-native arrays, and include per-backend round-trip verification ### Type of change - [x] Bug fix (Newton local poses were fundamentally broken — `local == world`) - [x] New feature (shared contract test infrastructure, factory dispatch) - [x] Breaking change (Newton `XformPrimView` renamed to `NewtonSiteXformPrimView`, PhysX to `FabricXformPrimView`; indices parameter changed from `Sequence[int]` to `wp.array`) - [x] Documentation update ### Expected failures - `test_set_world_updates_local[cuda:0]` in Fabric — pre-existing limitation: `set_world_poses` writes to `omni:fabric:worldMatrix` but `get_local_poses` reads from USD, so local poses are stale after a Fabric world write. This will be fixed by the Fabric backend PR (isaac-sim#4923) which adds `omni:fabric:localMatrix` support. ### Test results | Backend | Passed | Failed | Skipped | |---|---|---|---| | Newton | 40 | 0 | 0 | | USD | 45 | 0 | 0 | | Fabric | 15 | 1 (xfail) | 16 (CPU) | | Camera | 20 | 0 | 0 | | TiledCamera | 61 | 0 | 0 | | RayCaster | 5 | 0 | 0 | ### Benchmark (1024 prims, 50 iterations, RTX 5090) ``` ======================================================================================================================== BENCHMARK RESULTS: 1024 prims, 50 iterations ======================================================================================================================== Operation Isaaclab Usd (ms) Isaaclab Fabric (ms) Isaaclab Newton Site (ms) ------------------------------------------------------------------------------------------------------------------------ Initialization 3.7168 3.6596 39.0608 Get World Poses 6.6730 0.0296 0.0180 Set World Poses 15.5574 0.0640 0.0186 Get Local Poses 4.6086 4.5637 0.0216 Set Local Poses 6.4680 6.6221 0.0218 Get Both (World+Local) 12.1240 4.7361 0.0374 Interleaved World Set->Get 23.4141 0.1050 0.0344 ======================================================================================================================== Total 72.5619 19.7800 39.2126 ======================================================================================================================== ``` ### Checklist - [x] I have read and understood the contribution guidelines - [ ] I have run the pre-commit checks 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there --------- Signed-off-by: Kelly Guo <kellyg@nvidia.com> Co-authored-by: Antoine Richard <antoiner@nvidia.com> Co-authored-by: Kelly Guo <kellyg@nvidia.com>
…aac-sim#5202) # Description `Articulation.find_joints` and `find_bodies` delegate to `resolve_matching_names`, which runs a Python regex double-loop on every call. Nsight profiling of the pick-place task showed this costs ~881μs per call (~1.83 ms / 1.5% of step time) for work that always returns the same result — joint and body names are fixed after construction. This PR adds a module-level `@functools.cache` on a new private `_resolve_matching_names_impl` helper. Hashable tuples are used for the cache key; cached results are immutable tuples that the public wrapper copies into fresh lists per caller, so callers cannot mutate shared state. `resolve_matching_names_values` is left uncached because its current callers only use it during init, never in the step loop. A `clear_resolve_matching_names_cache()` helper is called from `SimulationContext.clear_instance()` so cached entries from destroyed assets do not accumulate across scene rebuilds in long-lived processes. <!-- 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. --> 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. --> - New feature (non-breaking change which adds functionality) ## 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 - [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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [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 --> --------- Co-authored-by: Antoine Richard <antoiner@nvidia.com>
# Description The origin remote points to the public isaac-sim/IsaacLab repo. Agents and contributors should push to their own fork remote or to the remote of the PR they are working on instead. ## Type of change - Documentation update ## Checklist - [ ] 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
Expose a render: bool = True parameter on the step() method of all environment base classes (ManagerBasedEnv, ManagerBasedRLEnv, DirectRLEnv, DirectMARLEnv) and the MARL utility wrappers. When render=False is passed, all rendering calls are skipped: - GUI / RTX sensor renders inside the decimation loop - Post-reset re-renders for RTX sensors Physics simulation continues normally regardless of the flag. This allows user workflows that do not need rendering every step (e.g. headless RL training, fast rollouts) to opt out per-step. Also adds unit tests for render=False and mixed render flag stepping. # Description <!-- 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. --> 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) - New feature (non-breaking change which adds functionality) - Breaking change (existing functionality will not work without user modification) - Documentation update ## 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 - [ ] 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there <!-- As you go through the checklist above, you can mark something as done by putting an x character in it For example, - [x] I have done this task - [ ] I have not done this task --> --------- Co-authored-by: Kelly Guo <kelly@nvidia.com>
# Description <!-- 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. --> Improve Partial Visualization feature where a subset of envs are shown in the launched visualizers to speed up performance, making use of new updates to Newton. Newton visualizers align on using the set_visible_worlds API to select envs to show. Kit visualizer just sets non selected envs invisible. Updated docs and added tests. <!-- 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. --> - New feature (non-breaking change which adds functionality) - Documentation update ## 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 - [ ] 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there <!-- As you go through the checklist above, you can mark something as done by putting an x character in it For example, - [x] I have done this task - [ ] I have not done this task --> --------- Signed-off-by: matthewtrepte <mtrepte@nvidia.com>
# Description - Skips `source/isaaclab_tasks/test/benchmarking/test_environments_training.py` until we resolve auto-cancel issue with pipeline where previous jobs gets cancelled on newer commits. - Marks `TheiaTiny` environment tests with xfail - Skips `test_deformable_object.py` due to crash - Reverts SDP change that removed USD fallback path for Newton model creation - Adds flaky test to `test_rendering_correctness.py` shadow hand test ## Type of change <!-- As you go through the list, delete the ones that are not applicable. --> - Bug fix (non-breaking change which fixes an issue) ## Checklist - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format` - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there <!-- As you go through the checklist above, you can mark something as done by putting an x character in it For example, - [x] I have done this task - [ ] I have not done this task -->
# Description This MR is a continuation of isaac-sim#5375 without `omni.ui` as a dependency, only minimal dependencies are added and required code was pushed to the render backend that requires it. Fixes # (issue) ``` cudaErrorIllegalAddress ``` ``` ./isaaclab.sh -p -m pytest source/isaaclab/test/sensors/test_multi_tiled_camera.py -v ``` ## Type of change - Bug fix (non-breaking change which fixes an issue) ## 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 - [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 - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there <!-- As you go through the checklist above, you can mark something as done by putting an x character in it For example, - [x] I have done this task - [ ] I have not done this task --> --------- Co-authored-by: Kelly Guo <kellyg@nvidia.com> Co-authored-by: Piotr Barejko <piotrbarejko@protonmail.com>
It seems like our minimal mode has been broken. This PR fixes the problem and regenerates the golden images. 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) - New feature (non-breaking change which adds functionality) - Breaking change (existing functionality will not work without user modification) - Documentation update ## 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 - [ ] 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there <!-- As you go through the checklist above, you can mark something as done by putting an x character in it For example, - [x] I have done this task - [ ] I have not done this task -->
) # Description Fixes two regressions introduced by recent Isaac Sim `develop` builds (between 2026-04-13 and 2026-04-22) that broke the standard training entry point: ```bash ./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task=Isaac-Cartpole-v0 ``` ### 1. Isaac Sim `SimulationManager` invalidating the shared physics view A recent Isaac Sim commit (`8df6beeb0`, 6.0.0-alpha.180) decorated `SimulationManager._on_stop` / `_on_play` / `_on_stage_*` with `@staticmethod` so they finally fire from their Carb subscriptions. The newly-working `_on_stop` calls `SimulationManager.invalidate_physics()`, which invalidates the shared `omni.physics.tensors` simulation view that `PhysxManager` and every articulation `_root_view` rely on, raising: ``` [Error] [omni.physx.tensors.plugin] Simulation view object is invalidated and cannot be used again to call getDofVelocities Exception: Failed to get DOF velocities from backend ``` on the first `scene.update()` after `sim.reset()`. - `source/isaaclab_physx/isaaclab_physx/__init__.py`: `_patch_isaacsim_simulation_manager()` now (a) force-imports `isaacsim.core.simulation_manager` so the patch always runs deterministically, (b) calls `original_class.enable_all_default_callbacks(False)` to tear down the original class's Carb subscriptions, and (c) only then swaps the module attribute. `PhysxManager` becomes the single owner of the simulation view's lifecycle. ### 2. PhysX tensors API module relocation Recent Isaac Sim builds removed `omni.physics.tensors.impl` and now expose the PhysX Tensor API types directly under `omni.physics.tensors.api`. The old import raises `ModuleNotFoundError` at Isaac Lab import time, taking down every entry point that touches articulations, rigid objects, deformables, contact sensors, or ray caster sensors. - Updated all imports of the form `import omni.physics.tensors.impl.api as physx` → `import omni.physics.tensors.api as physx` across `isaaclab` (ray-caster sensors) and `isaaclab_physx` (assets and contact sensor), including `TYPE_CHECKING`-gated imports. - Updated the `PhysX Tensor API` Sphinx cross-reference URLs in the articulation data classes and the example console output in the contact sensor / IMU docs. - Added a migration note to `docs/source/migration/migrating_to_isaaclab_3-0.rst`. Fixes # (issue) ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Screenshots N/A — runtime fixes with no UI surface. ## 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there --------- Signed-off-by: Kelly Guo <kellyg@nvidia.com> Signed-off-by: Kelly Guo <kellyguo123@hotmail.com> Co-authored-by: Kelly Guo <kelly@nvidia.com>
# Description The previous image on the deformable demo does not include USD assets and surface meshes. This image now corresponds to the updated demo. ## Type of change - Documentation update ## Screenshots | Before | After | | ------ | ----- | | <img width="1920" height="1080" alt="deformables_before" src="https://github.com/user-attachments/assets/314f9648-91fa-4273-8db6-042ac09855c8" /> | <img width="1920" height="1080" alt="deformables_after" src="https://github.com/user-attachments/assets/bb419796-eea1-4afd-ae57-0bf11269fd62" /> | ## 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
# Description Migrated golden images ``source/isaaclab_tasks/test/golden_images/**/*.png`` to Git LFS 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 - Test-only change ## 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
Fixes the docker image publishing workflow; simplifies tagging on
published images; removes hardcoded Isaac Sim base image versions in
favor of `config.yaml`; removes silent failure on variable
non-existence.
```
New tagging scheme:
- Every build: $IMAGE:<full-sha> (immutable, retained for re-testing)
- Push to develop: $IMAGE:latest-develop (moves to newest develop build)
- Push to release/X: $IMAGE:latest-release-X (moves to newest build on that release branch)
- Push to main: $IMAGE:latest (moves to newest main build)
$IMAGE:v<VERSION> (from the VERSION file, e.g. v3.0.0)
```
## 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`
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
…on (isaac-sim#4945) ## Summary * Cherry-picks [Newton] Migrate more envs and mdps to warp (isaac-sim#4690) onto develop * Cherry-picks [Newton] Add capture safety guards and fix WrenchComposer stale COM pose (isaac-sim#4779) onto develop ### Changes included - Warp-first MDP terms (observations, rewards, events, terminations, actions) for manager-based envs - Tested warp env configs: Ant, Humanoid, Cartpole, locomotion velocity (A1, AnymalB/C/D, Cassie, G1, Go1/2, H1), Franka/UR10 reach - ManagerCallSwitch max_mode cap and scene capture config - MDP kernels made graph-capturable with consolidated test infrastructure - capture_unsafe safety guards on lazy-evaluated derived properties in articulation/rigid_object data - WrenchComposer fix: use fresh COM pose buffers instead of stale cached link poses ### Dropped - G1-29-DOF warp env (Isaac-Velocity-Flat-G1-Warp-v1): removed because the stable g1_29_dofs task config does not exist on develop (only on dev/newton). Warp env PRs should only add warp frontends for envs that already exist in the stable package. ## Dependencies Must be merged **after** these PRs (in order): 1. isaac-sim#4905 (merged) 2. isaac-sim#4829 ## Validated base Validated against develop at 7588fa9. ## Test plan - [x] Run warp env training sweep across all manager-based env configs (14/14 pass, mode=2, 4096 envs, 300 iters) - [ ] Run test_mdp_warp_parity.py and test_mdp_warp_parity_new_terms.py - [ ] Run test_action_warp_parity.py - [ ] Verify WrenchComposer COM pose is fresh (not stale) during graph replay --------- Co-authored-by: Antoine Richard <antoiner@nvidia.com> Co-authored-by: Kelly Guo <kellyg@nvidia.com>
) # Description This PR updates workflows and documentation for Isaac Lab Mimic to improve ease of use and code legibility. The changes include: 1. Add option for full sim buffer reset in HDF5 replay script when using single envs. Copy and move a large chunk of the main() function into a separate helper function. 2. Mark optional methods in ManagerBasedRLMimicEnv 3. Refactor Franka IK Rel envs to inherit directly from Stack Env base. Eliminate illogical inheritance from Franka direct joint pose env. 4. Change idle action in pick place envs from torch tensor to standard python list so allow for env serialization 5. Refactor Isaac Lab Mimic documentation for better clarity and flow. 6. Let uv override numpy <2 dep requirements to avoid downgrading numpy for SRL usd-to-urdf-converter ## 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 ## 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 - [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 - [x] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [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 Migrates Isaac Lab off deprecated Isaac Sim API surfaces in preparation for their removal in a future Isaac Sim release. This PR is intentionally scoped to the API migration only — installation, prebundle, and extension-exclusion fixes are tracked separately on `kellyg/fix-installation`. ## What changes **Kit experience (`apps/*.kit`):** - Stopped registering deprecated Isaac Sim extension search paths (`extsDeprecated`) in Isaac Lab Kit experiences (headless, rendering, XR variants). - Switched explicit Isaac Sim extension dependencies to their non-deprecated equivalents: - `isaacsim.core.*` → `isaacsim.core.experimental.*` - `isaacsim.robot.wheeled_robots` → `isaacsim.robot.experimental.wheeled_robots` (+ `isaacsim.robot.wheeled_robots.nodes` for OmniGraph nodes) - `isaacsim.sensors.*` → `isaacsim.sensors.experimental.*` - Removed unused Isaac Sim extensions that pulled in `isaacsim.core.api`. - Migrated `isaacsim.core.cloner` usage to the in-tree Lab cloner. **Python source migrations (across `isaaclab`, `isaaclab_physx`, `isaaclab_tasks`, `isaaclab_teleop`, `isaaclab_visualizers`, `isaaclab_mimic`):** - Migrated remaining imports off deprecated `isaacsim.core.utils.*` / prim Python paths to `isaacsim.core.experimental.*` replacements (controllers, env mdp events, sim utils/converters, terrain importer, RMP flow, etc.). - Updated Kit perspective capture helpers to use `isaacsim.core.rendering_manager`. - Updated optional-extension enablement (e.g. `enable_extension`) to use `isaacsim.core.experimental.utils.app`. - Updated XR anchor utilities to use `isaacsim.core.experimental.prims` / `isaacsim.core.experimental.utils`. - Updated mobility-gen path utilities (`isaaclab_mimic`) to import from `isaacsim.replicator.experimental.mobility_gen`. - Migrated `kit_visualizer.py` from `isaacsim.core.utils.viewports.set_camera_view` to `omni.kit.viewport.utility.camera_state.ViewportCameraState`. **`SimulationManager` decoupling:** - Migrated the PhysX scene data provider, PhysX asset micro-benchmarks, and cross-backend asset interface tests off `isaacsim.core.simulation_manager.SimulationManager`. They now import `isaaclab_physx.physics.PhysxManager` aliased as `SimulationManager`, mirroring the Newton backend's `NewtonManager as SimulationManager` convention. No new public alias is exported from `isaaclab_physx.physics`. **Test deps cleanup:** - Retired several `source/isaaclab/test/deps/isaacsim` standalone reproducers that depended on deprecated Isaac Sim core extensions (`check_camera.py`, `check_floating_base_made_fixed.py`, `check_legged_robot_clone.py`, `check_rep_texture_randomizer.py`, `check_ref_count.py`). Use `isaaclab.sim` and `isaacsim.core.experimental.*` for similar debugging workflows. **Docs:** - Updated tutorials, sensor docs, migration guide, release notes, and verification snippets to reference the non-deprecated APIs. ## Motivation Isaac Sim has marked `isaacsim.core.*`, `isaacsim.sensors.*`, and `isaacsim.robot.wheeled_robots` modules as deprecated, with `isaacsim.core.experimental.*` as the supported replacement. Without this migration, Isaac Lab will break when those modules are removed and currently emits deprecation warnings on every launch. Splitting the migration off from the installation/prebundle work keeps each PR small and reviewable. Fixes # (issue) ## Type of change - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - **Breaking change (existing functionality will not work without user modification)** — only for users that imported deprecated Isaac Sim symbols re-exported through Isaac Lab Kit experiences; user-facing Isaac Lab Python APIs are unchanged. - Documentation update ## Screenshots N/A — no UI changes. ## 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - `isaaclab` 4.6.10 → 4.6.11 - `isaaclab_physx` 0.5.20 → 0.5.21 - `isaaclab_tasks` 1.5.23 → 1.5.24 - `isaaclab_teleop` 0.3.6 → 0.3.7 - `isaaclab_mimic` 1.2.4 → 1.2.5 - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there --------- Signed-off-by: Kelly Guo <kellyg@nvidia.com> Signed-off-by: Kelly Guo <kellyguo123@hotmail.com> Co-authored-by: Kelly Guo <kelly@nvidia.com>
# Description Refines the list of CI tests that also get triggered in Isaac Sim CI. Ensures we are including tests covering rendering and physx that can be impacted by Isaac Sim and OV side changes. ## Type of change <!-- As you go through the list, delete the ones that are not applicable. --> - Bug fix (non-breaking change which fixes an issue) ## Checklist - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format` - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there <!-- As you go through the checklist above, you can mark something as done by putting an x character in it For example, - [x] I have done this task - [ ] I have not done this task -->
…eam dataclasses (isaac-sim#5365) # Description Adds `isaaclab.utils.checked_apply` for forwarding the declared fields of one dataclass onto another, raising `AttributeError` if the target is missing a declared field. The use case is Isaac Lab configclasses that mirror an upstream library's dataclass (for example, Newton's `ShapeConfig`). Bare `setattr` loops are fragile: if upstream renames or removes a field, every write becomes a silent no-op (the failure mode PR isaac-sim#5289 fixed for `ShapeConfig.contact_margin` → `margin`). With `checked_apply`, the failure surfaces at startup with a clear message instead of degrading runtime behavior. ## API ```python from isaaclab.utils import checked_apply @configclass class NewtonShapeCfg: margin: float = 0.0 gap: float = 0.01 # at apply site (one line, no per-field setattr noise) checked_apply(cfg.default_shape_cfg, builder.default_shape_cfg) ``` Internally: 1. Iterates `dataclasses.fields(src)` — single source of truth for declared fields. 2. Raises `AttributeError` if `target` lacks a declared field. 3. Rejects non-dataclass `src` with `TypeError`. ## What's included 1. `source/isaaclab/isaaclab/utils/configclass.py` — `checked_apply` function (lives next to `@configclass` since it operates on dataclasses). 2. `source/isaaclab/isaaclab/utils/__init__.pyi` — export. 3. `source/isaaclab/test/utils/test_configclass.py` — three tests (forwards all fields, raises on missing target field, rejects non-dataclass src). 4. `source/isaaclab/docs/CHANGELOG.rst` — `4.6.13` entry. 5. `source/isaaclab/config/extension.toml` — version bump. ## Dependents This PR is a dependency for the rough-terrain Newton stack: 1. PR isaac-sim#5248 — quadrupeds rough terrain, uses `checked_apply` to forward `NewtonShapeCfg` onto Newton's upstream `ShapeConfig`. Without it, `default_shape_cfg.margin` is left at Newton's upstream default of `0.0`, breaking all non-Anymal-D robots on triangle-mesh terrain. 2. PR isaac-sim#5298 — bipeds (chains on isaac-sim#5248). 3. PR isaac-sim#5312 — G1 (chains on isaac-sim#5298). ## Type of change - New feature (non-breaking). ## Checklist - [x] Tests added (3 new in `test_configclass.py`) - [x] Pre-commit checks pass - [x] CHANGELOG + extension.toml bumped - [x] No new dependencies --------- Signed-off-by: Kelly Guo <kellyg@nvidia.com> Co-authored-by: Kelly Guo <kellyg@nvidia.com>
… on Newton (isaac-sim#5248) # Description Enables Newton rough-terrain locomotion training on all locomotion velocity envs (Go1, Go2, A1, Anymal-B/C/D, H1, Cassie, Digit, G1) on top of [@ooctipus](https://github.com/ooctipus)'s Anymal-D foundation work, cherry-picked from PR isaac-sim#5225. ## Why this PR exists PR isaac-sim#5225 (Octi's draft) added Newton support for Anymal-D rough terrain. The other 9 locomotion envs were left out of scope. Octi is away and his PR has CI failures, so per maintainer guidance ([Kelly Guo's comment](isaac-sim#5225 (comment))) the required changes from isaac-sim#5225 are cherry-picked here so the rough-terrain stack can move forward without depending on his still-open WIP PR. ## Dependencies - PR isaac-sim#5365 — adds `isaaclab.utils.checked_apply`, used by `NewtonManager.create_builder` to forward `NewtonShapeCfg` onto Newton's upstream `ShapeConfig`. Required for stable rough-terrain contact. ## 1. Cherry-pick from isaac-sim#5225 (`614ea2dbb74`) Commit authored by Octi Zhang with `Co-authored-by` trailer. Subset of isaac-sim#5225 — what's kept and dropped: | # | Item | Status | Reason | |---:|---|---|---| | 1 | `anymal_d/rough_env_cfg.py` Anymal-D Newton config | **KEPT** (then hoisted into shared parent in commit 2 below) | Defines the Newton physics shape used for rough terrain | | 2 | `velocity_env_cfg.py` — hoist `physics_material`, `add_base_mass`, `base_com` startup events into shared `EventsCfg` | **KEPT** | All envs need them | | 3 | `base_com` guard `preset(default=..., newton=None)` | **KEPT** | Ablation A4 on isaac-sim#5225 (posted 2026-04-17): without the gate, 99.99% of episodes terminate from `body_lin_vel` runaway on Newton. Upstream Newton fix newton-physics/newton#2332 will let us drop the guard once it ships | | 4 | `velocity_env_cfg.py` — `collider_offsets` startup event | **DROPPED** | (a) Greptile P1 on isaac-sim#5225: PhysX-only `root_view` methods, would `AttributeError` on Newton without a guard. (b) Ablation A3: clobbers the 1cm shape margin set by `RoughPhysicsCfg` (event resets `gap = max(0, contact_offset − margin) = 0`). Removing it gives **+3.71** reward on Anymal-D Newton (+16.38 vs A0 baseline +12.47) | | 5 | `terminations.py` — `body_lin_vel_out_of_limit` / `body_ang_vel_out_of_limit` + `__init__.pyi` exports | **DROPPED** | Were a NaN guard for the Newton `body_lin_vel` runaway when `base_com` was unguarded. With the `preset(newton=None)` gate (item 3), the runaway no longer occurs and the guards are unused | | 6 | `terrain_generator.py` subdivided flat-grid border | **DROPPED** | Was a workaround for Newton triangle-collision failures on the box-primitive border. Newton has since improved triangle handling, so the workaround is no longer needed | ## 2. New work — `2a532d1f745` ### 2.1 `NewtonShapeCfg` + `checked_apply` wiring The single most important Newton setting for rough terrain is **shape margin**. Without a nonzero margin, non-Anymal-D robots fail to learn stable contact on triangle-mesh terrain. The previous `NewtonManager.create_builder` only set `gap = 0.01` and left `margin` at Newton's upstream default of `0.0`. This PR adds `NewtonShapeCfg` (the Isaac Lab wrapper) exposing `margin` and `gap`, and forwards it onto Newton's upstream `ShapeConfig` via `checked_apply` from PR isaac-sim#5365: ```python @configclass class NewtonShapeCfg: margin: float = 0.0 gap: float = 0.01 # in NewtonCfg default_shape_cfg: NewtonShapeCfg = NewtonShapeCfg() # in NewtonManager.create_builder shape_cfg = cfg.default_shape_cfg if isinstance(cfg, NewtonCfg) else NewtonShapeCfg() checked_apply(shape_cfg, builder.default_shape_cfg) ``` `RoughPhysicsCfg` opts in to `default_shape_cfg=NewtonShapeCfg(margin=0.01)`. ### 2.2 Hoist `RoughPhysicsCfg` into shared base Octi's per-env Anymal-D `RoughPhysicsCfg` (MJWarp solver + collision pipeline) is hoisted into `LocomotionVelocityRoughEnvCfg.sim` so every rough-terrain env inherits identical Newton physics. Per-env files become minimal robot-only deltas. ### 2.3 Per-env Newton-only tweak - **Go1**: leg armature preset for joint stability on lightweight quadruped. ### 2.4 Mass randomization rewrite Replace `EventsCfg.add_base_mass`'s additive `(-5, 5)` kg default with multiplicative `(1/1.25, 1.25)` log-uniform scale (`operation="scale"`, `distribution="log_uniform"`). Scale-invariant across robot sizes, geometric mean 1.0, no per-robot kg overrides needed. Per-robot ablation, Newton, 1500-iter (small quadrupeds early-aborted at iter 300): | # | Robot | new log-uniform | old additive baseline | ratio | verdict | |---:|---|---:|---:|---|---| | 1 | A1 (iter 300) | 10.00 | 3.25 | **3.08×** | pass — driven by bias removal (old `(-1, 3)` had +10% mean bias on A1's 10 kg base) | | 2 | Go1 (iter 300) | 22.29 | 16.30 | 1.37× | pass | | 3 | Anymal-B (iter 300) | 12.47 | 10.92 | 1.14× | pass | | 4 | Anymal-C (iter 300) | 14.64 | 12.31 | 1.19× | pass | | 5 | Go2 @ 1499 | 24.71 | 18.58 | 1.33× | pass | | 6 | Anymal-D @ 1499 | 16.09 | 15.62 | 1.03× | pass | | 7 | H1 @ 1499 (biped) | 24.02 | 23.58 | 1.02× | pass | | 8 | Cassie @ 1499 sym25 | 14.15 | 23.93 (mass rand off) | 0.59× | **regression — fixed in dependent PR isaac-sim#5298 with `(1.0, 1.25)` heavier-only override** | Cassie sensitivity is closed-loop Achilles + hip PD response: lighter-than-nominal pelvis destabilizes; heavier-only `(1.0, 1.25)` recovers 90% of the reward and pushes ep_len higher (932 vs 910 baseline). Sub-ablation table is in isaac-sim#5298. Raw logs, checkpoints, and config snapshots preserved at `~/workspaces/data/2026-04-21_mass-rand-scale/` (per-robot `<robot>_newton_1500.log`, `key.md`, `status.md`, `run.sh` reproducer). ## Versions - `isaaclab_newton` 0.5.21 → 0.5.22 - `isaaclab_tasks` 1.5.24 → 1.5.25 ## Type of change - New feature (non-breaking). ## Checklist - [x] Pre-commit checks pass - [x] CHANGELOG + extension.toml bumped on both `isaaclab_newton` and `isaaclab_tasks` - [x] Co-author credit for [@ooctipus](https://github.com/ooctipus) on the cherry-pick commit - [x] Ablation evidence cited in commit messages --------- Signed-off-by: Kelly Guo <kellyg@nvidia.com> Co-authored-by: Octi Zhang <zhengyuz@nvidia.com> Co-authored-by: Kelly Guo <kellyg@nvidia.com>
# Description Post-merge CI on develop has been failing on arm64. The chain is: isaaclab_teleop pulls isaacteleop[retargeters], which transitively pins nlopt==2.6.2, and nlopt 2.6.2 has no aarch64 wheel. Fix: add swig to apt deps and pre-install nlopt 2.6.2 with --no-build-isolation on arm64 before isaaclab.sh --install runs. The later install sees nlopt as already satisfied. Same change applied to Dockerfile.base and Dockerfile.curobo. Verified locally in a QEMU arm64 python:3.12-slim container running the same install path. ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Checklist - [x] I have read and understood the contribution guidelines - [x] I have run the pre-commit checks 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 - [ ] I have updated the changelog and the corresponding version in the extension's config/extension.toml file - [x] I have added my name to the CONTRIBUTORS.md or my name already exists there
# Description Follows the TorchArray concept from MJLab and augment it with some lab requirements. ## Type of change - New feature (non-breaking change which adds functionality) ## Checklist - [ ] 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
# Description Follow-up to isaac-sim#5408. After that merged, the arm64 build still fails on the nlopt step with BackendUnavailable: Cannot import 'setuptools.build_meta'. With --no-build-isolation, pip uses the host Python to resolve the PEP 517 build backend, and IsaacSim's bundled arm64 Python does not expose setuptools.build_meta in that scope. Fix: pre-install setuptools, wheel, and numpy in IsaacSim's Python before the nlopt install step. Same change applied to Dockerfile.base and Dockerfile.curobo. Verified locally in a QEMU arm64 python:3.12-slim container: reproduced the BackendUnavailable error after pip uninstall setuptools wheel, then confirmed the install succeeds when those packages are pre-installed. ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Checklist - [x] I have read and understood the contribution guidelines - [x] I have run the pre-commit checks 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 - [ ] I have updated the changelog and the corresponding version in the extension's config/extension.toml file - [x] I have added my name to the CONTRIBUTORS.md or my name already exists there
# Description Runtime check to turn on reading transforms from GPU. 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) - New feature (non-breaking change which adds functionality) - Breaking change (existing functionality will not work without user modification) - Documentation update ## 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 - [ ] 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there <!-- As you go through the checklist above, you can mark something as done by putting an x character in it For example, - [x] I have done this task - [ ] I have not done this task -->
# Description Adds per-build immutable tags to the Docker images published by [.github/workflows/publish-images.yaml](.github/workflows/publish-images.yaml), and drops the bare commit-SHA tag (now redundant). New tags published: - `develop` builds: `$IMAGE:latest-develop-<run#>-<sha-stub>` (in addition to the existing `$IMAGE:latest-develop`) - `release/X` builds: `$IMAGE:latest-release-X-<run#>-<sha-stub>` (in addition to the existing `$IMAGE:latest-release-X`) Removed: `$IMAGE:<full-sha>`. The new run-number + short-SHA tags provide the same per-build immutability with a more readable tag name. `main` tagging (`$IMAGE:latest`, `$IMAGE:v<VERSION>`) is unchanged aside from the dropped SHA tag. The tagging-scheme comment in the workflow was updated to match. Fixes # (issue) ## Type of change - New feature (non-breaking change which adds functionality) ## Checklist - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format` - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
# Description Adds initial support for the Kamino solver. Cartpole is training. ## Type of change - New feature (non-breaking change which adds functionality) ## 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…y PR (isaac-sim#5430) # Description - Run every test job on every PR: Removed the `detect-changes` job and the per-package `if:` gating in `.github/workflows/build.yaml`. - Fix missing `articulation_ids` on Newton mock views: Added `articulation_ids` as a lazy `wp.array2d(dtype=int)` on both mock views, matching the contract `(world_count, count_per_world)` consumed by `_or_reset_masks_from_mask` / `_scatter_reset_masks_from_ids`. ## 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` - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
…-sim#5377) This pull request is a continuation of isaac-sim#5162. This changes references from TiledCamera to Camera in downstream configs. 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. ## 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [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 --> Co-authored-by: Antoine RICHARD <antoiner@nvidia.com>
…m#5587) ## Summary Adds typed preset selection via Hydra-style tokens — `physics=NAME` / `renderer=NAME` / `presets=NAME[,...]` — that fold into the existing `presets=<csv>` Hydra-decorator flow. Makes `--task=X --help` list the actual `PresetCfg` variants present in that task's env_cfg, bucketed by typed target. Adopted in all 16 Hydra-using scripts (`rl_games/sb3/skrl/rsl_rl` train+play, `environments/*`, `benchmarks/*`, `sim2sim_transfer`, `leapp/rsl_rl/export`). ## API shape ```python parser = argparse.ArgumentParser(...) # ... script-specific args ... add_launcher_args(parser) args_cli, hydra_args = setup_preset_cli(parser) sys.argv = [sys.argv[0]] + hydra_args ``` `setup_preset_cli` returns `(args, hydra_argv)` without mutating `sys.argv`. It registers no argparse flags for preset selection — the typed selectors are recognized as Hydra-style tokens in the `parse_known_args` remainder and folded into `hydra_argv[0]` as a single `presets=<csv>` token. ## Grammar ``` python train.py --task=X physics=newton_mjwarp renderer=newton_renderer presets=albedo,depth ``` - `physics=NAME` — typed selector for `PhysicsCfg` variants - `renderer=NAME` — typed selector for `RendererCfg` variants - `presets=NAME[,NAME,...]` — broadcast: applied to every matching `PresetCfg` All three fold into one `presets=<csv>` token: `presets=newton_mjwarp,newton_renderer,albedo,depth`. The grammar matches Hydra's, so the same line can carry path-targeted overrides (`env.sim.dt=0.001`) that flow through untouched. ## Namespace contract No preset selector is registered with argparse, so the parsed `args` namespace gains no `physics` / `renderer` / `presets` attribute. AppLauncher's name-based forwarding (`set(_SIM_APP_CFG_TYPES) & set(vars(args))`, `app_launcher.py:681`) therefore cannot pick up a preset value and push it into `SimulationApp.config` — the historical `--renderer` → `config["renderer"]` → `None.lower()` crash class is structurally impossible. Two regression tests lock the contract. ## Help text layout `--task=Isaac-Cartpole-v0 --help` renders each selector with its available variants inline directly below it (bullets aligned with the description column): ``` preset selection: Select named PresetCfg alternatives via Hydra-style overrides (key=value, no leading dashes): physics=NAME (typed) selects a PhysicsCfg variant. Available: - newton_kamino - newton_mjwarp - physx renderer=NAME (typed) selects a RendererCfg variant. Available: (none) presets=NAME[,NAME,...] broadcast: applied to every matching PresetCfg. Available: (none) Hydra also accepts path-targeted overrides like env.sim.physics=NAME. ``` Typed variants appear only under their own typed selector. The `presets=` listing shows only DOMAIN-bucket variants (cfgs whose type doesn't subclass any typed target's base class). Without `--task`, each row shows just the selector + description and the section adds a `Pass --task=X` hint on its own paragraph. ## Test plan - [x] `pytest source/isaaclab_tasks/test/test_preset_cli.py` — 24 tests pass. Coverage: enum wiring, token folding/dedupe/passthrough, `_ArgvHelper` semantics, type-based bucketing, all four help-text branches (parametrized), no-`sys.argv`-mutation contract, namespace-clean contract, AppLauncher intersection contract, `hydra_args[0]` preserves the `presets=` token for benchmark telemetry. - [x] `pytest source/isaaclab_tasks/test/test_hydra.py` — 76 tests pass; legacy-alias `FutureWarning` behavior unchanged. - [x] `pre-commit` clean. - [x] Manual: `--task=Isaac-Cartpole-v0 --help` and `--task=Isaac-Cartpole-RGB-Camera-Direct-v0 --help` render correctly. - [x] Manual: `physics=newton_mjwarp renderer=newton_renderer presets=albedo` folds into one `presets=<csv>` token at `hydra_argv[0]`. - [x] Manual: unknown name → grouped error from resolver; legacy alias `newton` → `FutureWarning` and resolves to `newton_mjwarp`. --------- Co-authored-by: ooctipus <zhengyuz@nvidia.com> Co-authored-by: Kelly Guo <kellyg@nvidia.com>
## Summary Bumps the Newton pin from `v1.2.0rc2` (current develop) directly to the [`v1.2.0` stable release](https://github.com/newton-physics/newton/releases/tag/v1.2.0) across all five pin sites, keeping the canonical `newton[sim] @ git+...` form everywhere. Per Kelly Guo's suggestion: skip the rc bump and go straight to stable. Upstream published `v1.2.0` on 2026-05-12. **Alternative**: [isaac-sim#5614](isaac-sim#5614) (rc3 bump) — pick whichever target based on CI signal. This one is the most forward target. > Branch is still named `jichuanh/newton-1.2.0rc4-bump` from when this PR was originally proposing rc4 — the branch name doesn't match the current target but the diff is correct. Force-pushing the rename would close/reopen the PR, which adds noise without changing the artifact. ## What's new in Newton v1.2.0 vs v1.2.0rc2 Full release notes: [newton-physics/newton release v1.2.0](https://github.com/newton-physics/newton/releases/tag/v1.2.0). Notable IsaacLab-relevant fixes: - [newton-physics/newton#2651](newton-physics/newton#2651) — MPR/GJK no longer assumes convex hulls are centered around the origin. - [newton-physics/newton#2703](newton-physics/newton#2703) — Kamino FK solver performance. - [newton-physics/newton#2721](newton-physics/newton#2721) — HDR color output for tiled camera sensors. - [newton-physics/newton#2743](newton-physics/newton#2743) — Collada textures in URDF import. - [newton-physics/newton#2823](newton-physics/newton#2823) — Gravity-data device allocation in Kamino (multi-GPU). - [newton-physics/newton#2632](newton-physics/newton#2632) — CollisionPipeline small fixes. - [newton-physics/newton#2734](newton-physics/newton#2734) — `DelassusOperator` attribute refactor. Not used in IsaacLab source today (verified by grep), no adapt needed. - SolverMuJoCo fixes: planar meshes, contact-anchor computation, distance conversion. ## Required dep bumps None on the IsaacLab side. The `mjwarp 3.8.0.1 → 3.8.0.3` bump flows in transitively through `newton[sim]`, since [isaac-sim#5566](isaac-sim#5566) dropped IsaacLab's explicit `mujoco` / `mujoco-warp` pins. `warp-lang` stays at `1.13.0` (set by [isaac-sim#5523](isaac-sim#5523)). ## Pins updated | File | Change | |---|---| | `source/isaaclab_newton/setup.py` | `v1.2.0rc2` → `v1.2.0` | | `source/isaaclab_physx/setup.py` | `v1.2.0rc2` → `v1.2.0` | | `source/isaaclab_visualizers/setup.py` | 3× `v1.2.0rc2` → `v1.2.0` | | `tools/wheel_builder/res/python_packages.toml` | `v1.2.0rc2` → `v1.2.0` | ## Test plan - [x] Pre-commit clean. - [ ] CI smoke verifies clean install picks up `newton 1.2.0` and downstream `mjwarp 3.8.0.3`.
…isaac-sim#5596) # Make locomanipulation SDG GR00T flow runnable without flash-attn ## Summary Two small fixes that let users finetune and roll out the locomanipulation SDG GR00T policy on hardware where `flash-attn` is unavailable (e.g. Blackwell, or any environment where the wheel fails to build). ## Changes - **`scripts/imitation_learning/locomanipulation_sdg/gr00t/no_flash_attn.patch`** (new): patch against the Isaac-GR00T repo that switches the bundled Eagle 2.5 VL model from `flash_attention_2` to PyTorch SDPA, and guards the RADIO vision module's `flash_attn` imports so the package becomes importable without flash-attn installed. SigLIP path works; RADIO path is unsupported without flash-attn (documented in the patch). - **`docs/source/overview/imitation-learning/humanoids_imitation.rst`**: adds a note in the GR00T install section explaining when to apply the patch (build failure, or `RuntimeError: FlashAttention only supports Ampere GPUs or newer`) and how to apply it from the sibling Isaac-GR00T checkout. - **`scripts/imitation_learning/locomanipulation_sdg/gr00t/rollout_policy.py`**: override `env_cfg.recorders` with `ActionStateRecorderManagerCfg()` so the rollout doesn't try to record `env._locomanipulation_sdg_output_data`, which is only populated by the data-generation state machine in `generate_data.py` and is absent during policy rollout. Without this, the recorder raises `AttributeError` on the first pre-step. <!-- 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) ## 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 - [ ] 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there <!-- As you go through the checklist above, you can mark something as done by putting an x character in it For example, - [x] I have done this task - [ ] I have not done this task --> --------- Co-authored-by: Kelly Guo <kellyg@nvidia.com>
# Description Background: The _cubric.py ctypes shim was pinned to IAdapter v0.1 vtable offsets, but newer Kit builds ship v0.2 — compute calls were silently landing on unbind, disabling cubric's GPU transform hierarchy propagation. carb accepts the version mismatch with only a stderr warning. Originally, this change updated offsets to the v0.2 layout, requested v0.2 from the framework, and added a runtime InterfaceDesc check that refused to acquire on any unexpected version. The kit team is fixing the ABI-breaking semver contract violation upstream, so it won't actually make it into a release. So the pinned version in Isaac Lab remains on v0.1 but keeps the validation code as a safety net. This problem will go away once we have official python bindings for cubric in a future kit release. If usdrt eventually exposes the required `eRigidBody` options via the `IFabricHierarchy` API then that would massively simplify the implementation of newton manager. Will pursue a feature request. ## 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` - [ ] I have made corresponding changes to the documentation *(N/A)* - [ ] My changes generate no new warnings *(New warnings on ABI mismatch are intentional)* - [ ] I have added tests that prove my fix is effective or that my feature works *(N/A - spoofing kit versions for unit test would be non-trivial; verified manually)* - [x] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there --------- Co-authored-by: Kelly Guo <kellyg@nvidia.com>
## Summary * Fixed an invalid inline `::` comment in the Windows batch code block on the kit-less installation page. In Windows batch, `::` only works as a comment at the start of a line — when placed inline after a command, the tokens are passed as arguments, causing a runtime error. Moved the shorthand hint (`or: isaaclab.bat -i`) to its own comment line. ## Test plan - [ ] Verify the rendered docs page shows the corrected batch snippet. - [ ] Confirm the `isaaclab.bat --install` command runs without unexpected extra arguments on Windows. Co-authored-by: Kelly Guo <kellyg@nvidia.com>
# Description <!-- 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. --> This PR adds a deterministic training path and documentation for Isaac Lab RL workflows. - Added apps/isaaclab.python.headless.determinism.kit as a deterministic headless rendering experience. - Updated scripts/reinforcement_learning/rl_games/train.py to add opt-in --deterministic and use configure_seed(env_cfg.seed, args_cli.deterministic). - Updated docs/source/features/reproducibility.rst to document --experience isaaclab.python.headless.determinism.kit and clarify that strict PyTorch determinism is currently exposed only for RL-Games. Test command example: ./isaaclab.sh -p scripts/reinforcement_learning/rl_games/train.py --task Isaac-Cartpole-RGB-v0 --enable_cameras --headless --seed 42 --max_iteration 20 **--deterministic --experience isaaclab.python.headless.determinism.kit** 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. --> isaac-sim#3505 Non-reproducible training results in vision-based tasks with identical seeds ## 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) ## Screenshots | Before | After | | ------ | ----- | | <img width="200" height="250" alt="Before" src="https://github.com/user-attachments/assets/57b52d82-ed32-4f79-8ac2-db19b32df54a" /> | <img width="200" height="250" alt="After" src="https://github.com/user-attachments/assets/5da0b220-7fef-445a-8efb-f0e1c6dab6a3" /> | <!-- 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 - [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 - [ ] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [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 --> --------- Co-authored-by: r-schmitt <139814266+r-schmitt@users.noreply.github.com> Co-authored-by: nvsekkin <72572910+nvsekkin@users.noreply.github.com> Co-authored-by: vidurv-nvidia <vidurv@nvidia.com> Co-authored-by: ooctipus <zhengyuz@nvidia.com> Co-authored-by: Yuchen Deng <yuchenkit@gmail.com> Co-authored-by: Kelly Guo <kellyg@nvidia.com> Co-authored-by: isaaclab-bot[bot] <282401363+isaaclab-bot[bot]@users.noreply.github.com> Co-authored-by: hujc <jichuanh@nvidia.com> Co-authored-by: Antoine RICHARD <antoiner@nvidia.com>
## Description Fixes `OVRTXRenderer` crash on multi-GPU systems when `sim.device` is not `cuda:0`. **Root cause:** A hardcoded `DEVICE = "cuda:0"` constant in `ovrtx_renderer_kernels.py` was imported and used for all Warp kernel launches and buffer allocations. Additionally, `AttributeBinding.map()` calls used `device_id=0`, pinning attribute mapping to GPU 0 regardless of the simulation device. **Fix:** - Remove the `DEVICE` constant and use `self._device` (set from `CameraRenderSpec.device`) for all Warp operations (11 locations) - Add `_device_id` property to extract the CUDA device index from the device string - Pass `device_id=self._device_id` to `AttributeBinding.map()` calls (2 locations: object binding and camera binding) **Note on `RenderVarOutput.map()` calls:** These remain unchanged (`device=Device.CUDA` only) because the OVRTX C API for render output mapping (`ovrtx_map_output_description_t`) does not accept a `device_id` parameter — the output is inherently mapped on whichever GPU OVRTX rendered on. **Total:** 13 hardcoded GPU-0 references fixed (11 Warp + 2 AttributeBinding). This is the same bug class fixed for `NewtonRenderer` in isaac-sim#5019 — OVRTX was not updated at that time. ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Checklist - [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 updated the changelog and added my name to the [`CONTRIBUTORS.md`](https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md) or my organization to the [`CONTRIBUTORS.md`](https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md) list --------- Co-authored-by: Kelly Guo <kellyg@nvidia.com>
# Description * Added :func:`~isaaclab.cloner.cloner_utils.is_homogeneous` to detect whether a :class:`~isaaclab.cloner.ClonePlan` assigns every environment from every source (a homogeneous clone mask). * Fixed cloned environments disappearing from tiled camera output if :attr:`~isaaclab_ov.renderers.OVRTXRendererCfg.use_ovrtx_cloning` is set to ``True``, by correcting scene-partition attribute creation on env roots and cameras. * Renamed the ``use_cloning`` field on :class:`~isaaclab_ov.renderers.OVRTXRendererCfg` to ``use_ovrtx_cloning``. Changed its default value to ``True``. This will bring notable speedup for the total startup time (Launch to Train), esp. for large-scale env setups. On Isaac-Dexsuite-Kuka-Allegro-Lift-v0 with 1024 env clones, the total startup time dropped from ~78s to ~43s. Note that if ``use_ovrtx_cloning`` is enabled but the env setup is heterogeneous, the OVRTX renderer will disable the internal cloning path and logs a warning, exporting the full multi-environment stage instead (same effect as setting ``use_ovrtx_cloning`` to ``False`` for that run). ## Type of change - Bug fix (non-breaking change which fixes an issue) ## 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 - [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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [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 --> --------- Co-authored-by: Kelly Guo <kellyg@nvidia.com>
…_ik (isaac-sim#5644) ## Summary One-character fix in `source/isaaclab/test/controllers/test_pink_ik.py:309`: ```diff - quat_from_matrix(matrix_from_quat(target_rot_tensor) * matrix_from_quat(quat_inv(current_rot))) + quat_from_matrix(matrix_from_quat(target_rot_tensor) @ matrix_from_quat(quat_inv(current_rot))) ``` `calculate_rotation_error` was composing two rotation matrices with PyTorch's element-wise multiplication (`*`) where matrix multiplication (`@`) was intended. The Hadamard product of two rotation matrices is not generally a rotation matrix. ## Why this surfaced as test failures now The bug has been latent since [isaac-sim#3149](isaac-sim#3149) (2025-08-26) because the Hadamard product of two near-identity matrices is also near-identity — `quat_from_matrix` could still recover a near-unit quaternion and the assertion `rot_error ≈ 0` would pass for completely wrong mathematical reasons. It became visible when [isaac-sim#5609 (jmart)](isaac-sim#5609) (2026-05-14) added the unit-norm guard to `isaaclab/utils/math.py:quat_from_matrix`: ```python invalid = (quat.norm(p=2, dim=-1, keepdim=True) - 1.0).abs() > 2e-5 return torch.where(invalid, torch.full_like(quat, float("nan")), quat) ``` After that PR, any non-rotation input (the Hadamard mess) returns NaN, which `axis_angle_from_quat` propagates → `torch.max(NaN) = NaN` → `AssertionError: Left hand IK rotation error (nan) exceeds tolerance`. Both hands always went to NaN; left hand is just asserted first. ## Verification Local repro on the Horde VM against current `develop` (`isaaclab_physx` backend, `newton[sim]@v1.2.0rc2`): | Configuration | Result | |---|---| | Unfixed, `Isaac-PickPlace-GR1T2-Abs-v0-horizontal_movement` | FAILED — `Left hand IK rotation error (nan)` | | Fixed, same parameterization | PASSED — rotation errors `1e-4` to `1e-7` (well within 0.02 rad tolerance) | | Fixed, all 12 GR1T2 cases, run 1 | 11 passed, 1 skipped | | Fixed, all 12 GR1T2 cases, run 2 | 11 passed, 1 skipped (deterministic) | ## Scope This addresses the consistent `Left hand IK rotation error (nan)` failures seen across recent develop PRs (e.g. [isaac-sim#5633 `test-curobo` log](https://github.com/isaac-sim/IsaacLab/actions/runs/25926139790/job/76211194676), [isaac-sim#5609 `test-curobo` log](https://github.com/isaac-sim/IsaacLab/actions/runs/25831490295/job/75897258188), [isaac-sim#5616 `test-curobo` log](https://github.com/isaac-sim/IsaacLab/actions/runs/25930392313/job/76222556444)). Remaining failures on G1 envs (finite ~0.03-0.05 rad rotation errors against the 0.030 rad tolerance) are a **separate** issue — IK convergence quality rather than the NaN math bug. Out of scope for this PR; needs its own ticket. ## Test plan - [x] Pre-commit clean. - [x] Unfixed branch reproduces NaN on `Isaac-PickPlace-GR1T2-Abs-v0-horizontal_movement` locally. - [x] Fixed branch passes the same parameterization locally with finite rotation errors. - [x] Fixed branch passes all 12 GR1T2 parameterizations across two consecutive runs (deterministic).
…im#5643) # Description Expands the **Optimize XR Performance** section of the Isaac Teleop feature guide with the most common levers users reach for when XR teleop cannot sustain the headset's display rate -- particularly on lower-spec GPUs or in heavy scenes. What changed: - **RTX - Minimal renderer**: new dropdown explaining when to use it, how to enable it from the viewport renderer dropdown, the recommended **Render Settings** (**Minimal Shading Mode = Diffuse/Glossy/Emission**), and the current `DistantLight`-only lighting limitation, with a snippet showing how to swap a `DomeLight` for a `DistantLight`. - **XR Resolution Multiplier slider**: new dropdown describing the **XR -> Advanced Settings -> Render Resolution** slider for trading image sharpness for GPU headroom (`0.8` as a sensible starting point). - **Physics / render time step**: refreshed to focus on Quest 3 / Pico 4 Ultra (90 Hz), explain what `sim.render_interval` actually controls, and call out the `sim.dt` stability/performance trade-off. - Removed the **Try running physics on CPU** dropdown -- this is already the default for these workflows. Fixes # (issue) ## Type of change - Documentation update ## 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
# Description Makes the Isaac Lab base, ROS 2, and cuRobo Docker images run as a non-root runtime user by creating an `isaaclab` user after root-only setup and switching the final images to `USER isaaclab`. The ROS 2 Dockerfile temporarily switches back to `USER root` for apt-based ROS setup, then restores `USER isaaclab` for runtime. The `installci` Dockerfile is intentionally unchanged. This also updates deprecated Isaac Sim Dockerfile comments to point to the NGC Isaac Sim container page, removes the default root-allowance compose setting, updates Docker documentation, and adds CI coverage to verify the built base and cuRobo images do not run as root by default. ROS 2 is covered by the static Dockerfile regression test because this workflow does not build a ROS 2 image. Fixes: N/A Validation: - `./isaaclab.sh -f` - `git diff --check` - `docker run ... /isaac-sim/python.sh -m pytest docker/test/test_dockerfile_nonroot.py -q` -> `7 passed, 1 skipped` - Manual cuRobo runtime check confirmed non-root `uid=1000` ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Screenshots N/A ## 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 (not applicable; no `source/<pkg>/` package touched) - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there --------- Signed-off-by: sheikh-nv <7774242+sheikh-nv@users.noreply.github.com> Co-authored-by: Kelly Guo <kellyg@nvidia.com>
# Description This enables frame stacking for newton+warp by default in the cartpole camera presets task. **Newton Frame Stacking:** _Provides explicit temporal data to newton._ RTX uses DLSS anti-aliasing by default, which provides implicit temporal data. The newton_renderer does not provide temporal data. However, newton's energy-conserving physics solver requires temporal velocity data in order to compensate for the lack of damping, which causes convergence problems when paired with newton_renderer. This commit provides explicit temporal information via 2-frame stacking by default for cartpole-camera when using newton+newton_renderer. This allows newton to provide the damping it needs to converge at the same rate as physx. This adds 36% GPU memory overhead, but the wall clock overhead is negligible. The default for all other physics/renderer backends is still stack size = 1 (disabled) since physx has implicit damping built-in via its TGS solver, and RTX provides temporal data implicitly. **Implementation:** For manager-based envs, a new `stacked_image` term is added to the MDP observations - tasks can opt into frame stacking by adding the `stacked_image` term to their observation cfg and setting `frame_stack` to a value > 1. The cartpole camera presets direct env now implements frame stacking using `CircularBuffer` from `isaaclab.utils.buffers` directly in `_get_observations`. Added new unit tests for the MDP term (mocked + `ObservationManager` E2E) and cartpole integration, and updated the documentation with a note about newton's dependency on temporal data. _Note: This is a task-local re-implementation of the closed [PR isaac-sim#5232](isaac-sim#5232 ## 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] 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there --------- Co-authored-by: Kelly Guo <kellyg@nvidia.com>
# Description Migrates `Camera`, `CameraData`, and all renderer backends to warp-backed `ProxyArray`, consistent with the rest of IsaacLab's sensors (ContactSensor, RayCaster, IMU, etc.). `CameraData` fields (`pos_w`, `quat_w_world`, `intrinsic_matrices`, `output`) now return `ProxyArray` instead of `torch.Tensor`. Use `.torch` for a zero-copy tensor view or pass directly to warp kernels. `RenderBufferSpec.dtype` is now a warp dtype (e.g. `wp.float32`). The `ProxyArray` deprecation bridge means existing torch usage continues to work with a one-time `DeprecationWarning`. ## Type of change - Possible breaking change (existing functionality will not work without user modification) ## 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ x I have added my name to the `CONTRIBUTORS.md` or my name already exists there --------- Co-authored-by: Kelly Guo <kellyg@nvidia.com>
Bumped packages: - isaaclab: 5.2.1 → 5.3.0 - isaaclab_newton: 0.9.1 → 0.10.0 - isaaclab_ov: 0.1.9 → 0.2.0 - isaaclab_physx: 0.7.1 → 0.8.0 - isaaclab_tasks: 1.6.0 → 1.7.0 - isaaclab_teleop: 0.3.11 → 0.4.0
…saac-sim#5459) # Description Drastic rewrite of OVPhysX `Articulation` and `ArticulationData` so they follow the same shape as the post-refactor OVPhysX `RigidObject` from isaac-sim#5426, with the API surface mirroring `Newton Articulation` and behavior parity with `PhysX Articulation`. Single-PR atomic rewrite, clean break (no deprecation aliases for OVPhysX-introduced renames; framework-inherited deprecated shims kept). The OVPhysX articulation diverged significantly from the rest of the framework conventions. This PR brings it back in line: same docstring template, same section ordering, same naming, same internal patterns, same lifecycle. > [!IMPORTANT] > **Stacked on isaac-sim#5426** (`[OVPHYSX] RigidObject + RigidObjectData asset`). Review only the 16 articulation-specific commits at the tip of this branch — every commit before that lands via isaac-sim#5426. Once isaac-sim#5426 merges to `develop`, this PR will rebase cleanly onto `develop`. Fixes # (none — internal refactor; no associated issue) ## Architectural changes **OVPhysX RigidObject is the design template.** It has navigated the hybrid OVPhysX surface — Newton-style mask+index dual API + PhysX-style CPU-only bindings via pinned-host staging à la isaac-sim#5329 + pull-to-refresh `binding.read(target)`: - Eager `TimestampedBufferWarp` allocation in `_create_buffers` (single source of truth — no `_invalidate_caches` / `_ensure_*_buffers` machinery). - Pinned-host CPU staging buffers for every CPU-only binding (mass, COM, inertia, all DOF properties). - `_binding_read` / `_binding_write` / `_stage_to_pinned_cpu` helpers route CPU-only types through pinned-host memory. - Every public property returns a `ProxyArray` (warp + torch dual view); raw `wp.array` for one-shot config buffers. - Counts and names (`num_instances`, `num_bodies`, `num_joints`, `body_names`, `joint_names`, ...) demoted from `@property` to plain instance attributes. - Dual mask+index API on every writer/setter (`*_index` accepts partial data; `*_mask` accepts full data with a `wp.bool` mask). - All `write_*` / `set_*` parameters are kwarg-only after `*,`. No positional. **No `full_data` flag anywhere.** - The deprecated `_write_body_state` plumbing layer is removed; deprecated state-writer shims (`write_root_state_to_sim`, etc.) call the public `write_*_to_sim_index` methods directly, mirroring RigidObject. **Articulation-specific surface** mirrors Newton 1-to-1: joint-state writers, joint-property writers (CPU-only), body-property setters (multi-body shape), joint-command target setters, external-wrench setters via `WrenchComposer`, fixed/spatial tendon setters, deprecated state-writer shims, full actuator pipeline (`compute`, `_apply_actuator_model`, `_process_actuators_cfg`). ## Files changed - `source/isaaclab_ovphysx/isaaclab_ovphysx/assets/articulation/articulation.py` — full rewrite (~3863 lines, matches Newton). - `source/isaaclab_ovphysx/isaaclab_ovphysx/assets/articulation/articulation_data.py` — full rewrite (~2504 lines). - `source/isaaclab_ovphysx/isaaclab_ovphysx/assets/kernels.py` — gained 6 articulation kernels migrated from the stop-gap `kernels_old.py` (now deleted): `_compose_root_com_pose`, `_compute_heading`, `_copy_first_body`, `_projected_gravity`, `_world_vel_to_body_ang`, `_world_vel_to_body_lin`. Plus 2 new joint-property kernels (`write_joint_position_limit_to_buffer_index/mask` for trailing-dim-2 limits, `write_joint_friction_to_buffer_index/mask` for the broadcast-coefficient pattern). - `source/isaaclab_ovphysx/isaaclab_ovphysx/assets/kernels_old.py` — deleted. - `source/isaaclab_ovphysx/test/assets/test_articulation.py` — verbatim PhysX test mirror (~210 parametrizations) with PhysX-internal `root_view.X` assertions adapted to the OVPhysX bindings dict and `omni.physx.scripts`-dependent tests xfailed; mirrors the precedent from the RigidObject test mirror in isaac-sim#5426. ## Type of change - Breaking change (existing functionality will not work without user modification — OVPhysX is at `0.2.x`, clean break is acceptable per semver-on-0.x; no deprecation aliases for OVPhysX-introduced renames). - Code modernization / refactor. ## Validation Three layers, run on **GPU and CPU separately** (the wheel's process-global device-mode lock makes a single invocation lock to one device): 1. **Real-backend port** — `test_articulation.py` (verbatim PhysX mirror). `./scripts/run_ovphysx.sh -m pytest <path> -k 'cuda:0'` and `... -k 'cpu'`. Expected end state: each pass shows `<X> passed, <Y> xfailed, 0 failed`. Every xfail carries a `reason` pointing at the wheel-gaps spec. 2. **Cross-backend interface** — `source/isaaclab/test/assets/test_articulation_iface.py` will gain an `ovphysx` backend, mirroring the rigid-object iface treatment from isaac-sim#5426. 3. **API consistency audit** — per-method side-by-side checklist comparing Newton, RigidObject (post-refactor), and the rewritten Articulation; verifies method name, kwarg-only signature, parameter order, return type, docstring template, section-header placement. ## Status Active triage — not yet ready for review. - ✅ Implementation complete (all writers, setters, properties, lifecycle, actuator pipeline). - ✅ Initial GPU root-cause bug fixed: `_read_transform_binding` now routes `BODY_COM_POSE` through `_binding_read` so the wheel's CPU-only-binding device check is satisfied on a GPU sim. - ✅ Verbatim PhysX-internals assertions (`root_view.max_dofs == shared_metatype.dof_count`, `link_paths[0]` round-trip) adapted to the OVPhysX bindings dict — they now check `binding.shape[1] == num_joints / num_bodies` for each per-DOF / per-link binding. - 🔄 In-flight: tendon-init device-routing bug. `_read_initial_properties` reads `FIXED_TENDON_*` / `SPATIAL_TENDON_*` via numpy assuming CPU residency, but the wheel exposes them as GPU-resident (consistent with PhysX's `set_fixed_tendon_properties` not cloning to CPU). Plan is to remove tendon types from `_CPU_ONLY_TYPES` and read them directly into the sim-device buffer. - ⏳ Pending: cross-backend `test_articulation_iface.py` extension, API consistency audit, CHANGELOG + version bump (`0.2.x → 0.3.0`). ## 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 - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works (the verbatim PhysX test mirror is the contract; bug-fixing in progress) - [ ] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file (deferred to final-pass commit) - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there --------- Signed-off-by: Kelly Guo <kellyg@nvidia.com> Co-authored-by: Kelly Guo <kellyg@nvidia.com>
…saac-sim#5647) # Description <!-- 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. --> 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) - New feature (non-breaking change which adds functionality) - Breaking change (existing functionality will not work without user modification) - Documentation update ## 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 - [ ] 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there <!-- As you go through the checklist above, you can mark something as done by putting an x character in it For example, - [x] I have done this task - [ ] I have not done this task --> --------- Co-authored-by: ooctipus <zhengyuz@nvidia.com> Co-authored-by: Mustafa H <34825877+StafaH@users.noreply.github.com>
…#5631) # Description Avoid disk I/O when preparing USD stage for OVRTX renderer ## 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] 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 updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
# Description Refactors `RayCaster` and `RayCasterCamera` into a backend-agnostic base + per-backend implementations under `isaaclab_physx.sensors.ray_caster` and `isaaclab_newton.sensors.ray_caster`, mirroring the iconic split pattern already used by `Pva`, `FrameTransformer`, and `ContactSensor`. The PhysX backend tracks the parent rigid body directly via `RigidObjectView` instead of going through `FabricFrameView`, which fixes the staleness regression from isaac-sim#5179: sensors parented under an articulation / rigid body were returning their spawn-time pose forever during headless training, silently freezing height-scan observations in rough-terrain locomotion (and any similar IMU / camera path that read through `FrameView`). The Newton backend uses the site-based pattern from `Pva` / `FrameTransformer`: walk USD to the rigid-body ancestor, register a body-attached site via `NewtonManager.cl_register_site`, and read per-step transforms off a `SensorFrameTransform` against a shared world-origin reference. Static parents bypass the site machinery (a single `body=-1` global site can't represent per-env world origins) and serve a cached per-env `wp.transformf` array. `MultiMeshRayCaster` / `MultiMeshRayCasterCamera` re-parent onto the new base but keep their `FrameView`-backed body tracker, so the staleness behavior persists there. Tracked as `xfail` in `test_ray_caster_sensor.py` — extending the backend split to MultiMesh is a follow-up. The cfg surface, `class_type` strings, and runtime semantics are unchanged for callers; existing user code does not need to migrate. Fixes isaac-sim#5476 (the `FabricFrameView` contract regression-test PR — the bug it documents is fixed for the single-mesh path here). ## Type of change - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) ## Screenshots N/A — backend refactor, no UI changes. ## 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 Update ecosystem documentation to reflect the latest multi-backend setup. ## Type of change - Documentation update ## Checklist - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format` - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there <!-- As you go through the checklist above, you can mark something as done by putting an x character in it For example, - [x] I have done this task - [ ] I have not done this task -->
Bumped packages: - isaaclab: 5.3.0 → 5.4.0 - isaaclab_newton: 0.10.0 → 0.11.0 - isaaclab_ov: 0.2.0 → 0.2.1 - isaaclab_ovphysx: 1.0.0 → 2.0.0 - isaaclab_physx: 0.8.0 → 0.9.0 - isaaclab_tasks: 1.7.0 → 1.8.0
# Description Adds missing modules to the API docs. ## Type of change - Documentation update ## Checklist - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format` - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there <!-- As you go through the checklist above, you can mark something as done by putting an x character in it For example, - [x] I have done this task - [ ] I have not done this task -->
…m#5650) ## Description Refactors the IsaacLab installation model to simplify the user experience, adds comprehensive installation CI tests (including conda). --- ## Motivation The previous installation model required users to name every individual submodule (`./isaaclab.sh -i assets,tasks,physx,contrib,newton,rl[rsl-rl]`), exposing internal implementation details. Users shouldn't need to know that `tasks` depends on `physx` or that `contrib` exists — they just want to train with Newton or run with Isaac Sim. --- ## Changes ### 1. Installation model refactor **`source/isaaclab/isaaclab/cli/commands/install.py`** - Replaced `VALID_ISAACLAB_SUBMODULES` / `VALID_RL_FRAMEWORKS` with three typed constants that make the tier structure explicit: - `CORE_ISAACLAB_SUBMODULES: list[str]` — always installed (isaaclab, assets, contrib, experimental, newton, ov, ovphysx, physx, rl, tasks, tasks_experimental, visualizers) - `OPTIONAL_ISAACLAB_SUBMODULES: dict[str, str]` — opt-in heavy submodules (`mimic`, `teleop`) - `VALID_EXTRA_FEATURES: set[str]` — opt-in heavy dependency groups (`contrib`, `newton`, `ov`, `rl`, `visualizer`) - Rewrote `command_install(install_type)` to always install all core submodules, then layer optional submodules and extra feature dependencies on top. - Added `_install_extra_feature(feature_name, selector)` replacing `_install_extra_frameworks`. - `./isaaclab.sh -i` (no args) or `-i all` installs everything including `mimic` and `teleop`. - `./isaaclab.sh -i none` installs all core submodules with no optional extras. - Unknown tokens (e.g. old `tasks`, `assets`) emit a `[WARNING]` and are skipped gracefully. **`source/isaaclab/isaaclab/cli/__init__.py`** - Rewrote the `-i` help text to document the three-tier model with examples. **`source/isaaclab/setup.py`** - Simplified `EXTRAS_REQUIRE` to `isaacsim` and `all` only. **`source/isaaclab_mimic/setup.py`** - Removed the empty `robomimic` extra. **`pyproject.toml` (root)** - `[project.dependencies]`: lists all core submodules (bare, no extras). - `[project.optional-dependencies]`: simplified to `isaacsim` and `all`. --- ### 2. Documentation **`docs/source/setup/installation/include/src_build_isaaclab.rst`** - Rewrote the install section: new tables for optional submodules and extra feature sets with their selectors; updated all example commands. **`docs/source/setup/installation/kitless_installation.rst`** - Updated the selective-install table and examples to match the new model. ### 3. Installation CI tests #### New and updated test files | File | Status | What it tests | |---|---|---| | `test_install_command_parsing.py` | New | Unit tests for `_split_install_items`, constant consistency, and `command_install` dispatch logic (all mocked, no pip) | | `test_isaaclabx_i_none.py` | New | `./isaaclab.sh -i none` installs all core submodules; optional submodules absent | | `test_isaaclabx_i_rl.py` | New | `rl[rsl-rl]`, `rl[skrl]`, `rl[sb3]` each install the right framework; `rl` (no selector) installs all | | `test_isaaclabx_i_mimic.py` | New | `mimic` is importable after `-i mimic`; absent after `-i none` | | `test_isaaclabx_i_visualizer.py` | New | `visualizer[rerun]`, `visualizer[viser]`, `visualizer` (all) install the right backends | | `test_install_workflow_training.py` | New | E2E uv × conda training workflows (see table below) | | `test_isaaclabx_i_physx.py` | Updated | Reflects physx in core set (no longer requires `-i physx`) | | `test_isaaclabx_uv_smoke.py` | Updated | `assets` / `tasks` are always-installed core; `newton` is an extra | | `test_isaaclabx_uv_training.py` | Updated | Install command updated from old token list to `newton,rl[all]` | #### `test_install_workflow_training.py` — E2E matrix | Test | Install command | Marker | |---|---|---| | `test_uv_none_installs_core_submodules` | `-i none` | `@uv` | | `test_uv_newton_rsl_rl_trains_cartpole` | `-i newton,rl[rsl-rl]` | `@uv` | | `test_uv_newton_ov_rsl_rl_trains_cartpole` | `-i newton,ov,rl[rsl-rl]` | `@uv` | | `test_uv_all_trains_cartpole` | `-i all` | `@uv` | | `test_conda_none_installs_core_submodules` | `-i none` (conda env) | `@conda` | | `test_conda_newton_rsl_rl_trains_cartpole` | `-i newton,rl[rsl-rl]` (conda env) | `@conda` | #### `source/isaaclab/test/install_ci/utils.py` - Added `drop_keys(env, keys)` helper for stripping venv/conda activation markers before creating isolated environments. - Added `Conda_Mixin` with `create_conda_env()`, `destroy_conda_env()`, and `run_in_conda_env()` for conda-based test classes. #### `source/isaaclab/test/install_ci/conftest.py` - Registered `conda` and `timeout` as known pytest markers. --- ### 4. Conda CI infrastructure **`docker/Dockerfile.installci-conda`** (new) - Layers Miniconda on top of the existing uv-based `Dockerfile.installci` image. - Used by the new `install-tests-conda` CI job. **`tools/run_install_ci.py`** - Refactored build logic into `_build_image()` helper. - Added `--conda` flag: builds the uv base image first, then the conda layer on top; routes to the conda image for the Docker run. **`.github/workflows/install-ci.yml`** - Renamed existing job to `Installation Tests (uv)`; added `-m uv` so it only runs uv-marked tests. - Added `Installation Tests (conda)` job with `--conda` and `-m conda`, `timeout-minutes: 150` (extra headroom for two-stage Docker build). - Fixed SIGPIPE in `render_table` / `any_match` shell functions: replaced `printf '%s\n' "$files" | grep` with `grep <<< "$files"` to avoid broken-pipe signals when `grep` exits early with `-m` or `-q`. --- ## Testing - `test_install_command_parsing.py`: 41 unit tests, all pass without GPU or network. - Install + training verified end-to-end on this machine: - `./isaaclab.sh -i newton,ov,rl[rsl_rl]` → clean install, no warnings - `./isaaclab.sh train --rl_library rsl_rl --task Isaac-Cartpole-Direct-v0 --num_envs=16 --max_iterations=10 "presets=newton" --headless` → 10 iterations, exit 0, ~2900 steps/sec --- ## Migration guide | Old command | New command | |---|---| | `./isaaclab.sh -i assets,tasks,physx,contrib` | `./isaaclab.sh -i none` (all core always installed) | | `./isaaclab.sh -i assets,tasks,ov,rl[rsl-rl]` | `./isaaclab.sh -i ov,rl[rsl-rl]` | | `./isaaclab.sh -i newton,rl[all]` | unchanged | | `./isaaclab.sh -i mimic,teleop` | unchanged | | `uv pip install isaaclab[tasks,rl,assets]` | `uv pip install isaaclab[all]` |
Extract _compose_fabric_transform() to deduplicate the kernel-launch logic shared by set_world_poses and set_scales. The initial USD->Fabric sync now composes position, orientation, and scale in one call, so PrepareForReuse is invoked exactly once per logical update. Also replace assert with RuntimeError in _rebuild_fabric_arrays so the topology-change guard survives python -O.
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 join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Problem
FabricFrameViewhad duplicated kernel-launch logic inset_world_posesandset_scales, and the initial USD→Fabric sync called both methods sequentially. This meant:PrepareForReuse— the initial USD→Fabric sync in_sync_fabric_from_usd_oncecalledset_world_posesthenset_scales, each invokingPrepareForReuse. A second non-idempotentPrepareForReusecall could mask a topology-change signal that should have triggered a fabricarray rebuild.Solution
Extract
_compose_fabric_transform(positions=None, orientations=None, scales=None, indices=None)— a single method that composes any subset of transform components into one kernel launch. Components left asNoneare skipped via empty arrays.set_world_poses→ delegates to_compose_fabric_transform(positions=..., orientations=...)set_scales→ delegates to_compose_fabric_transform(scales=...)_sync_fabric_from_usd_once→ single fused call with all three componentsAdditional fix
The topology-change invariant guard in
_rebuild_fabric_arraysusedassert, which is stripped underpython -O. Replaced withraise RuntimeErrorso it's always active.Tests
All 36 existing Fabric tests pass (+ 2 xfail).