Ashwinvk/leapp observation term inputs#2
Open
ashwinvkNV wants to merge 40 commits into
Open
Conversation
…w to install ovrtx (isaac-sim#5991) # Description Documentation was out of date. 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 -->
…tion (isaac-sim#5996) ## 1. Summary * The ``create_cube_base_env`` tutorial crashed at startup with ``RuntimeError: Scene replication is enabled ...`` from the event manager: the scene was constructed with ``replicate_physics=True`` while declaring two ``prestartup`` USD-level randomization terms (``randomize_scale``, ``randomize_color``). * One-line fix: ``replicate_physics=True`` → ``False`` on the scene cfg — matching the tutorial's docstring and the comment directly above the line, both of which already state it should be ``False``. * Regression from isaac-sim#4649 (cloner refactor), which flipped this line without updating the comment or accounting for the prestartup guard. ## 2. Verification (Isaac Sim 6.0.0.1, headless) * Before (``True``): ``RuntimeError`` raised in ``EventManager._prepare_terms``; 0 simulation steps. * After (``False``): both prestartup terms active; the env runs 64,588 steps with the cube-tracking error converging 63.5 → 0.19. ## 3. Test plan * [x] Reproduced the crash on develop as-is * [x] Verified the fix runs the tutorial headless with USD-level randomization active Refs: NVBug 6269154
# 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. --> Fixes - remove legacy isaaclab_visualizers/setup.py - fix too small ground plane mesh in Rerun and Viser visualizers in some envs - fix flickering ground in Viser visualizer - fix library conflict with imgui_bundle, which broke Newton viewer's HUD - expand viz test to include a specific check for imgui_bundle failure to load (this often occurs due to new conflict libraries which causes Newton visualizer HUD to break) - prevent log spam from [Warning] [omni.physx.tensors.plugin] Failed to find rigid body... - add contact arrows to newton visualizer with a limitation note to the visualization docs - fix an edgecase where wrong viz marker prototype is used when marker count equals number of prototype - move the xr visualization test from test/visualization -> test/xr_visualization to separate it more from test/visualizers <!-- 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 -->
…olution (isaac-sim#5944) ## Summary alternative to isaac-sim#5939 - Selecting a typed preset (e.g. `presets=newton_mjwarp`) on a task that does **not** declare that name on a `PhysicsCfg`/`RendererCfg` previously created a silent mixed configuration: the name would match an unrelated scalar/sensor preset that happens to share the name, tuning those fields while leaving the real backend (e.g. PhysX) untouched. This adds a post-resolution check that a selected *reserved* typed name actually landed on a config of its own type at least once, and raises a clear `ValueError` otherwise. - The set of reserved canonical names is declared per typed target in `PresetTarget` (`preset_target.py`) — `PHYSICS = {newton_mjwarp, newton_kamino}`, plus the known renderer backends. New solvers/renderers opt in by adding their name there; the resolver hardcodes nothing. `physx`/`ovphysx` are intentionally **not** reserved (PhysX is the default backend, so selecting it on a task without a physics preset is harmless rather than a silent mismatch). - Implementation is minimal: one `typed_hits: set[str]` threaded through `_pick_alternative`/`_resolve_active_presets` records when a reserved name resolves to a value of its target type; `_validate_typed_presets` then flags `reserved-selected ∩ consumed − typed_hits`. Truly-unknown names continue to flow to the existing "Unknown preset(s)" error path. ## Behavior | Invocation | Result | |---|---| | `Isaac-Velocity-Flat-Anymal-C-v0 presets=newton_mjwarp` | resolves (lands on `NewtonCfg`) | | `Isaac-Navigation-Flat-Anymal-C-v0 presets=newton_mjwarp` | `ValueError` (no Newton physics; only matched a sensor/scalar) | | `Isaac-Navigation-Flat-Anymal-C-v0 presets=physx` | resolves (PhysX not reserved, benign) | | `Isaac-Navigation-Flat-Anymal-C-v0 presets=newton_kamino` | "Unknown preset(s)" (unchanged path) | | legacy alias `presets=newton` on navigation | `ValueError` (canonicalized to `newton_mjwarp`) | ## Test plan - [x] `./isaaclab.sh -p -m pytest source/isaaclab_tasks/test/core/test_hydra.py` (added 7 regression tests for the validator + end-to-end resolution; full file passes) - [x] `test_preset_cli.py`, `test_newton_solver_preset_names.py`, `test_preset_kit_decision.py` pass - [x] Config-resolution probes for the table above - [x] `pre-commit` (ruff/format/codespell/rst/license) green - [ ] CI A changelog fragment is included under `source/isaaclab_tasks/changelog.d/`.
Bumped packages: - isaaclab: 6.3.1 → 6.4.0 - isaaclab_contrib: 0.4.3 → 0.4.4 - isaaclab_newton: 0.15.1 → 0.15.2 - isaaclab_ov: 0.4.2 → 0.4.3 - isaaclab_physx: 1.1.3 → 1.1.4 - isaaclab_tasks: 2.0.3 → 3.0.0 - isaaclab_visualizers: 0.1.2 → 0.1.3
# Description Cleans up and migrates the core `reach` tasks in `isaaclab_tasks`, following the cartpole/ant/humanoid migration pattern. Also promotes the reach pose-tracking rewards into the shared `isaaclab.envs.mdp` terms. **Affected packages:** `isaaclab_tasks`, `isaaclab`. **Breaking** — see changelog fragments for migration. #### Task ID renames (Breaking) - Dropped the `-v0` suffix from all reach Gym IDs (manager-based, robot name retained): - `Isaac-Reach-Franka-v0` → `Isaac-Reach-Franka` (+ `-Play`, `-OSC`, `-OSC-Play`) - `Isaac-Reach-UR10-v0` → `Isaac-Reach-UR10` (+ `-Play`) #### Pose-tracking rewards centralized (Breaking) - Moved `position_command_error`, `position_command_error_tanh`, `orientation_command_error` to `isaaclab.envs.mdp.rewards` (alongside the existing velocity-tracking terms), with SI-unit docstrings. - Removed the `isaaclab_tasks.core.reach.mdp` package entirely. - Repointed all consumers (core reach, contrib OpenArm reach, contrib Digit loco-manip) to `import isaaclab.envs.mdp as mdp` — no task reaches into another task's package for these anymore. #### Code cleanup (no behavior change) - `position_command_error_tanh` now reuses `position_command_error` instead of duplicating the position computation. - `osc_env_cfg`: dropped redundant robot re-creation + duplicate import; mutates the parent's actuators in place. - `reach_env_cfg`: `ReachPhysicsCfg` references `default = physx` (no duplicate `PhysxCfg`); unified sim-config imports under `sim_utils`. - Standardized the Franka RSL-RL experiment name `franka_reach` → `reach_franka` (matches sibling configs + UR10). #### References updated - Tests (`test_rsl_rl_export_flow`, benchmarking `configs.yaml`), benchmark scripts, hydra docstring, and docs (`hydra`, `wrap_rl_env`, `environments`, `rl_existing_scripts`, leapp export). ## 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
Bumped packages: - isaaclab: 6.4.0 → 6.5.0 - isaaclab_tasks: 3.0.0 → 4.0.0
…#6015) # Description Updates references of Isaac Sim pip wheel to point to the latest release 6.0.0.1 build. Updates staging S3 path to production. Updates Newton 1.2.1 to released pip wheel. ## 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) - 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 -->
# Description Fix the multi-doc build, the new -j argument is not getting parsed correctly. ## 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 Fixes local mirroring of remote USD assets that reference MDL materials with texture defaults. The previous recursive download path discovered USD dependencies, including MDL files, but did not discover texture resources referenced from inside those MDL files. When the mirrored MDL files were loaded locally, RTX attempted to resolve their relative texture defaults from the local mirror and emitted unresolved texture warnings. This generalizes the dependency discovery helper so the download loop asks for dependencies from each mirrored asset. USD files continue to use OpenUSD dependency discovery, and MDL files now contribute quoted texture resource paths for the same mirror-download path. Fixes # N/A ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Screenshots N/A ## Testing - `PYTHONPATH=/tmp/isaaclab-pr-mdl/source/isaaclab python -m pytest source/isaaclab/test/utils/test_assets.py -q` - `4 passed` - Re-ran the locomanipulation scene repro with a fresh `TMPDIR` asset mirror. - `texture_warnings 0` - PackingTable MDL textures were downloaded into the fresh mirror. ## 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 - [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) - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
# 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 updates the demo scripts to support running across the default KitViz/PhysX path and NewtonViz/Newton-MJWarp backend combinations. The affected demos now use consistent CLI parsing, import ordering, usage comments, default Kit visualizer behavior, and visualizer-aware simulation loops. It also tunes selected Newton MJWarp solver parameters for demos that need more stable articulation/contact behavior, avoids resolving `InteractiveScene` before simulation launch in `bin_packing.py`, and adds Newton visualizer support for `SimulationContext.set_camera_view()`. **Dependencies** - isaac-sim#5826 - isaac-sim#5892 <!-- 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) - Documentation update ## Validation Validated the demo matrix for: - `scripts/demos/arl_robot_1.py` - `scripts/demos/arms.py` - `scripts/demos/bin_packing.py` - `scripts/demos/bipeds.py` - `scripts/demos/hands.py` - `scripts/demos/quadcopter.py` - `scripts/demos/quadrupeds.py` with: - default Kit visualizer + PhysX - Newton visualizer + PhysX - default Kit visualizer + Newton MJWarp - Newton visualizer + Newton MJWarp ## Screenshots <img width="960" height="540" alt="arms" src="https://github.com/user-attachments/assets/cdc8916d-f6b3-4f23-b41e-dd977e97f1c5" /> <img width="960" height="540" alt="bin_packing" src="https://github.com/user-attachments/assets/c3ce3d93-af55-4538-b776-3826ab19cd42" /> <img width="960" height="540" alt="bipeds" src="https://github.com/user-attachments/assets/686df89f-5926-4002-aafe-16c4d325c3ff" /> <img width="960" height="540" alt="hands_fixed" src="https://github.com/user-attachments/assets/ebc62ee0-37c5-44d8-9d8b-84584f8dca74" /> <img width="960" height="540" alt="quadcopter" src="https://github.com/user-attachments/assets/6d954b80-3946-4ca3-befd-35a1499e6427" /> <img width="960" height="540" alt="quadrupeds" src="https://github.com/user-attachments/assets/eda177b3-02fb-4393-940e-39de9aca249f" /> <!-- 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 - [ ] 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 --> --------- Signed-off-by: Yize Wang <yizew@nvidia.com> Co-authored-by: Yize Wang <yizew@nvidia.com>
## Summary
This PR removes backend-specific cloning logic from `InteractiveScene`
and
replaces the previous implicit `replicate_session_defaults` /
`replicate_session` machinery with three orthogonal, explicit primitives
that
compose identically whether you drive cloning through `InteractiveScene`
or
by hand in a `DirectRLEnv` or standalone script.
The result is that `InteractiveScene` no longer knows anything about USD
vs.
PhysX vs. Newton — it just enters a `ReplicateSession` and lets each
asset's
constructor register the backend(s) it needs. This is foundational for
two
follow-on capabilities the project has wanted for a while: **flexible
backend
cloning** and **skip-cloning workflows**.
## What changed
### New core primitives in `isaaclab.cloner`
- **`REPLICATION_QUEUE`** — module-level list that asset constructors
append
`(cfg, BackendCtxCls)` pairs to via tiny per-backend helpers
(`queue_usd_replication`, `queue_physx_replication`,
`queue_newton_replication`). Backends are no longer special-cased inside
`InteractiveScene`; each one self-registers.
- **`ClonePlan`** — self-contained dataclass describing the world layout
(`sources`, `destinations`, `clone_mask`, `env_ids`, `positions`,
`cfg_rows`). Stage-agnostic by design; the USD stage is now passed
explicitly to consumers so the same plan can be replayed, inspected, or
serialized.
- **`replicate(plan, *, stage)`** — free function that drains
`REPLICATION_QUEUE` against a plan, groups queued cfgs by backend
context
class, runs each context in ascending `replicate_priority` order
(physics
before USD), publishes the plan to `SimulationContext`, and clears the
queue. The queue is snapshotted and cleared up front so a backend
failure
cannot leak stale entries into the next call.
- **`ReplicateSession`** is now a thin context manager that calls
`make_clone_plan` in `__enter__` and `replicate` in `__exit__`. The
state-bag version with `plan` / `stage` / `cfg_rows` /
`replicate_on_exit` fields is gone.
- **`ClonePlan.from_env_0`** — classmethod that builds the single-source
homogeneous plan most direct envs need by auto-populating `cfg_rows`
from `REPLICATION_QUEUE` filtered by env-root prefix.
- **`CloneCfg.clone_regex`** (default `"/World/envs/env_.*"`) — single
source of truth for the env-namespace convention. `InteractiveScene`
reads it directly when expanding `{ENV_REGEX_NS}` cfg macros.
### Two equivalent invocation paths
```python
# InteractiveScene path (what the scene runs under the hood)
with cloner.ReplicateSession(cfgs, num_clones=N, env_spacing=2.0,
device=device, stage=stage):
for cfg in cfgs:
cfg.class_type(cfg)
# Direct env / script path
plan = cloner.ClonePlan.from_env_0(src, dest, num_envs, device, positions)
cloner.replicate(plan, stage=scene.stage)
```
Both end in the same `cloner.replicate(plan, stage=...)` call. The only
difference is how the plan was built and how asset construction was
interleaved.
### What got removed from `InteractiveScene`
- `clone_environments(...)` deprecated shim. The scene now replicates
inside `__init__` via `ReplicateSession`.
- `env_ns` / `env_regex_ns` properties (used only internally).
- `_build_clone_plan_from_cfg` and `_default_env_origins` internals.
Cfg-driven plan construction now lives in `make_clone_plan`; per-env
positions are read from the published `ClonePlan`.
- `InteractiveScene.env_origins` now reads from the plan published to
`SimulationContext`, making the plan the single source of truth for
env placement.
### Why this matters (the actual point of the PR)
This refactor is foundational for two capabilities the current scene
coupling blocks:
- **Flexible backend cloning.** Backends now plug in by shipping a
`<Backend>ReplicateContext` class + a one-line queue helper. Swapping
PhysX ↔ Newton no longer requires `InteractiveScene` to change; cfgs
and user code stay untouched, and a third-party backend can register
itself without modifying core.
- **Skip-cloning workflows.** Because plan construction, asset
registration, and drain are three independent primitives, callers
that want to author env-0 prims by hand and skip the cloner — or
drive replication out-of-band from a visualizer, replay tool, or
test fixture — can do so without fighting `InteractiveScene`.
## Migration notes
- `with cloner.ReplicateSession():` (no-arg) →
`cloner.replicate(cloner.ClonePlan.from_env_0(...), stage=...)`.
- `InteractiveScene.clone_environments(...)` → removed; the scene
replicates inside `__init__`.
- `make_clone_plan(sources, destinations, ...)` →
`make_clone_plan(cfgs, num_clones, env_spacing, device, ...)`.
- Pass `stage=...` explicitly to `replicate()` and `ReplicateSession()`.
- Read `CloneCfg.clone_regex` if you previously used
`InteractiveScene.env_ns` / `env_regex_ns`.
About 17 direct envs were migrated to the new pattern in this PR.
## Test plan
- [ ] `./isaaclab.sh -p -m pytest
source/isaaclab/test/sim/test_cloner.py`
- [ ] `./isaaclab.sh -p -m pytest
source/isaaclab/test/scene/test_interactive_scene.py`
- [ ] `./isaaclab.sh -p -m pytest
source/isaaclab_physx/test/sim/test_cloner.py`
- [ ] Migrated direct envs (`cartpole`, `anymal_c`, `franka_cabinet`,
`factory`, `humanoid_amp`, `inhand_manipulation`, `locomotion`,
`quadcopter`, `shadow_hand_*`, `automate/*`, `cart_double_pendulum`,
`cartpole_warp`, `inhand_manipulation_warp`, `locomotion_warp`)
spawn and step on PhysX
- [ ] Same envs spawn and step on Newton
- [ ] `./isaaclab.sh -f` passes
- [ ] Docs build (`cd docs && make html`)
Bumped packages: - isaaclab: 6.5.0 → 6.6.0 - isaaclab_contrib: 0.4.4 → 0.4.5 - isaaclab_newton: 0.15.2 → 0.15.3 - isaaclab_visualizers: 0.1.3 → 0.1.4
# Description Adds an OvPhysX runtime import helper so missing optional `ovphysx` wheel failures report the supported install command instead of a raw `No module named ovphysx` error. This routes `isaaclab_ovphysx.tensor_types` and `OvPhysxManager` bootstrap imports through the helper, preserves nested missing-dependency errors, updates the OvPhysX backend docs, and adds a focused regression test. Related to isaac-sim#5991. Fixes: N/A ## Type of change - Bug fix (non-breaking change which fixes an issue) - Documentation update ## Screenshots N/A ## Validation - `./isaaclab.sh -p -m pytest source/isaaclab_ovphysx/test/test_runtime_imports.py` -> 2 passed - `SKIP=check-git-lfs-pointers ./isaaclab.sh -f` -> passed - `./isaaclab.sh -f` was attempted before commit and before push; it fails only at `check-git-lfs-pointers` because `git-lfs` is not installed in this local environment. ## Checklist - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [ ] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format` - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] 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 Updates applicable commands in documentation to use python instead of platform specific isaaclab.sh/.bat scripts. Include windows commands where needed. ## 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 --> --------- Signed-off-by: Kelly Guo <kellyg@nvidia.com> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
# Description This PR fixes dependency resolution for non-camera Newton/PhysX/OV workflows by making isaaclab_ppisp a peer IsaacLab extension instead of a hard dependency of isaaclab_newton, isaaclab_physx, and isaaclab_ov. Previously, installing or resolving isaaclab-newton[all] could fail when isaaclab-ppisp was unavailable from the package registry, even for workloads that do not use camera ISP. This change keeps PPISP available through isaaclab[all], while renderer code imports it only when CameraCfg.isp_cfg is set. If PPISP is missing and ISP is requested, the renderer now raises an actionable install error. Dependencies required: none beyond existing IsaacLab extension dependencies. isaaclab_ppisp remains required only when using camera isp_cfg. Fixes # (issue) ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Screenshots Not applicable. ## Checklist - [x] I have read and understood the contribution guidelines (https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [x] I have run the pre-commit checks (https://pre-commit.com/) with ./isaaclab.sh --format - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] I have 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
## Summary The current LEAPP export exports projected_gravity as an input instead of root_quat_w. The reason is that with the change to use warp for observation terms LEAPP can no longer automatically trace projected gravity back to root_quat_w. For new we fix this manually, once we have warp support in LEAPP this will no longer be needed. ## Changes - Export `mdp.projected_gravity` through `root_quat_w` for LEAPP graphs. - Keep the policy observation as projected gravity by computing it inside the exported graph. - Add regression coverage and a changelog fragment. ## Test Plan - `uv run --with pytest --with leapp python -m pytest source/isaaclab_rl/test/export/test_leapp_proxy.py -q` - `uv run --with ruff --with leapp ruff check source/isaaclab/isaaclab/utils/leapp/export_annotator.py source/isaaclab/isaaclab/utils/leapp/proxy.py source/isaaclab_rl/test/export/test_leapp_proxy.py` - `./isaaclab.sh -f` - Exported `Isaac-Velocity-Flat-G1-v0` checkpoint `model_1499.pt` and verified YAML uses `state/body/rotation` for `robot_root_quat_w`. --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…m#5735) # 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 -->
## Summary - Update the quadruped base tutorial to import UniformNoiseCfg, which is the current noise config API used elsewhere in the repo. - Preserve behavior: UniformNoiseCfg defaults to additive noise, matching the tutorial usage. ## Validation - python3 -m py_compile scripts/tutorials/03_envs/create_quadruped_base_env.py - pre-commit run --files scripts/tutorials/03_envs/create_quadruped_base_env.py - python3 tools/changelog/cli.py check develop Full Kit launch was not run locally; this environment does not have the prepared Isaac Lab runtime dependencies installed.
## Summary - Collect relative MDL module imports when mirroring remote assets locally. - Covers ordinary `import` and `[export] using ... import ...` forms, including current-package `.::` imports and parent-package `..::` imports. - Leaves global/built-in MDL modules to the renderer module path while preserving existing MDL texture dependency handling. ## Validation - `python3 -m py_compile source/isaaclab/isaaclab/utils/assets.py source/isaaclab/test/utils/test_assets.py` - direct importlib check for `_find_mdl_dependencies` with Hospital-style relative imports, using-imports, and parent-relative imports - `python3 tools/changelog/cli.py check develop` - `pre-commit run --files source/isaaclab/isaaclab/utils/assets.py source/isaaclab/test/utils/test_assets.py source/isaaclab/changelog.d/fix-mdl-module-dependencies.rst` Focused pytest was not runnable in this shell because the local Python environment is missing `lazy_loader`. Full Kit/Hospital viewport repro was not run locally.
# Description Move compass training tutorial doc to COMPASS repo
## Summary - increase AutoMate assembly/disassembly PhysX GPU collision stack size from the default 2**26 to 2**27 - reject placeholder/non-5-digit AutoMate assembly IDs in the run helpers before they mutate config or launch simulation - update AutoMate docs to use a concrete runnable assembly ID example - add a lightweight config/helper regression test and an isaaclab_tasks changelog fragment ## Rationale The reported Windows beta2 disassembly run for assembly_id 00032 asks PhysX for a collision stack of roughly 75-86 MB, above the default 2**26 bytes. This keeps the memory change scoped to AutoMate's high-contact 128-env tasks instead of raising the global PhysX default for unrelated environments. A second reported DGX Spark command passed the literal docs placeholder `ASSEMBLY_ID`, which was written into the task config and only failed later as a missing remote USD path. The helpers now fail fast with an argparse message before launching Kit. ## Validation - `python3 tools/changelog/cli.py check develop` - `python3 -m py_compile source/isaaclab_tasks/isaaclab_tasks/contrib/automate/run_w_id.py source/isaaclab_tasks/isaaclab_tasks/contrib/automate/run_disassembly_w_id.py source/isaaclab_tasks/test/contrib/test_automate_cfg.py source/isaaclab_tasks/isaaclab_tasks/contrib/automate/disassembly_env_cfg.py source/isaaclab_tasks/isaaclab_tasks/contrib/automate/assembly_env_cfg.py` - `.venv/bin/python -m pytest source/isaaclab_tasks/test/contrib/test_automate_cfg.py` - `uvx ruff==0.14.10 check --fix source/isaaclab_tasks/test/contrib/test_automate_cfg.py source/isaaclab_tasks/isaaclab_tasks/contrib/automate/run_w_id.py source/isaaclab_tasks/isaaclab_tasks/contrib/automate/run_disassembly_w_id.py source/isaaclab_tasks/isaaclab_tasks/contrib/automate/disassembly_env_cfg.py source/isaaclab_tasks/isaaclab_tasks/contrib/automate/assembly_env_cfg.py` - `uvx ruff==0.14.10 format source/isaaclab_tasks/test/contrib/test_automate_cfg.py source/isaaclab_tasks/isaaclab_tasks/contrib/automate/run_w_id.py source/isaaclab_tasks/isaaclab_tasks/contrib/automate/run_disassembly_w_id.py source/isaaclab_tasks/isaaclab_tasks/contrib/automate/disassembly_env_cfg.py source/isaaclab_tasks/isaaclab_tasks/contrib/automate/assembly_env_cfg.py` - `git diff --check` - `.venv/bin/python source/isaaclab_tasks/isaaclab_tasks/contrib/automate/run_w_id.py --assembly_id=ASSEMBLY_ID --train --max_iterations 10` exits at argparse with the placeholder-specific message and does not mutate the task config Could not run the full PhysX/Kit repro locally because this machine's uv environment does not have Isaac Sim/Kit on PYTHONPATH; the command fails before simulation with Isaac Sim not installed.
## Summary - Skip environment destructor cleanup once Python import shutdown has started (`sys.meta_path is None`). - Apply the guard consistently to `DirectRLEnv`, `DirectMARLEnv`, and `ManagerBasedEnv`. - Add regression coverage that verifies destructors still close during normal runtime but do not call `close()` after import shutdown begins. ## Validation - `PYTHONPATH=/tmp/isaaclab-directrl-del/source/isaaclab /home/zhengyuz/Projects/IsaacLab.wt/decouple-physics-events/env_isaaclab/bin/python -m pytest source/isaaclab/test/envs/test_env_destructors.py -q` - `git diff --check` - `python -m py_compile source/isaaclab/isaaclab/envs/direct_rl_env.py source/isaaclab/isaaclab/envs/direct_marl_env.py source/isaaclab/isaaclab/envs/manager_based_env.py source/isaaclab/test/envs/test_env_destructors.py` - `python3 tools/changelog/cli.py check _tmp-upstream-develop` - Shortened Newton RL-Games repro completed with no `Exception ignored`, `sys.meta_path is None`, `ImportError`, or shutdown traceback: `Isaac-Repose-Cube-Allegro-Direct-v0`, `presets=newton`, `--headless`, `--max_iterations 1`, `--num_envs 2048`
# Description Fixes a skrl error where jax experimental is not imported and must be imported manually ## 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
Fix for failure to load the following command: `python -u scripts/reinforcement_learning/skrl/play.py --task Isaac-Velocity-Rough-Anymal-C-Direct-v0 --visualizer kit ` Due to missing extensions ## 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 Consolidates the rigid and soft Franka lifting tasks into a single `isaaclab_tasks.core.lift` package, eliminating the duplicated `lift_franka_soft` task and its parallel `mdp` module. Soft and cloth variants now live as configs alongside the rigid one and share a common MDP package. #### Changes #### Package consolidation (breaking) - Moved `isaaclab_tasks.core.lift_franka_soft` under `isaaclab_tasks.core.lift.config.franka_soft`, next to the rigid `franka` config. - Merged the deformable MDP terms (observations, rewards, terminations) into the shared `isaaclab_tasks.core.lift.mdp` package instead of a separate per-variant `mdp`. The old `lift_franka_soft/mdp` module is removed. #### Environment IDs (breaking) - Dropped the `-v0` version suffix from all lift Gym environment IDs: - `Isaac-Lift-Cube-Franka-v0` → `Isaac-Lift-Cube-Franka` - `Isaac-Lift-Cube-Franka-Play-v0` → `Isaac-Lift-Cube-Franka-Play` - `Isaac-Lift-Soft-Franka-v0` → `Isaac-Lift-Soft-Franka` - `Isaac-Lift-Cloth-Franka-v0` → `Isaac-Lift-Cloth-Franka` #### Fixes - Renamed the `Isaac-Lift-Cloth-Franka` physics preset from the misspelled `newton_mjwarp_vdb` to `newton_mjwarp_vbd`, matching the soft-body task and the underlying VBD solver. - The cloth `RewardsCfg`, which duplicated the soft task's rewards verbatim, now inherits them instead of redefining. #### Misc - Updated imports, docs, benchmarks, and tests to reference the new module paths and environment IDs. - Minor docstring/comment cleanup in `lift_env_cfg.py`. #### Migration ```python # Before from isaaclab_tasks.core.lift_franka_soft.franka_soft_env_cfg import FrankaSoftEnvCfg # After from isaaclab_tasks.core.lift.config.franka_soft.franka_soft_env_cfg import FrankaSoftEnvCfg # Deformable MDP terms now come from the shared package from isaaclab_tasks.core.lift.mdp import deformable_lifted ``` Update any `gym.make(...)` / `--task` calls to use the unversioned environment IDs listed above. ## 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
…tonSiteFrameView` (isaac-sim#6047) # Description Fixed incorrect camera pose in :class:`~isaaclab_newton.sim.views.NewtonSiteFrameView`. The code change is cherry-picked from isaac-sim#5979 . ## 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 - [ ] 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
## Summary
- Remove `numba` from `isaaclab_tasks` dependencies.
- Replace AutoMate's Numba CUDA/CPU-JIT SoftDTW helper with a Torch
implementation that runs on the input tensor device.
- Add a no-grad anti-diagonal SoftDTW path plus
`forward_with_lengths(...)` so the AutoMate reward evaluates padded
variable-length reference segments in one batched call instead of one
SoftDTW call per environment.
- Clean up the autograd SoftDTW path to use a Torch DP table instead of
Python row lists, with a clearer docstring.
- Remove the Numba CUDA warning environment variable from `run_w_id.py`.
- Add focused SoftDTW tests for the no-Numba path, hard DTW, normalized
SoftDTW, variable-length padded SoftDTW, and finite backward gradients.
## Rationale
The original failure is not a sustainable place to solve with a NumPy
pin. AutoMate only needs SoftDTW values for reward computation; it does
not require the copied differentiable Numba implementation as a
package-level dependency. Keeping Numba also exposes a second failure
mode on RTX 5090: the old Numba CUDA kernel can fail at compile time
with `CUDA_ERROR_UNSUPPORTED_PTX_VERSION` / unsupported PTX version.
This removes the dependency instead of constraining global NumPy
resolution.
## Verification
- Focused tests pass in the develop venv: `python -m pytest
source/isaaclab_tasks/test/contrib/test_automate_soft_dtw.py -q` (`5
passed`).
- Focused tests pass in the beta2 venv where Numba import is broken (`5
passed`).
- `git diff --check` passes.
- `py_compile` passes for the touched Python files.
- Old-vs-new SoftDTW CPU forward parity: 594 finite cases across
`gamma={0.01,0.1,1.0}`, normalized/non-normalized valid cases, bandwidth
`{None,2,20}`, and sequence lengths up to `B=8,N=10,M=100`; max absolute
difference was `1.526e-04`.
- Mustafa's row/column Torch DP variant matched the current no-grad
implementation exactly in direct forward checks; for `B=128,N=10,M=100`,
it measured `82.497 ms` on CUDA versus `14.038 ms` for the anti-diagonal
no-grad SoftDTW path, so this PR keeps the anti-diagonal path for reward
inference while using the cleaner Torch DP-table style for autograd.
- For `gamma=0`, the old implementation returns `nan` on a simple
hard-DTW case; the new implementation returns the expected hard-DTW
value `1.0`.
- New SoftDTW autograd smoke test produces finite gradients.
- AutoMate reward parity: optimized length-aware reward path matches the
original per-env reward loop on synthetic AutoMate-shaped data (`128`
envs, `10` robot waypoints, `ref_len=100`, `gamma=0.01`); max absolute
error was `0.0` on CPU and CUDA.
## Performance
Synthetic AutoMate-shaped reward benchmark on RTX 5090 with Torch
`2.10.0+cu128`, `128` envs, `10` robot waypoints, `ref_len=100`,
`gamma=0.01`, `no_grad`:
| Path | CPU median | CUDA median | CUDA peak allocated delta |
| --- | ---: | ---: | ---: |
| Per-env Torch reward loop | `141.617 ms` | `355.131 ms` | `15.372 MB`
|
| Batched length-aware Torch reward | `13.483 ms` | `25.824 ms` |
`15.372 MB` |
The peak CUDA allocation in this reward benchmark is dominated by the
closest-state `torch.cdist` calculation, not by the SoftDTW table.
The previous Numba CUDA path could not be timed on this RTX 5090 because
it fails locally with `CUDA_ERROR_UNSUPPORTED_PTX_VERSION`; the
performance comparison above is against the direct per-env Torch
replacement path that this PR would otherwise have used.
# Description Fixes leapp lstm policy export. Previously it hooked onto structures in rslrl=3.1.2. The update now makes it work for rslrl=5.0.1, same version as the one in the pyproject.toml. Added a regression test to test if rslrl rnns work new test generates a dummy policy with rnn and tests the export. Previous it was assumed that there was one policy with a pretrained checkpoint that had an rnn but turns out there isn't any that by default run rnns so this error slipped through. ## 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 <!-- 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: 6.6.0 → 6.6.1 - isaaclab_newton: 0.15.3 → 0.15.4 - isaaclab_ov: 0.4.3 → 0.4.4 - isaaclab_ovphysx: 3.0.2 → 3.0.3 - isaaclab_physx: 1.1.4 → 1.1.5 - isaaclab_rl: 0.6.0 → 0.6.1 - isaaclab_tasks: 4.0.0 → 5.0.0
## Summary - call Newton rigid-object pose and velocity helper methods with explicit keyword arguments from deprecated root-state writer wrappers - align the Newton rigid-object wrappers with the keyword-only helper signatures and the other physics backends - add a Newton changelog fragment ## Tests - `git diff --cached --check` before commit - syntax parsed modified Python file with `ast.parse` - Not run: Isaac Sim tests in this local environment are missing Python dependency `lazy_loader`
…6060) # Description Since the non-root Docker migration (isaac-sim#5618, first shipped in 3.0.0-beta2), the container runs as user `isaaclab` (uid/gid 1000) with `HOME=/root`. Persistent mounts at `/root/.local/share/ov/data` that were created by an older root-based image (stale named volumes) or by Docker as auto-created bind-mount dirs are owned by `root`, so the runtime user cannot write the extension-registry cache. For XR teleop this aborts startup with a confusing, seemingly-unrelated error: PermissionError: [Errno 13] Permission denied: '/root/.local/share/ov/data/exts' ... No versions of omni.kit.xr.bundle.generic that satisfies: isaaclab.python.xr.openxr-3.0.0 ... Exiting app because of dependency solver failure... The XR bundle isn't actually missing — the registry never synced because its cache dir couldn't be created. This PR documents the cause and fix: - **`docs/source/how-to/cloudxr_teleoperation.rst`**: adds an admonition to the "Run with Docker" section explaining the failure and the fix (recreate/chown volumes for Compose, pre-create/chown host dirs for single-container). - **`docs/source/deployment/docker.rst`**: warns that non-root prebuilt images need bind-mount host dirs pre-created and chowned to uid/gid 1000, with a copy-paste snippet. Docs-only; no code changes and no changelog fragment (no `source/<pkg>/` package touched). 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
Promote the publicly available `ovphysx` PyPI wheel out of the manual
`ov[ovphysx]` extra and into the default `./isaaclab.sh --install` flow,
mirroring how the newton wheel is treated. The OVRTX renderer wheel
stays opt-in via `--install 'ov[ovrtx]'` or `--install 'ov[all]'`.
Concretely:
- `MANUAL_EXTRA_FEATURES` drops `"ov"` (it now only contains
`"contrib"`), so the `ov` feature is part of the automatic `-i` / `-i
all` set alongside `newton`, `rl`, and `visualizer`.
- `_install_ov_extra_dependencies("")` no longer prints a help message
and returns; it now installs `isaaclab_ovphysx[ovphysx]`. Explicit
`ov[ovrtx]`, `ov[ovphysx]`, and `ov[all]` behavior is unchanged.
- CLI `--install` help text and the `command_install` docstring are
updated to reflect the new default.
- With the wheel guaranteed in every standard install, the
`pytest.importorskip("ovphysx.types", reason="ovphysx wheel not
installed")` guards (9 sites) and one inner
`importorskip("isaaclab_ovphysx.tensor_types")` call are removed from
the `isaaclab_ovphysx` test suite. The `isaaclab_ov` CI job (whose
`filter-pattern: "isaaclab_ov"` already collects these tests) now
exercises them for real instead of silently skipping.
No new required dependency is added; `source/isaaclab_ovphysx/setup.py`
already declared `EXTRAS_REQUIRE = {"ovphysx": ["ovphysx"]}`. The extra
remains unpinned for now — pinning a minimum version is a sensible
follow-up once we lock in a release.
Fixes # (n/a)
## Type of change
- New feature (non-breaking change which adds functionality)
Strictly, the default install footprint grows by one PyPI wheel and
previously-skipped tests now run, so downstream consumers of `--install`
see new behavior — but no public API is removed or renamed and all
existing `ov[...]` selectors continue to work as before.
## Screenshots
N/A — install-CLI and test-gating 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 (CLI
`--help` text and `command_install` docstring updated)
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works (new `test_all_installs_ov_with_default_ovphysx_selector`
plus updates to `test_manual_extra_features` and
`test_all_does_not_install_manual_extra_dependencies`; 51/51 pass in
`test_install_command_parsing.py`)
- [x] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package —
`source/isaaclab/changelog.d/antoiner-ovphysx-default-install.rst` and
`source/isaaclab_ovphysx/changelog.d/antoiner-ovphysx-default-install.rst`
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
# Description Fixes rigid-body ancestor expression resolution for sensors mounted under a non-rigid child when the terminal child suffix also appears earlier in the path. The old implementation used an unbounded ``str.replace()``, which could remove more than the sensor-relative suffix. Simple example: ```text target_expr = /World/envs/env_.*/Robot/link/link relative_path = link old result = /World/envs/env_.*/Robot new result = /World/envs/env_.*/Robot/link ``` The fix verifies that the relative path is a terminal suffix and slices only that end segment. No issue filed. Validation: - `./isaaclab.sh -p -m pytest source/isaaclab/test/sensors/test_sensor_base.py::test_rigid_body_ancestor_expr_trims_only_terminal_suffix -q` - `PATH=/tmp/git-lfs-v3.7.1:$PATH ./isaaclab.sh -f` ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Screenshots Not applicable. ## 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, or documentation is not required for this change - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (do **not** edit `CHANGELOG.rst` or bump `extension.toml` — CI handles that) - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
…n_context (isaac-sim#5881) ## Summary - `build_simulation_context(device="cuda:N", sim_cfg=...)` silently dropped the explicit `device` kwarg when a `sim_cfg` was passed, falling back to `sim_cfg.device` (default `cuda:0`). - The multi-GPU CI lane sets `ISAACLAB_SIM_DEVICE=cuda:N` per shard, so tests that pass `device="cuda:N"` got `cuda:0` instead. Downstream Warp kernels then ran on `cuda:0` while the rest of the test believed it was on `cuda:N`: ``` RuntimeError: Error launching kernel 'set_root_link_pose_to_sim_index', trying to launch on device='cuda:0', but input array for argument 'env_ids' is on device=cuda:2. ``` - Fix: make `device`'s default `None` (sentinel) and apply it as an override after `sim_cfg` is resolved, so an explicit kwarg wins whether or not a `sim_cfg` was supplied. ## 1. The bug ```python def build_simulation_context(..., device: str = "cuda:0", sim_cfg=None, ...): if sim_cfg is None: sim_cfg = SimulationCfg(device=device, ...) # ^^ explicit `device` only used in the no-sim_cfg path; otherwise ignored ``` When a caller passed both `sim_cfg=<built with default device>` and `device="cuda:2"`, the kwarg was thrown away. Code that pulled the active device from `sim_cfg.device` saw `cuda:0`; Warp arrays allocated against the cfg device landed on `cuda:0` while torch ops driven by the kwarg ran on `cuda:2` — the cross-device kernel-launch error above. ## 2. Fix ```python def build_simulation_context(..., device: str | None = None, sim_cfg=None, ...): if sim_cfg is None: gravity = (0.0, 0.0, -9.81) if gravity_enabled else (0.0, 0.0, 0.0) sim_cfg = SimulationCfg(dt=dt, gravity=gravity) if device is not None: sim_cfg.device = device # explicit kwarg wins in both branches ``` `device=None` (default) means "use whatever the cfg already has". `device="cuda:N"` is honored even when a cfg is also passed. ## 3. Validation `source/isaaclab/test/sim/test_build_simulation_context_{headless,nonheadless}.py::test_build_simulation_context_cfg` is updated to assert the new override semantics (explicit `device` wins over `sim_cfg.device`). On local multi-GPU/MIG hardware, `build_simulation_context(sim_cfg=cfg, device="cuda:N")` previously hit the kernel-launch assertion; with the fix it runs on the requested device. Consumed by the multi-GPU CI lane (isaac-sim#5823).
# Description This PR adds particle visualization controls to `NewtonVisualizerCfg`. It exposes: - `show_particles` to enable Newton particle rendering through config. - `particle_color` to optionally override the Newton viewer particle color for `/model/particles`. Motivation: MPM and particle-based demos currently need to reach into the private Newton viewer instance to show particles or customize particle appearance. This keeps that behavior on the public visualizer config surface and preserves Newton’s default behavior when `particle_color=None`. Fixes # N/A ## Type of change - New feature (non-breaking change which adds functionality) ## Screenshots Not applicable. ## Checklist - [x] I have added tests that prove my feature works - [x] I have run the `pre-commit` checks with `./isaaclab.sh --format`
# Description OVPhysX can run kitless in a state where Carbonite exposes the Fabric USD notice interface but the Python `usdrt` module is not importable. In that state, `disabled_fabric_change_notifies()` should fall back to its intended no-op behavior instead of failing during scene cloning. This PR keeps Fabric notice suspension active when `usdrt` is available, but treats only a missing top-level `usdrt` module as unavailable Fabric notice suspension. It also removes redundant `queue_usd_replication(...)` calls from the OVPhysX `RigidObject`, `Articulation`, and `RigidObjectCollection` constructors. OVPhysX assets continue to enqueue `queue_ovphysx_replication(...)` for backend runtime cloning. Fixes # ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Screenshots Not applicable. ## 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 -f` - [x] I have made corresponding changes to the documentation, or no documentation update is required - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (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 ## Testing - `./isaaclab.sh -p -m pytest -q source/isaaclab/test/sim/test_cloner.py::test_disabled_fabric_change_notifies_noops_when_usdrt_unavailable` (`1 passed`) - `./isaaclab.sh -p -m pytest -q source/isaaclab_physx/test/sim/test_cloner.py::test_disabled_fabric_change_notifies_toggles_ifabricusd_flag` (`2 passed`) - `./isaaclab.sh -p -m pytest -q source/isaaclab_ovphysx/test/sim/test_views_xform_prim_ovphysx.py::test_world_pose_equals_parent_plus_offset -k cpu` (`1 passed, 1 deselected`) - `./isaaclab.sh -p -m pytest -q source/isaaclab_ovphysx/test/sim/test_views_xform_prim_ovphysx.py::test_world_pose_equals_parent_plus_offset -k cuda` (`1 passed, 1 deselected`) - `PATH=/tmp/git-lfs-v3.7.1:$PATH ./isaaclab.sh -f`
8e5fb30 to
4fc0d6e
Compare
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.
Description
Adds LEAPP observation-term input boundaries so selected policy observations can be exported as runtime inputs using
observation:{group}:{term}metadata. This supports workflows like gear assembly where deployment provides final shaft pose observations directly, instead of exposing simulator-only bookkeeping.Also updates LEAPP deployment env support, marks gear shaft pose observations, adds docs, and adds focused unit tests.
Fixes # N/A
Type of change
Screenshots
N/A
Checklist
./isaaclab.sh --formatCONTRIBUTORS.mdor my name already exists there