Repository navigation
[Docs] DOC-007: Migration guide: per-section review owners and checks - #8389
Conversation
Correct statements in the Isaac Lab 3.0 migration guide that no longer match the source tree: - Actuator limit aliases are removed in 3.1, not kept through 3.x. - RayCasterCfg.attach_yaw_only was removed, not deprecated. - isaaclab.utils.math.convert_quat still exists; it is only unneeded for Isaac Lab data. - Legacy write_*_to_sim methods are deprecated forwarders, not removed. - MjcfConverterCfg.fix_base and link_density are supported again. - Isaac Capture ships with the teleop extra; drop the pip install with an outdated isaacteleop~=1.0 pin.
"default" is not an accepted MjcfConverterCfg.collision_type value; list values from the Literal type instead.
…n guide - The Data Access and Math overview card called write_root_pose_to_sim_index positionally, but its arguments are keyword-only on every backend. - convert_quat is only unneeded for Isaac Lab data; keep it for external WXYZ data, as the HDF5 dataset handler still does. - Drop the nested literal inside the bold convert_quat heading, which rendered the backticks verbatim.
There was a problem hiding this comment.
Isaac Lab Review Bot
Needs attention: Style consistency (1). Other reviewed categories look good.
- PR description: The title promises per-section owners and checks, but the diff only corrects eight migration passages; retitle for the actual scope and move the long review checklist to a tracking issue.
- Design and architecture: Architecture looks good.
- Scope and over-engineering: No over-engineering issues.
- API: API changes look good.
- Compatibility and deprecation: No breaking changes identified.
- Implementation: Implementation looks good.
- Style consistency: The
convert_quatpassage labels its retained external-data example “OLD - No longer needed,” contradicting the new conditional guidance; relabel the example for external WXYZ input. - Test quality: Test quality looks good.
Minor fixes needed. Posted 1 inline finding.
Automated review; human maintainers own approval decisions.
| **The convert_quat function is no longer needed** | ||
|
|
||
| Previously, IsaacLab had a utility function to convert between quaternion formats: | ||
| IsaacLab provides a utility function to convert between quaternion formats: |
There was a problem hiding this comment.
🟡 Warning · Style Consistency — convert_quat guidance contradicts its example
The new text says Isaac Lab provides convert_quat and to keep it for external WXYZ data, but the snippet it introduces is still labeled # OLD - No longer needed and the next sentence says…
|
| Since everything now uses XYZW natively, this function is no longer needed for Isaac Lab data. | ||
| If you were using it, simply remove the conversion calls. Keep it only to convert external | ||
| data that still uses WXYZ order. |
There was a problem hiding this comment.
Some conversions are still needed
The corrected paragraph still tells readers to remove conversions for all Isaac Lab data. Older Isaac Lab datasets use WXYZ, and generate_data.py still converts their action quaternions before replay. convert_quat also converts current XYZW data to WXYZ for external policies.
Limit the removal advice to conversions around current native XYZW data. Keep conversions for older datasets and external policies; removing them can silently produce wrong rotations.
| Since everything now uses XYZW natively, this function is no longer needed for Isaac Lab data. | |
| If you were using it, simply remove the conversion calls. Keep it only to convert external | |
| data that still uses WXYZ order. | |
| Current Isaac Lab APIs use XYZW natively, so remove conversions that only adapted native | |
| Isaac Lab data to the old WXYZ convention. Keep conversions when reading older WXYZ datasets | |
| or exchanging data with external tools and policies that use WXYZ. |
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
| .. code-block:: bash | ||
|
|
||
| pip install isaacteleop~=1.0 --extra-index-url https://pypi.nvidia.com | ||
| uv sync --extra teleop --extra isaacsim |
There was a problem hiding this comment.
Installing teleoperation removes other extras
Unlike the old additive install command, uv sync --extra teleop --extra isaacsim removes packages from other extras the user previously selected. Someone adding teleoperation to an environment with sb3 or rl-games can lose those integrations and break their training workflows.
Add a note to repeat existing compatible extras, as the installation guide already requires.
| uv sync --extra teleop --extra isaacsim | |
| uv sync --extra teleop --extra isaacsim | |
| Repeat any existing compatible ``--extra`` selections in this command; otherwise, | |
| ``uv sync`` removes packages belonging to extras you omit. |
|
run-ci |
…#8389) # Description Before the 3.0 release, the domain owners need to review the "Migrating to 3.0" guide (`docs/source/migration/migrating_to_isaaclab_3-0.rst` and `docs/source/migration/include/*`) one section at a time. This PR assigns each section to likely reviewers and gives each one a concrete check. Reviewers come from `.github/CODEOWNERS` and from `git log` on the source the section describes, counting commits since 2025-10. Names are plain handles with no mentions, so nobody is pinged yet. While preparing the checklist, I compared every Sphinx cross-reference and every `from X import Y` in the guide against the source tree. I fixed the statements that were clearly stale. No other content was rewritten. **Doc fixes in this PR** - Actuator limit aliases: the guide said they stay "through the 3.x release line and will be removed in 3.1". `actuator_base_cfg.py` says they are removed in 3.1, so the guide now says that. - `RayCasterCfg.attach_yaw_only`: the guide called it deprecated, but it was removed (isaaclab CHANGELOG 4.6.11). - `isaaclab.utils.math.convert_quat`: the guide said it was removed. It still exists and is still called by the HDF5 dataset handler and a contrib task, so the guide now says it is no longer needed for Isaac Lab data and is kept for external WXYZ data. - Legacy `write_*_to_sim(data, env_ids)`: the guide said these were removed. They are deprecated forwarders to the `_index` variants. - MJCF importer: `fix_base` and `link_density` came out of the "Removed Settings" list. They were added back to `MjcfConverterCfg` in #5394. - MJCF `collision_type` example: replaced `"default"`, which the `Literal` type does not accept, with values it does accept. - Data Access and Math overview card: `write_root_pose_to_sim_index(pose, env_ids)` became `write_root_pose_to_sim_index(root_pose=pose, env_ids=env_ids)`, since its arguments are keyword-only on every backend. - XR teleop install: `pip install isaacteleop~=1.0 --extra-index-url ...` became `uv sync --extra teleop --extra isaacsim`. The `teleop` extra pins `isaacteleop~=1.4.145`, and uv is the only supported install method. The `skills/user/migrate-2x-to-3x/` skill does not repeat any of these claims, so it needs no change. ## Per-section review checklist Format: `Section — reviewers — check`. "Verified" means the symbol or path was found in `develop`. Each reviewer still needs to run the snippets in a real environment. **Isaac Lab 2.x → 3.0** - [ ] Installation — StafaH, kellyguo11, myurasov-nv — On a fresh checkout, run `uv sync --extra isaacsim` and the `isaaclab train ... physics=isaacsim_physx` command. Confirm that the `isaacsim` / `ovphysx` extras and the `installation-method-uv` reference still match `pyproject.toml`. Verified: `isaaclab.sh` / `isaaclab.bat` are gone. - [ ] Multi-Backend Architecture and Presets (overview, Multi-Backend Architecture, New `isaaclab_physx` / `isaaclab_newton` Extensions, Backend-Neutral Imports, Newton Backend Implementations) — AntoineRichard, ooctipus, StafaH — Run the import snippets under the PhysX, Newton and OVPhysX presets. Confirm the factory still resolves backend classes by module path. Confirm that `SurfaceGripper` is only in `isaaclab_physx`, and that the list of Newton-backed classes is complete (deformables and other sensors). Verified: all referenced classes exist. - [ ] Schema Configuration Class Refactor — vidurv-nvidia, ooctipus, mmichelis — For every row of the deprecated-class → fragment table, construct the deprecated class and compare its warning with the listed replacement set. Confirm that the three `warnings.filterwarnings` regexes still match the emitted messages (they match `schemas_cfg.py` today). Check the removal versions: classes go in 3.2, the `max_effort` / `max_velocity` field aliases in 4.0. The gravcomp note recommends `MujocoRigidBodyPropertiesCfg`, which is itself deprecated; decide whether it should point at `MujocoRigidBodyCfg`. Verified: all fragment classes and `apply_*` writers exist. - [ ] Multi-Backend Support: PresetCfg Pattern — ooctipus, StafaH, AntoineRichard — Run `--task Isaac-Open-Drawer-Franka-Direct physics=newton_mjwarp` and the default launch. Check that the Reach "After" snippet still matches the Reach task source, and that the `MJWarpSolverCfg` parameter table matches the cfg fields. The first `MyPhysicsCfg` snippet uses `PhysxCfg` / `NewtonCfg` without importing them; decide whether to add the imports. Verified: `isaaclab.physics.PhysxAutoCfg` and `isaaclab_tasks.utils.PresetCfg` exist. - [ ] Isaac Sim API Compatibility — kellyguo11, ooctipus, hujc7 — Compare the module rename table with the Isaac Sim 6.1 deprecation list. Run the `enable_extension(...)` + `XformPrim` snippet inside Kit. Verified: every listed `isaaclab.sim.utils.{stage,prims,queries}` function exists, `PhysxManager` / `NewtonManager` are exported, `source/isaaclab/test/deps/isaacsim` is gone, and no `apps/*.kit` contains `extsDeprecated`. - [ ] PhysX Tensors API Module Path — AntoineRichard, ooctipus, kellyguo11 — Confirm on Isaac Sim 6.1 that `omni.physics.tensors.api` exposes the view types. Verified: `source/` no longer imports `omni.physics.tensors.impl`. - [ ] Renaming of `XformPrimView` to `FrameView` — ooctipus, AntoineRichard, StafaH — Confirm that the deprecated `XformPrimView` alias is still exported and warns, and that the `FrameView` factory dispatches to `FabricFrameView` (PhysX) and `NewtonSiteFrameView` (Newton). Verified: all five new classes exist. - [ ] Actuator effort and joint-limit names — ooctipus, StafaH, AntoineRichard — Run an explicit-actuator task and confirm the behaviour change (the solver keeps `joint_effort_limit`). Confirm that the `resolve_joint_parameter(...)` call in the snippet matches its signature. Verified: every read and write target in the removed-group-property table exists, with dynamic friction only on PhysX and OVPhysX. Fixed: removal version. - [ ] Actuator API Moves to `ActuatorCollection` — ooctipus, StafaH, AntoineRichard (LEAPP exception: frlai) — Run the before/after example. Confirm the `set_*_index` / `_mask` setters are keyword-only and that the LEAPP exception still holds. Verified: `target_command`, `computed_effort` and `applied_effort` exist, and `ArticulationData.gear_ratio` is gone. - [ ] RigidObjectCollection API Renaming — AntoineRichard, ooctipus — The rename table and the "After" example point at `write_body_state_to_sim` and similar methods, which are themselves deprecated forwarders in 3.0. Decide whether to point at the `_index` / `_mask` variants instead. Confirm that every listed `object_*` property still forwards. - [ ] Deformable Object API Changes + Migration of Deformables (`include/deformables.rst`) — mmichelis, ooctipus, AntoineRichard — Run `examples/deformables.py` on PhysX and Newton, and the volume before/after snippet. Confirm the removed-property table against `PhysxDeformableBodyPropertiesCfg`. Verified: every listed material and props cfg is exported from `isaaclab_physx.sim` / `isaaclab_newton.sim`, and `linear_damping` / `settling_damping` exist. - [ ] IMU Sensor Renamed to PVA; New Lightweight IMU Sensor — AntoineRichard, ooctipus, StafaH — Check the gravity claims: PVA acceleration excludes gravity and IMU always includes it. Confirm that `ImuData` only exposes `ang_vel_b` / `lin_acc_b`. Verified: `pva_orientation` / `pva_projected_gravity` exist and `gravity_bias` is gone. - [ ] Sensor Pose Properties Deprecation — ooctipus, AntoineRichard — Confirm that `ContactSensorData.pose_w` / `pos_w` / `quat_w` emit a deprecation warning on every backend, and run the `FrameTransformer` replacement snippet. - [ ] Contact force property names — ooctipus, AntoineRichard, yufengsjtu — Check every row of the backend table on PhysX, OVPhysX and Newton: the warn paths and the `NotImplementedError` for `net_friction_forces_w*` on PhysX. Verified: every listed property exists on the base and backend data classes. - [ ] Articulation Joint Wrench Data Moved to `JointWrenchSensor` — ooctipus, AntoineRichard, StafaH — Run both scene snippets. Confirm the body-ordering claim: PhysX includes the root link, Newton reports child bodies only. Verified: `body_incoming_joint_wrench_b` is gone, and `mdp.body_incoming_wrench`, `body_names` and `find_bodies` exist. - [ ] Ray Caster Warp Backend — ooctipus, AntoineRichard, pascal-roth — Run the `RayCasterCfg(ray_alignment="yaw")` snippet. Verified: `env_mask` is the first kernel argument and `RayCaster.meshes` is keyed by `(prim_path, device)`. Fixed: `attach_yaw_only` is removed, not deprecated. - [ ] Quaternion Format / Quaternion Finder Tool / Runtime Quaternion Access Detector / Quaternion Utility API Changes / Quaternion Migration Checklist — AntoineRichard, StafaH — Run `scripts/tools/find_quaternions.py` with every documented flag (`--path`, `--base`, `--check-identity`, `--likely-wxyz`, `--all-quats`, `--fix`, `--fix-identity-only`, `--dry-run`, `--force`) and check the sample output format. Verified: `WARN_ON_TORCH_QUATF_ACCESS` exists in `proxy_array.py`. Fixed: `convert_quat` still exists. - [ ] ProxyArray Backend for Asset and Sensor Data / ProxyArray Interop — AntoineRichard, StafaH, ooctipus — Confirm that the affected-classes table should also list the Newton and OVPhysX sensors. Run the `torch.*` bridge and confirm its one-time `DeprecationWarning`. Verified: the `wp.to_torch` shim, `__torch_function__` and `__cuda_array_interface__` all exist. - [ ] Write Method Index/Mask Split — AntoineRichard — Confirm that every listed `_index` / `_mask` writer exists on Articulation, RigidObject and RigidObjectCollection for every backend. Fixed: the legacy writers are deprecated forwarders, not removed, and the Data Access and Math overview card now uses keyword arguments. - [ ] Timestamped buffers — ooctipus, AntoineRichard — Run the `TimestampedBuffer(wp.zeros(...))` snippet. Verified: `TimestampedBufferWarp` is gone. - [ ] Reinforcement Learning CLI Entrypoints / Unified Checkpoint and Iteration Arguments — StafaH, ooctipus, kellyguo11 (RLinf rows: mingxueg-nv) — Run `isaaclab train` and `isaaclab play` for each of `rsl_rl`, `rl_games`, `skrl`, `sb3` and `rlinf`, plus the `torch.distributed.run` command. Check the `--checkpoint latest|best|pretrained` support matrix and the RLinf `--model_path` / `--checkpoint` semantics. Verified: `scripts/reinforcement_learning/train.py` exists. - [ ] Visualizer CLI and Headless Behavior — matthewtrepte, StafaH, kellyguo11 — Confirm that `--headless` is rejected, then check `HEADLESS=1` with `--viz kit` (plus `--enable_cameras`) and with `--viz newton_gl`, and run `--video viz:kit`. - [ ] Viewport Camera Configuration (`ViewerCfg` deprecated) — matthewtrepte, ooctipus — Confirm the `viewer.*` shim and the `ViewportCameraController` warning. Run the `KitVisualizerCfg(origin_type="asset", origin_track_path=...)` snippet. Check the custom-visualizer `initialize(..., cameras=, stage=)` paragraph against `base_visualizer.py`. Verified: `resolve_camera_sources` and `get_visualized_env_ids` exist. - [ ] Streaming Camera View (`tiled_cam_*` fields removed) — matthewtrepte, ooctipus, pbarejko — Run the `NewtonGLVisualizerCfg(streaming_*)` snippet with a scene-declared camera. Confirm that the removed helpers are gone. Verified: `resolve_streaming_envs` and `Camera.set_world_poses_from_view` exist. - [ ] Newton Visualizer Type Split — matthewtrepte, StafaH — Confirm that `NewtonVisualizerCfg` warns, that `--viz newton` aliases to `newton_gl`, and that `visualizer:newton` / `viz:newton_gl` work as video sources. - [ ] Video Recording (`gym.wrappers.RecordVideo` replaced) — matthewtrepte, ooctipus — Run the `VideoRecorderCfg(source="viz", ...)` snippet. Confirm `eye` / `lookat` were removed and `recording_hooks` is gone. Verified: `SimulationContext.add_render_callback` exists. - [ ] URDF Importer — kellyguo11, stevfeng, ooctipus — With the Isaac Sim 6.1 importer, run `convert_urdf.py` with the documented flags and the Python before/after snippet. Confirm that the deprecated settings warn and that the output path is `{usd_dir}/{robot_name}/{robot_name}.usda`. Verified: the CLI flags exist. - [ ] MJCF Importer — kellyguo11, stevfeng — Run `convert_mjcf.py` with the documented flags and the Python snippet. The Python before/after example still drops `fix_base`, which is now supported again; decide whether to keep it. Fixed: `fix_base` / `link_density` are no longer listed as removed, and `collision_type` examples are valid values. - [ ] Benchmark Workflows — AntoineRichard, StafaH, ooctipus — Run the runtime, training, play and startup commands and `--benchmark_formatter schema,omniperf`. The guide says the "transitional runtime, startup, training, and play scripts were removed", but `scripts/benchmarks/{runtime,startup,training,play}.py` still exist as supported launchers; clarify which scripts are meant. The PhysX micro-benchmarks now live under `source/isaaclab_physx/benchmark/{assets,sensors}/`. Verified: `isaaclab.test.benchmark` is gone and the formatter names match `BenchmarkFormatter`. - [ ] XR Teleoperation: Isaac Capture Integration — rwiltz, hougantc-nvda, kellyguo11 — Run the pipeline-builder snippet against the pinned `isaacteleop~=1.4`. Confirm that the deprecated `isaaclab.devices.openxr` classes warn and that the import-mapping table is still accurate. Fixed: install command. - [ ] Section overview cards (Assets, Actuators, and Sensors / Data Access and Math / Reinforcement Learning / Visualizers, Cameras, and Recording / Tools and Integrations) — ooctipus (Assets), AntoineRichard (Data Access), StafaH (Reinforcement Learning), matthewtrepte (Visualizers), kellyguo11 (Tools) — Check each 2.x/3.0 card against the detailed subsections below it, and run the 3.0 card snippets. - [ ] Getting Help — AntoineRichard, kellyguo11 — Check the links. The CHANGELOG link points at `main`. **Isaac Gym / IsaacGymEnvs (`include/from_isaacgymenvs.rst`, `include/comparing_simulation_isaacgym.rst`)** - [ ] Migration from Isaac Gym and IsaacGymEnvs — StafaH, kellyguo11, ooctipus — Compare the snippets with `source/isaaclab_tasks/isaaclab_tasks/core/cartpole`, then run the training and inference commands. Verified: the referenced classes and the `CARTPOLE_CFG` import exist. - [ ] Comparing Simulations Between Isaac Gym and Isaac Lab — kellyguo11, StafaH — Re-run the OmniPVD recording workflow with `isaaclab benchmark runtime` and the current kit args. **Cross-cutting** - [ ] Agent skills sync — StafaH, AntoineRichard — After the reviews above land, update `skills/user/migrate-2x-to-3x/` and `skills/user/migrate-from-isaac-gym/` to match, since the guide is their source of truth. ## Validation - Clean docs build (`uv run --extra dev make -C docs current-docs`, which runs `sphinx-build -W --keep-going`): succeeded with 0 warnings, and the changed passages render. Sphinx does not run in nitpicky mode, so unresolved `py:` cross-references would not fail this build. The symbol check below covers them. - `pre-commit run --files docs/source/migration/migrating_to_isaaclab_3-0.rst`: all hooks passed. - Static symbol check: a throwaway script, not committed, resolved every `:class:` / `:func:` / `:meth:` / `:attr:` / `:mod:` target and every `from X import Y` in the four migration files against `source/`. The only unresolved targets were intentional 2.x "before" snippets. I also used targeted greps for the CLI flags, file paths and deprecation messages listed above. I did not run any snippet in a simulator. - Docs-only change outside `source/<pkg>/`, so no changelog fragment is needed. ## Type of change - Documentation update ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Checklist - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `uv run isaaclab --format` - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have validated the changed behavior with focused coverage and applied the [test-audit criteria](https://github.com/isaac-sim/IsaacLab/blob/develop/skills/developer/test-audit/SKILL.md) to any test changes - [ ] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (do **not** edit `CHANGELOG.rst` or bump package versions — CI handles that) - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there (cherry picked from commit fa014dc)
|
Backported to |
* Update the cartpole OVRTX goldens for OVRTX 0.5.1 (isaac-sim#8443) # Description Updates the four cartpole OVRTX goldens (`cartpole/{newton,ovphysx}-ovrtx_renderer-{rgb,rgba}.png`) to the CI runner's OVRTX 0.5.1 renders. Since isaac-sim#8350, `rendering-correctness-kitless (legacy)` fails on them deterministically (about 1.95% different pixels against the 1.5% threshold; repeated runs are byte-identical). ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Checklist Docker and GPU tests run on demand. Push the commits you want tested, then comment `run-ci` on the pull request. - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `uv run isaaclab --format` - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have validated the changed behavior with focused coverage and applied the [test-audit criteria](https://github.com/isaac-sim/IsaacLab/blob/develop/skills/developer/test-audit/SKILL.md) to any test changes - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (do **not** edit `CHANGELOG.rst` or bump package versions — CI handles that) - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there * Deprecate legacy deformable cfgs and add OvPhysX fragment support (isaac-sim#8348) # Description Deformable fragment slots now create bodies on OvPhysX. PhysX and OvPhysX use the same OmniPhysics USD authoring for the simulation API, rest state, and bind pose. The legacy deformable cfgs and `define_deformable_body_properties` / `modify_deformable_body_properties` remain functional but warn in 3.1 ahead of removal in 3.2. The affected tutorials, example, and fragment-path tests use the slots. An empty slot creates a body with backend defaults; fragments are needed only for properties being set. The Franka soft and cloth presets retain `deformable_props` during the deprecation period so downstream overrides keep working. The spawner continues to reject configurations that set more than one deformable slot. The legacy OmniPhysics writer and both PhysX managers share one authoring function. No new precedence or adapter path is added. ## Validation - Deprecation tests: 96 passed; deformable fragment tests: 10 passed; backend-split tests: 4 passed. - PhysX mesh spawning: 2 passed; OVPhysX deformables: 20 passed and 1 skipped, with both volume and surface fragment-slot cases passing when the tetrahedralization extra is installed; Newton deformables: 8 passed. - Repository formatting, changelog gate, and a clean Sphinx build with warnings treated as errors passed. - Franka training and tutorial scripts were not run end to end. --------- Co-authored-by: Octi Zhang <zhengyuz@nvidia.com> * [Docs] DOC-007: Migration guide: per-section review owners and checks (isaac-sim#8389) # Description Before the 3.0 release, the domain owners need to review the "Migrating to 3.0" guide (`docs/source/migration/migrating_to_isaaclab_3-0.rst` and `docs/source/migration/include/*`) one section at a time. This PR assigns each section to likely reviewers and gives each one a concrete check. Reviewers come from `.github/CODEOWNERS` and from `git log` on the source the section describes, counting commits since 2025-10. Names are plain handles with no mentions, so nobody is pinged yet. While preparing the checklist, I compared every Sphinx cross-reference and every `from X import Y` in the guide against the source tree. I fixed the statements that were clearly stale. No other content was rewritten. **Doc fixes in this PR** - Actuator limit aliases: the guide said they stay "through the 3.x release line and will be removed in 3.1". `actuator_base_cfg.py` says they are removed in 3.1, so the guide now says that. - `RayCasterCfg.attach_yaw_only`: the guide called it deprecated, but it was removed (isaaclab CHANGELOG 4.6.11). - `isaaclab.utils.math.convert_quat`: the guide said it was removed. It still exists and is still called by the HDF5 dataset handler and a contrib task, so the guide now says it is no longer needed for Isaac Lab data and is kept for external WXYZ data. - Legacy `write_*_to_sim(data, env_ids)`: the guide said these were removed. They are deprecated forwarders to the `_index` variants. - MJCF importer: `fix_base` and `link_density` came out of the "Removed Settings" list. They were added back to `MjcfConverterCfg` in isaac-sim#5394. - MJCF `collision_type` example: replaced `"default"`, which the `Literal` type does not accept, with values it does accept. - Data Access and Math overview card: `write_root_pose_to_sim_index(pose, env_ids)` became `write_root_pose_to_sim_index(root_pose=pose, env_ids=env_ids)`, since its arguments are keyword-only on every backend. - XR teleop install: `pip install isaacteleop~=1.0 --extra-index-url ...` became `uv sync --extra teleop --extra isaacsim`. The `teleop` extra pins `isaacteleop~=1.4.145`, and uv is the only supported install method. The `skills/user/migrate-2x-to-3x/` skill does not repeat any of these claims, so it needs no change. ## Per-section review checklist Format: `Section — reviewers — check`. "Verified" means the symbol or path was found in `develop`. Each reviewer still needs to run the snippets in a real environment. **Isaac Lab 2.x → 3.0** - [ ] Installation — StafaH, kellyguo11, myurasov-nv — On a fresh checkout, run `uv sync --extra isaacsim` and the `isaaclab train ... physics=isaacsim_physx` command. Confirm that the `isaacsim` / `ovphysx` extras and the `installation-method-uv` reference still match `pyproject.toml`. Verified: `isaaclab.sh` / `isaaclab.bat` are gone. - [ ] Multi-Backend Architecture and Presets (overview, Multi-Backend Architecture, New `isaaclab_physx` / `isaaclab_newton` Extensions, Backend-Neutral Imports, Newton Backend Implementations) — AntoineRichard, ooctipus, StafaH — Run the import snippets under the PhysX, Newton and OVPhysX presets. Confirm the factory still resolves backend classes by module path. Confirm that `SurfaceGripper` is only in `isaaclab_physx`, and that the list of Newton-backed classes is complete (deformables and other sensors). Verified: all referenced classes exist. - [ ] Schema Configuration Class Refactor — vidurv-nvidia, ooctipus, mmichelis — For every row of the deprecated-class → fragment table, construct the deprecated class and compare its warning with the listed replacement set. Confirm that the three `warnings.filterwarnings` regexes still match the emitted messages (they match `schemas_cfg.py` today). Check the removal versions: classes go in 3.2, the `max_effort` / `max_velocity` field aliases in 4.0. The gravcomp note recommends `MujocoRigidBodyPropertiesCfg`, which is itself deprecated; decide whether it should point at `MujocoRigidBodyCfg`. Verified: all fragment classes and `apply_*` writers exist. - [ ] Multi-Backend Support: PresetCfg Pattern — ooctipus, StafaH, AntoineRichard — Run `--task Isaac-Open-Drawer-Franka-Direct physics=newton_mjwarp` and the default launch. Check that the Reach "After" snippet still matches the Reach task source, and that the `MJWarpSolverCfg` parameter table matches the cfg fields. The first `MyPhysicsCfg` snippet uses `PhysxCfg` / `NewtonCfg` without importing them; decide whether to add the imports. Verified: `isaaclab.physics.PhysxAutoCfg` and `isaaclab_tasks.utils.PresetCfg` exist. - [ ] Isaac Sim API Compatibility — kellyguo11, ooctipus, hujc7 — Compare the module rename table with the Isaac Sim 6.1 deprecation list. Run the `enable_extension(...)` + `XformPrim` snippet inside Kit. Verified: every listed `isaaclab.sim.utils.{stage,prims,queries}` function exists, `PhysxManager` / `NewtonManager` are exported, `source/isaaclab/test/deps/isaacsim` is gone, and no `apps/*.kit` contains `extsDeprecated`. - [ ] PhysX Tensors API Module Path — AntoineRichard, ooctipus, kellyguo11 — Confirm on Isaac Sim 6.1 that `omni.physics.tensors.api` exposes the view types. Verified: `source/` no longer imports `omni.physics.tensors.impl`. - [ ] Renaming of `XformPrimView` to `FrameView` — ooctipus, AntoineRichard, StafaH — Confirm that the deprecated `XformPrimView` alias is still exported and warns, and that the `FrameView` factory dispatches to `FabricFrameView` (PhysX) and `NewtonSiteFrameView` (Newton). Verified: all five new classes exist. - [ ] Actuator effort and joint-limit names — ooctipus, StafaH, AntoineRichard — Run an explicit-actuator task and confirm the behaviour change (the solver keeps `joint_effort_limit`). Confirm that the `resolve_joint_parameter(...)` call in the snippet matches its signature. Verified: every read and write target in the removed-group-property table exists, with dynamic friction only on PhysX and OVPhysX. Fixed: removal version. - [ ] Actuator API Moves to `ActuatorCollection` — ooctipus, StafaH, AntoineRichard (LEAPP exception: frlai) — Run the before/after example. Confirm the `set_*_index` / `_mask` setters are keyword-only and that the LEAPP exception still holds. Verified: `target_command`, `computed_effort` and `applied_effort` exist, and `ArticulationData.gear_ratio` is gone. - [ ] RigidObjectCollection API Renaming — AntoineRichard, ooctipus — The rename table and the "After" example point at `write_body_state_to_sim` and similar methods, which are themselves deprecated forwarders in 3.0. Decide whether to point at the `_index` / `_mask` variants instead. Confirm that every listed `object_*` property still forwards. - [ ] Deformable Object API Changes + Migration of Deformables (`include/deformables.rst`) — mmichelis, ooctipus, AntoineRichard — Run `examples/deformables.py` on PhysX and Newton, and the volume before/after snippet. Confirm the removed-property table against `PhysxDeformableBodyPropertiesCfg`. Verified: every listed material and props cfg is exported from `isaaclab_physx.sim` / `isaaclab_newton.sim`, and `linear_damping` / `settling_damping` exist. - [ ] IMU Sensor Renamed to PVA; New Lightweight IMU Sensor — AntoineRichard, ooctipus, StafaH — Check the gravity claims: PVA acceleration excludes gravity and IMU always includes it. Confirm that `ImuData` only exposes `ang_vel_b` / `lin_acc_b`. Verified: `pva_orientation` / `pva_projected_gravity` exist and `gravity_bias` is gone. - [ ] Sensor Pose Properties Deprecation — ooctipus, AntoineRichard — Confirm that `ContactSensorData.pose_w` / `pos_w` / `quat_w` emit a deprecation warning on every backend, and run the `FrameTransformer` replacement snippet. - [ ] Contact force property names — ooctipus, AntoineRichard, yufengsjtu — Check every row of the backend table on PhysX, OVPhysX and Newton: the warn paths and the `NotImplementedError` for `net_friction_forces_w*` on PhysX. Verified: every listed property exists on the base and backend data classes. - [ ] Articulation Joint Wrench Data Moved to `JointWrenchSensor` — ooctipus, AntoineRichard, StafaH — Run both scene snippets. Confirm the body-ordering claim: PhysX includes the root link, Newton reports child bodies only. Verified: `body_incoming_joint_wrench_b` is gone, and `mdp.body_incoming_wrench`, `body_names` and `find_bodies` exist. - [ ] Ray Caster Warp Backend — ooctipus, AntoineRichard, pascal-roth — Run the `RayCasterCfg(ray_alignment="yaw")` snippet. Verified: `env_mask` is the first kernel argument and `RayCaster.meshes` is keyed by `(prim_path, device)`. Fixed: `attach_yaw_only` is removed, not deprecated. - [ ] Quaternion Format / Quaternion Finder Tool / Runtime Quaternion Access Detector / Quaternion Utility API Changes / Quaternion Migration Checklist — AntoineRichard, StafaH — Run `scripts/tools/find_quaternions.py` with every documented flag (`--path`, `--base`, `--check-identity`, `--likely-wxyz`, `--all-quats`, `--fix`, `--fix-identity-only`, `--dry-run`, `--force`) and check the sample output format. Verified: `WARN_ON_TORCH_QUATF_ACCESS` exists in `proxy_array.py`. Fixed: `convert_quat` still exists. - [ ] ProxyArray Backend for Asset and Sensor Data / ProxyArray Interop — AntoineRichard, StafaH, ooctipus — Confirm that the affected-classes table should also list the Newton and OVPhysX sensors. Run the `torch.*` bridge and confirm its one-time `DeprecationWarning`. Verified: the `wp.to_torch` shim, `__torch_function__` and `__cuda_array_interface__` all exist. - [ ] Write Method Index/Mask Split — AntoineRichard — Confirm that every listed `_index` / `_mask` writer exists on Articulation, RigidObject and RigidObjectCollection for every backend. Fixed: the legacy writers are deprecated forwarders, not removed, and the Data Access and Math overview card now uses keyword arguments. - [ ] Timestamped buffers — ooctipus, AntoineRichard — Run the `TimestampedBuffer(wp.zeros(...))` snippet. Verified: `TimestampedBufferWarp` is gone. - [ ] Reinforcement Learning CLI Entrypoints / Unified Checkpoint and Iteration Arguments — StafaH, ooctipus, kellyguo11 (RLinf rows: mingxueg-nv) — Run `isaaclab train` and `isaaclab play` for each of `rsl_rl`, `rl_games`, `skrl`, `sb3` and `rlinf`, plus the `torch.distributed.run` command. Check the `--checkpoint latest|best|pretrained` support matrix and the RLinf `--model_path` / `--checkpoint` semantics. Verified: `scripts/reinforcement_learning/train.py` exists. - [ ] Visualizer CLI and Headless Behavior — matthewtrepte, StafaH, kellyguo11 — Confirm that `--headless` is rejected, then check `HEADLESS=1` with `--viz kit` (plus `--enable_cameras`) and with `--viz newton_gl`, and run `--video viz:kit`. - [ ] Viewport Camera Configuration (`ViewerCfg` deprecated) — matthewtrepte, ooctipus — Confirm the `viewer.*` shim and the `ViewportCameraController` warning. Run the `KitVisualizerCfg(origin_type="asset", origin_track_path=...)` snippet. Check the custom-visualizer `initialize(..., cameras=, stage=)` paragraph against `base_visualizer.py`. Verified: `resolve_camera_sources` and `get_visualized_env_ids` exist. - [ ] Streaming Camera View (`tiled_cam_*` fields removed) — matthewtrepte, ooctipus, pbarejko — Run the `NewtonGLVisualizerCfg(streaming_*)` snippet with a scene-declared camera. Confirm that the removed helpers are gone. Verified: `resolve_streaming_envs` and `Camera.set_world_poses_from_view` exist. - [ ] Newton Visualizer Type Split — matthewtrepte, StafaH — Confirm that `NewtonVisualizerCfg` warns, that `--viz newton` aliases to `newton_gl`, and that `visualizer:newton` / `viz:newton_gl` work as video sources. - [ ] Video Recording (`gym.wrappers.RecordVideo` replaced) — matthewtrepte, ooctipus — Run the `VideoRecorderCfg(source="viz", ...)` snippet. Confirm `eye` / `lookat` were removed and `recording_hooks` is gone. Verified: `SimulationContext.add_render_callback` exists. - [ ] URDF Importer — kellyguo11, stevfeng, ooctipus — With the Isaac Sim 6.1 importer, run `convert_urdf.py` with the documented flags and the Python before/after snippet. Confirm that the deprecated settings warn and that the output path is `{usd_dir}/{robot_name}/{robot_name}.usda`. Verified: the CLI flags exist. - [ ] MJCF Importer — kellyguo11, stevfeng — Run `convert_mjcf.py` with the documented flags and the Python snippet. The Python before/after example still drops `fix_base`, which is now supported again; decide whether to keep it. Fixed: `fix_base` / `link_density` are no longer listed as removed, and `collision_type` examples are valid values. - [ ] Benchmark Workflows — AntoineRichard, StafaH, ooctipus — Run the runtime, training, play and startup commands and `--benchmark_formatter schema,omniperf`. The guide says the "transitional runtime, startup, training, and play scripts were removed", but `scripts/benchmarks/{runtime,startup,training,play}.py` still exist as supported launchers; clarify which scripts are meant. The PhysX micro-benchmarks now live under `source/isaaclab_physx/benchmark/{assets,sensors}/`. Verified: `isaaclab.test.benchmark` is gone and the formatter names match `BenchmarkFormatter`. - [ ] XR Teleoperation: Isaac Capture Integration — rwiltz, hougantc-nvda, kellyguo11 — Run the pipeline-builder snippet against the pinned `isaacteleop~=1.4`. Confirm that the deprecated `isaaclab.devices.openxr` classes warn and that the import-mapping table is still accurate. Fixed: install command. - [ ] Section overview cards (Assets, Actuators, and Sensors / Data Access and Math / Reinforcement Learning / Visualizers, Cameras, and Recording / Tools and Integrations) — ooctipus (Assets), AntoineRichard (Data Access), StafaH (Reinforcement Learning), matthewtrepte (Visualizers), kellyguo11 (Tools) — Check each 2.x/3.0 card against the detailed subsections below it, and run the 3.0 card snippets. - [ ] Getting Help — AntoineRichard, kellyguo11 — Check the links. The CHANGELOG link points at `main`. **Isaac Gym / IsaacGymEnvs (`include/from_isaacgymenvs.rst`, `include/comparing_simulation_isaacgym.rst`)** - [ ] Migration from Isaac Gym and IsaacGymEnvs — StafaH, kellyguo11, ooctipus — Compare the snippets with `source/isaaclab_tasks/isaaclab_tasks/core/cartpole`, then run the training and inference commands. Verified: the referenced classes and the `CARTPOLE_CFG` import exist. - [ ] Comparing Simulations Between Isaac Gym and Isaac Lab — kellyguo11, StafaH — Re-run the OmniPVD recording workflow with `isaaclab benchmark runtime` and the current kit args. **Cross-cutting** - [ ] Agent skills sync — StafaH, AntoineRichard — After the reviews above land, update `skills/user/migrate-2x-to-3x/` and `skills/user/migrate-from-isaac-gym/` to match, since the guide is their source of truth. ## Validation - Clean docs build (`uv run --extra dev make -C docs current-docs`, which runs `sphinx-build -W --keep-going`): succeeded with 0 warnings, and the changed passages render. Sphinx does not run in nitpicky mode, so unresolved `py:` cross-references would not fail this build. The symbol check below covers them. - `pre-commit run --files docs/source/migration/migrating_to_isaaclab_3-0.rst`: all hooks passed. - Static symbol check: a throwaway script, not committed, resolved every `:class:` / `:func:` / `:meth:` / `:attr:` / `:mod:` target and every `from X import Y` in the four migration files against `source/`. The only unresolved targets were intentional 2.x "before" snippets. I also used targeted greps for the CLI flags, file paths and deprecation messages listed above. I did not run any snippet in a simulator. - Docs-only change outside `source/<pkg>/`, so no changelog fragment is needed. ## Type of change - Documentation update ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Checklist - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `uv run isaaclab --format` - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have validated the changed behavior with focused coverage and applied the [test-audit criteria](https://github.com/isaac-sim/IsaacLab/blob/develop/skills/developer/test-audit/SKILL.md) to any test changes - [ ] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (do **not** edit `CHANGELOG.rst` or bump package versions — CI handles that) - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there * [6Aiii] Use native Newton RTX with a borrowed scene stage (isaac-sim#8303) # Description Newton RTX now uses native `ViewerRTX(ovstage=...)` with a simulation-owned scene stage instead of rebuilding viewer USD from the Newton model. Authored lighting, materials, and clone placements reach the viewer directly; Newton retains its window, perspective camera, and debug markers. OVStage and OVRTX share private copy batching that omits children already supplied by their parent. GL and RTX share camera selection and model-reset code. Contact rendering uses the sensor interface directly; selected PhysX environments retain the correct body-pose ordering. Marker inputs normalize directly to the simulation device, including host arrays and partial prototype-index updates. Window defaults merge per field without sharing mutable state. Newton and Kit use shared `WindowCfg(size=...)`; Newton windows use a wall-clock `fps` limit (30 by default) instead of skipping simulation frames. Scene-camera images stay on the GPU for display, and window resizing scales fixed-resolution images without resizing sensors. Backend construction stays inside the visualizer, using the simulation owner passed to `initialize(sim, cameras=...)`. This is **PR6Aiii**. Shared `ImageViewCfg`, window/recorder frame caching, and removal of duplicate CPU composition are split into **PR6Aiv (isaac-sim#8432)**. Follows merged isaac-sim#8103, isaac-sim#8319, and isaac-sim#8381; incorporates isaac-sim#8221 without isaac-sim#8232. **Migration:** Use Camera View instead of Open/Hide. Remove RTX `rtx_environment`, `world_spacing`, and GL model options; author lights and placement in the scene. Use GL for dragging and model overlays. Custom visualizers must adopt `initialize(sim, cameras=...)`. Move `window_width`/`window_height` to `window=WindowCfg(size=(width, height))`, replace Newton `update_frequency` with `window.fps`, and use `render_tiled_rgba_array()` for GPU images. Runtime material randomization is not yet propagated to the borrowed stage. ## Validation The review cleanup passed 121 tests on GPU0, including the full marker suite and native RTX motion/pause/marker integration; the two lighting cases below remain skipped. The extended existing tests reproduced the window aliasing, partial-default inheritance, and marker-device bugs before their fixes. The RTX media configuration now constructs successfully. Formatting/lint and changelog checks passed; full CI is being rerun. Startup to the first rendered image, in seconds: **baseline → combined implementation**, measured at preserved revision `00adda3a9` against `a3acc244d` before this split. These measurements include the shared-view follow-up and are not a new measurement of the isolated PR6Aiii branch. Every case includes the **Newton RTX viewer** at 640×480; RGB adds one 64×64 OVRTX sensor per environment. Timings include process launch, physics, scene, and viewer setup. | Task / physics | Sensor cameras | 1,024 environments | 4,096 environments | |---|---|---:|---:| | ANYmal rough / Newton MJWarp | None | 55.8 → **28.4** | 251.8 → **29.3** | | ANYmal rough / Newton MJWarp | RGB | 60.1 → **32.5** | 258.7 → **44.1** | | ANYmal rough / OVPhysX | None | 64.7 → **38.8** | 294.1 → **70.7** | | ANYmal rough / OVPhysX | RGB | 74.7 → **38.4** | 302.3 → **92.6** | | Kuka–Allegro lift / Newton MJWarp | None | 46.1 → **17.3** | RAM limit → **28.9** | | Kuka–Allegro lift / Newton MJWarp | RGB | 45.2 → **21.9** | RAM limit → **42.1** | | Kuka–Allegro lift / OVPhysX | None | 102.1 → **71.6** | RAM limit → **121.9** | | Kuka–Allegro lift / OVPhysX | RGB | 101.4 → **78.3** | RAM limit → **141.5** | Single runs with warmed caches and identical dependencies on an RTX 5090, GPU0 only. All 16 PR cases passed image validation and three rollout steps. Four 4,096-environment Kuka baselines exceeded available host RAM; these have no valid timing and need a repeat after memory is freed. The other 12 baselines passed. [Benchmark setup](isaac-sim#8303 (comment)). ## Temporary test skip and follow-up The two lighting/lifetime cases using an OVRTX sensor are temporarily skipped because the sensor and native viewer create separate OVRTX renderers; the second can stall when the first has loaded a scene but never rendered. The two Warp-sensor cases remain enabled and passed on GPU0 (2 passed, 2 skipped in 18 seconds). This skips affected coverage; it does not fix the runtime stall. Re-enable those cases after [Newton isaac-sim#4627](newton-physics/newton#4627) merges and Isaac Lab adopts its shared-renderer API. The test body and its ownership, lighting, and sensor-buffer assertions remain intact. The shared-renderer integration will also address stale deformable geometry, pose-offset inference on hard reset, and unnecessary perspective-scene construction for sensor-only windows. These are confirmed limitations of the current separate-stage path, not fixed by this cleanup. GL sensor navigation still reads input one frame late. Fixing that requires an input-update phase before image composition in Newton; the current code does not add a second input pump. ## Type of change - New feature - Breaking change - Bug fix - Documentation update ## Release backport - [ ] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Checklist - [x] Read the contribution guidelines - [x] Ran formatting/lint and changelog checks - [x] Updated documentation and migration guidance - [x] Validated the split with existing focused tests - [x] Added package changelog fragments - [x] Contributor already listed - [x] Clean local documentation build - [ ] Pass GPU CI * [Tests] Serialize flaky Kit lifecycle tests in CI (isaac-sim#8447) # Description Two independent Kit lifecycle operations deadlocked in the same CI run for isaac-sim#8443: - the Spot LEAPP export wrote and validated its artifacts, cleared `SimulationContext`, and then timed out in native Kit shutdown; - the Galbot suction RMPFlow case timed out while synchronously enabling `isaacsim.robot.surface_gripper` during the PhysX reset callback. Both files were running alongside several independent Kit processes through the package scheduler. Keep their behavioral coverage, but run each file alone and run the LEAPP cases serially. This avoids concurrent native extension loading and shutdown without skipping tests or increasing their timeout. Failed jobs: - https://github.com/isaac-sim/IsaacLab/actions/runs/38010614299/job/114089646270 - https://github.com/isaac-sim/IsaacLab/actions/runs/38010614299/job/114089646003 This branch is rebased onto isaac-sim#8443 after it merged. ## Validation - [Final `Docker + Tests` workflow](https://github.com/isaac-sim/IsaacLab/actions/runs/38016776634): passed - [`isaaclab_tasks [3/3]`](https://github.com/isaac-sim/IsaacLab/actions/runs/38016776634/job/114109605708): passed, including all four RMPFlow cases - [`isaaclab_rl`](https://github.com/isaac-sim/IsaacLab/actions/runs/38016776634/job/114109605911): passed; LEAPP export flow had 17 passed and 1 unavailable-checkpoint skip, including the Spot case - [`rendering-correctness-kitless (legacy)`](https://github.com/isaac-sim/IsaacLab/actions/runs/38016776634/job/114109605883): passed with the merged isaac-sim#8443 goldens - All PR checks passed: 49 successful and 11 intentionally skipped - `PYTHONPATH=tools:source/isaaclab uv run pytest --noconftest tools/test_file_scheduler.py -q` (9 passed) - `ISAACLAB_CHANGELOG_BASE_REF=upstream/develop uv run isaaclab -f` - `uv run python tools/changelog/cli.py check upstream/develop --include-worktree` ### CI timing impact Both measurements used the `Docker + Tests` workflow on `cuda:0`, the same 18-case LEAPP suite (17 passed, 1 unavailable-checkpoint skip), its declared mix of default PhysX, Newton MJWarp, Isaac Sim PhysX, and OvPhysX presets, and the same restored Warp cache key (387 MB restored, 578 MB final). The runners differed, so the comparison is directional rather than a hardware-normalized benchmark. | | Parallel baseline | Serial candidate | | --- | ---: | ---: | | Revision | isaac-sim#8443 `976de17` | isaac-sim#8447 `fc66fed` | | Runner | `g6e.4xlarge` | `g7.4xlarge` | | Full `isaaclab_rl` job | 13m 52s | 19m 20s | | LEAPP file wall time | 388.63s | 1051.96s | The candidate adds about five and a half minutes to the full RL job while keeping it far below the workflow budget. (`d6372b0`, the next isaac-sim#8443 revision, changed only changelog-fragment text.) ## Type of change - Bug fix (CI / test infrastructure) ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## 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 `uv run isaaclab --format` - [x] Documentation changes are not required for this CI-only change - [x] My changes generate no new warnings - [x] I have validated the changed behavior with focused coverage and applied the [test-audit criteria](https://github.com/isaac-sim/IsaacLab/blob/develop/skills/developer/test-audit/SKILL.md) - [x] No source package is touched, so no package changelog fragment is required - [x] My name already exists in `CONTRIBUTORS.md` * Add mesh_collision_props slot to all rigid-object spawners (isaac-sim#8349) # Description Adds the `mesh_collision_props` fragment slot to every rigid-object spawner: the USD, URDF and MJCF file spawners, the shape spawners and the mesh spawners. Several deprecation messages already pointed users at "the spawner's `mesh_collision_props` slot", but only `MeshFileCfg` had it. This makes that guidance true and migrates the last in-repo users of the deprecated mesh-collision cfgs. **The slot** - Lives on `RigidObjectSpawnerCfg`. It accepts a `{pattern: fragments}` mapping, a bare fragment, or a list. - Applies only to matched prims that already carry `UsdPhysics.CollisionAPI`. It never creates a collider, and a pattern that matches none logs a warning. - Default target: - File spawners use `"(/.*)?"`, meaning every collider under the spawn prim. That matches the reach of the legacy nested `mesh_collision_property`, so migrating authors identical USD. - Shape and mesh spawners target their geometry prim. On mesh spawners the slot overrides the built-in default approximation. - Legacy `MeshCollisionBaseCfg` / `*PropertiesCfg` values are still accepted in the slot. They are routed through the deprecated writer and warn as before. - Setting it together with any deformable setting raises `ValueError`, on the mesh spawners and on the USD/URDF/MJCF file spawners. - `MeshFileCfg` keeps its existing narrower override, which takes a bare fragment or a list but not the `{pattern: fragments}` mapping. It anchors at each converted mesh prim, which is a single collider, so a mapping would add nothing. **Deprecation guidance and docs** - The Newton mesh/SDF collision warnings now say which fragments go in `collision_props` and which in `mesh_collision_props`. - The `NewtonSDFCollisionCfg` docstring said it authors an approximation token. It doesn't, and neither did the legacy class: Newton enables SDF from `NewtonSDFCollisionAPI` itself. - The schema-fragments concept page and the migration guide are updated. **nist Factory** (`factory_assets_cfg.py`): the robot, socket and plug presets move to `collision_props` + `mesh_collision_props` fragments, with all-`None` fragments dropped. The PhysX presets are unchanged. **Implementation:** The spawner selects existing colliders with the public prim matcher and calls the existing single-prim mesh-collision writer. Coverage is folded into the existing file, shape, mesh, and deformable suites; the two standalone test files and duplicate changelog entry were removed. ## Verification - **Parity on the real assets** (franka_mimic, bolt_m16, nut_m16; schemas, every attribute and relationship): legacy and migrated are identical. All 7 negative controls are flagged. - **Through the gym entry point:** `IsaacContrib-Factory-Franka` cfgs for the default, physx, isaacsim_physx and newton_mjwarp presets were spawned and compared against develop. All 12 are identical, and the branch emits no legacy deprecation warnings. - **Newton runtime:** the Factory task steps 20 times on newton_mjwarp with finite rewards. - **Sphere collider:** the legacy path also applies `PhysicsMeshCollisionAPI` to the franka force-sensor Sphere collider. The slot reproduces this so that migration stays USD-identical. Newton models built with and without it are identical, so it is inert. - **After rebasing:** 116 kitless routing, Factory parity, schema-fragment parity, and deprecation checks passed. The repository formatting and changelog hooks passed. Kit integration checks are pending CI. ## Type of change - New feature (non-breaking change which adds functionality) ## Checklist - [x] I have read and understood the contribution guidelines - [x] I have run the `pre-commit` checks - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there --------- Co-authored-by: Octi Zhang <zhengyuz@nvidia.com> * Fix convert_instanceable mesh path and migrate schema docs to fragments (isaac-sim#8353) # Description The schema-fragment migration left `convert_instanceable.py` passing the removed `collision_approximation` argument to `MeshConverterCfg`, so converting a mesh raised `TypeError`. The script now passes a `UsdPhysicsMeshCollisionCfg` fragment, or `None` when collisions are disabled. `MujocoJointCfg(actuatorgravcomp=True)` also overwrote an explicitly authored body `mjc:gravcomp=0.0`. It now supplies `1.0` only when that attribute has no authored value. The existing joint-drive test covers both `0.0` and a nonzero authored value. The affected guides and Newton asset skill now use the fragment API, with the legacy schema page labeled as deprecated. The Cartpole example edits its existing Newton articulation fragment instead of adding a duplicate. Deprecated PhysX schema docstrings now agree with their 3.2 removal warnings. # Validation - Repository formatter and pre-commit checks passed (`uv run isaaclab -f`). - Skill validation passed (`tools/skills/cli.py check`). - A Kitless USD probe passed for unset, `0.0`, and `0.5` body gravcomp; converter configuration and the Cartpole example instantiated successfully. - The integration test could not run locally because Isaac Sim/Kit is unavailable in this environment. Sphinx is also unavailable locally; the documentation build remains for CI. --------- Co-authored-by: Octi Zhang <zhengyuz@nvidia.com> * [CI][Auto Version Bump] Compile changelog fragments (schedule) Bumped packages: - isaaclab: 35.2.0 → 36.0.0 - isaaclab_experimental: 0.2.6 → 0.2.7 - isaaclab_mimic: 2.1.2 → 2.1.3 - isaaclab_newton: 9.1.5 → 9.2.0 - isaaclab_ov: 4.1.3 → 5.0.0 - isaaclab_physx: 7.4.4 → 7.5.0 - isaaclab_rl: 4.0.1 → 5.0.0 - isaaclab_tasks: 25.0.1 → 25.0.2 - isaaclab_tasks_experimental: 1.0.0 → 1.0.1 - isaaclab_teleop: 0.10.2 → 0.10.3 - isaaclab_visualizers: 2.0.2 → 3.0.0 * Fix unintended stacking cubes in Agibot place scenes (isaac-sim#8454) # Description Agibot Toy2Box and upright mug place tasks reused the stacking `ObjectTableSceneCfg`. When that shared scene gained three default stacking cubes, both place tasks also began spawning and resetting those unrelated rigid bodies. Introduce a dedicated `AgibotPlaceSceneCfg` with the robot, end-effector sensor, task-supplied table, ground plane, and lighting. Toy2Box now contains only the toy truck and box; upright mug contains only the mug. Their existing table geometry and poses are preserved. Both Agibot Mimic variants inherit the corrected scene. Audited all five registered Galbot tasks: they are stacking tasks that explicitly configure and use all three cubes, so they require no change. The regression checks assert the place tasks' configured rigid objects. Both cases fail on the original code because of `cube_1`, `cube_2`, and `cube_3`, and pass with the dedicated scene. This removes the unintended cubes involved in the reported reset issue; it does not claim to fix a general PhysX collision defect. ## Validation - `uv run --no-sync python -m pytest source/isaaclab_tasks/test/contrib/test_agibot_place_env_cfg.py -q`: 5 passed. The two added cases failed on the original implementation for the expected extra cubes. - Instantiated and validated both registered Agibot tasks, all five registered Galbot tasks, and both Agibot Mimic configs after resolving presets. - `uv run --no-sync isaaclab -f`: passed all repository formatting and lint hooks. - `uv run --no-sync python tools/changelog/cli.py check develop --include-worktree`: passed. - `git diff --cached --check`: passed. Full Kit simulation was not completed: first launch requested acceptance of the NVIDIA Omniverse EULA. The requested QA branch currently pins Isaac Sim 6.1.0.0, whereas the report names 6.2 rc9; its Kit asset root points at 6.2. The full teleop extra also failed while compiling `imgui` 2.0.0 on Python 3.12. Configuration validation used the local `isaaclab_teleop` package without the optional XR/UI dependencies. ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Checklist - [x] I have read and understood the contribution guidelines. - [x] I have run the pre-commit checks with `uv run isaaclab --format` (using `--no-sync` to preserve the validated environment). - [x] I have validated the changed behavior with focused coverage and applied the test-audit criteria. - [x] I have added a changelog fragment for the touched package. - [x] My name already exists in `CONTRIBUTORS.md`. - [ ] Full Isaac Sim 6.2 rc9 visual/reset reproduction. --------- Co-authored-by: Ege Sekkin <72572910+nvsekkin@users.noreply.github.com> Co-authored-by: vidurv-nvidia <vidurv@nvidia.com> Co-authored-by: Octi Zhang <zhengyuz@nvidia.com> Co-authored-by: Antoine RICHARD <antoiner@nvidia.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: Rebecca Zhang <168459200+rebeccazhang0707@users.noreply.github.com>
Description
Before the 3.0 release, the domain owners need to review the "Migrating to 3.0" guide (
docs/source/migration/migrating_to_isaaclab_3-0.rstanddocs/source/migration/include/*) one section at a time. This PR assigns each section to likely reviewers and gives each one a concrete check. Reviewers come from.github/CODEOWNERSand fromgit logon the source the section describes, counting commits since 2025-10. Names are plain handles with no mentions, so nobody is pinged yet.While preparing the checklist, I compared every Sphinx cross-reference and every
from X import Yin the guide against the source tree. I fixed the statements that were clearly stale. No other content was rewritten.Doc fixes in this PR
actuator_base_cfg.pysays they are removed in 3.1, so the guide now says that.RayCasterCfg.attach_yaw_only: the guide called it deprecated, but it was removed (isaaclab CHANGELOG 4.6.11).isaaclab.utils.math.convert_quat: the guide said it was removed. It still exists and is still called by the HDF5 dataset handler and a contrib task, so the guide now says it is no longer needed for Isaac Lab data and is kept for external WXYZ data.write_*_to_sim(data, env_ids): the guide said these were removed. They are deprecated forwarders to the_indexvariants.fix_baseandlink_densitycame out of the "Removed Settings" list. They were added back toMjcfConverterCfgin Updates URDF/MJCF importer to use the latest Isaac Sim importer #5394.collision_typeexample: replaced"default", which theLiteraltype does not accept, with values it does accept.write_root_pose_to_sim_index(pose, env_ids)becamewrite_root_pose_to_sim_index(root_pose=pose, env_ids=env_ids), since its arguments are keyword-only on every backend.pip install isaacteleop~=1.0 --extra-index-url ...becameuv sync --extra teleop --extra isaacsim. Theteleopextra pinsisaacteleop~=1.4.145, and uv is the only supported install method.The
skills/user/migrate-2x-to-3x/skill does not repeat any of these claims, so it needs no change.Per-section review checklist
Format:
Section — reviewers — check. "Verified" means the symbol or path was found indevelop. Each reviewer still needs to run the snippets in a real environment.Isaac Lab 2.x → 3.0
uv sync --extra isaacsimand theisaaclab train ... physics=isaacsim_physxcommand. Confirm that theisaacsim/ovphysxextras and theinstallation-method-uvreference still matchpyproject.toml. Verified:isaaclab.sh/isaaclab.batare gone.isaaclab_physx/isaaclab_newtonExtensions, Backend-Neutral Imports, Newton Backend Implementations) — AntoineRichard, ooctipus, StafaH — Run the import snippets under the PhysX, Newton and OVPhysX presets. Confirm the factory still resolves backend classes by module path. Confirm thatSurfaceGripperis only inisaaclab_physx, and that the list of Newton-backed classes is complete (deformables and other sensors). Verified: all referenced classes exist.warnings.filterwarningsregexes still match the emitted messages (they matchschemas_cfg.pytoday). Check the removal versions: classes go in 3.2, themax_effort/max_velocityfield aliases in 4.0. The gravcomp note recommendsMujocoRigidBodyPropertiesCfg, which is itself deprecated; decide whether it should point atMujocoRigidBodyCfg. Verified: all fragment classes andapply_*writers exist.--task Isaac-Open-Drawer-Franka-Direct physics=newton_mjwarpand the default launch. Check that the Reach "After" snippet still matches the Reach task source, and that theMJWarpSolverCfgparameter table matches the cfg fields. The firstMyPhysicsCfgsnippet usesPhysxCfg/NewtonCfgwithout importing them; decide whether to add the imports. Verified:isaaclab.physics.PhysxAutoCfgandisaaclab_tasks.utils.PresetCfgexist.enable_extension(...)+XformPrimsnippet inside Kit. Verified: every listedisaaclab.sim.utils.{stage,prims,queries}function exists,PhysxManager/NewtonManagerare exported,source/isaaclab/test/deps/isaacsimis gone, and noapps/*.kitcontainsextsDeprecated.omni.physics.tensors.apiexposes the view types. Verified:source/no longer importsomni.physics.tensors.impl.XformPrimViewtoFrameView— ooctipus, AntoineRichard, StafaH — Confirm that the deprecatedXformPrimViewalias is still exported and warns, and that theFrameViewfactory dispatches toFabricFrameView(PhysX) andNewtonSiteFrameView(Newton). Verified: all five new classes exist.joint_effort_limit). Confirm that theresolve_joint_parameter(...)call in the snippet matches its signature. Verified: every read and write target in the removed-group-property table exists, with dynamic friction only on PhysX and OVPhysX. Fixed: removal version.ActuatorCollection— ooctipus, StafaH, AntoineRichard (LEAPP exception: frlai) — Run the before/after example. Confirm theset_*_index/_masksetters are keyword-only and that the LEAPP exception still holds. Verified:target_command,computed_effortandapplied_effortexist, andArticulationData.gear_ratiois gone.write_body_state_to_simand similar methods, which are themselves deprecated forwarders in 3.0. Decide whether to point at the_index/_maskvariants instead. Confirm that every listedobject_*property still forwards.include/deformables.rst) — mmichelis, ooctipus, AntoineRichard — Runexamples/deformables.pyon PhysX and Newton, and the volume before/after snippet. Confirm the removed-property table againstPhysxDeformableBodyPropertiesCfg. Verified: every listed material and props cfg is exported fromisaaclab_physx.sim/isaaclab_newton.sim, andlinear_damping/settling_dampingexist.ImuDataonly exposesang_vel_b/lin_acc_b. Verified:pva_orientation/pva_projected_gravityexist andgravity_biasis gone.ContactSensorData.pose_w/pos_w/quat_wemit a deprecation warning on every backend, and run theFrameTransformerreplacement snippet.NotImplementedErrorfornet_friction_forces_w*on PhysX. Verified: every listed property exists on the base and backend data classes.JointWrenchSensor— ooctipus, AntoineRichard, StafaH — Run both scene snippets. Confirm the body-ordering claim: PhysX includes the root link, Newton reports child bodies only. Verified:body_incoming_joint_wrench_bis gone, andmdp.body_incoming_wrench,body_namesandfind_bodiesexist.RayCasterCfg(ray_alignment="yaw")snippet. Verified:env_maskis the first kernel argument andRayCaster.meshesis keyed by(prim_path, device). Fixed:attach_yaw_onlyis removed, not deprecated.scripts/tools/find_quaternions.pywith every documented flag (--path,--base,--check-identity,--likely-wxyz,--all-quats,--fix,--fix-identity-only,--dry-run,--force) and check the sample output format. Verified:WARN_ON_TORCH_QUATF_ACCESSexists inproxy_array.py. Fixed:convert_quatstill exists.torch.*bridge and confirm its one-timeDeprecationWarning. Verified: thewp.to_torchshim,__torch_function__and__cuda_array_interface__all exist._index/_maskwriter exists on Articulation, RigidObject and RigidObjectCollection for every backend. Fixed: the legacy writers are deprecated forwarders, not removed, and the Data Access and Math overview card now uses keyword arguments.TimestampedBuffer(wp.zeros(...))snippet. Verified:TimestampedBufferWarpis gone.isaaclab trainandisaaclab playfor each ofrsl_rl,rl_games,skrl,sb3andrlinf, plus thetorch.distributed.runcommand. Check the--checkpoint latest|best|pretrainedsupport matrix and the RLinf--model_path/--checkpointsemantics. Verified:scripts/reinforcement_learning/train.pyexists.--headlessis rejected, then checkHEADLESS=1with--viz kit(plus--enable_cameras) and with--viz newton_gl, and run--video viz:kit.ViewerCfgdeprecated) — matthewtrepte, ooctipus — Confirm theviewer.*shim and theViewportCameraControllerwarning. Run theKitVisualizerCfg(origin_type="asset", origin_track_path=...)snippet. Check the custom-visualizerinitialize(..., cameras=, stage=)paragraph againstbase_visualizer.py. Verified:resolve_camera_sourcesandget_visualized_env_idsexist.tiled_cam_*fields removed) — matthewtrepte, ooctipus, pbarejko — Run theNewtonGLVisualizerCfg(streaming_*)snippet with a scene-declared camera. Confirm that the removed helpers are gone. Verified:resolve_streaming_envsandCamera.set_world_poses_from_viewexist.NewtonVisualizerCfgwarns, that--viz newtonaliases tonewton_gl, and thatvisualizer:newton/viz:newton_glwork as video sources.gym.wrappers.RecordVideoreplaced) — matthewtrepte, ooctipus — Run theVideoRecorderCfg(source="viz", ...)snippet. Confirmeye/lookatwere removed andrecording_hooksis gone. Verified:SimulationContext.add_render_callbackexists.convert_urdf.pywith the documented flags and the Python before/after snippet. Confirm that the deprecated settings warn and that the output path is{usd_dir}/{robot_name}/{robot_name}.usda. Verified: the CLI flags exist.convert_mjcf.pywith the documented flags and the Python snippet. The Python before/after example still dropsfix_base, which is now supported again; decide whether to keep it. Fixed:fix_base/link_densityare no longer listed as removed, andcollision_typeexamples are valid values.--benchmark_formatter schema,omniperf. The guide says the "transitional runtime, startup, training, and play scripts were removed", butscripts/benchmarks/{runtime,startup,training,play}.pystill exist as supported launchers; clarify which scripts are meant. The PhysX micro-benchmarks now live undersource/isaaclab_physx/benchmark/{assets,sensors}/. Verified:isaaclab.test.benchmarkis gone and the formatter names matchBenchmarkFormatter.isaacteleop~=1.4. Confirm that the deprecatedisaaclab.devices.openxrclasses warn and that the import-mapping table is still accurate. Fixed: install command.main.Isaac Gym / IsaacGymEnvs (
include/from_isaacgymenvs.rst,include/comparing_simulation_isaacgym.rst)source/isaaclab_tasks/isaaclab_tasks/core/cartpole, then run the training and inference commands. Verified: the referenced classes and theCARTPOLE_CFGimport exist.isaaclab benchmark runtimeand the current kit args.Cross-cutting
skills/user/migrate-2x-to-3x/andskills/user/migrate-from-isaac-gym/to match, since the guide is their source of truth.Validation
uv run --extra dev make -C docs current-docs, which runssphinx-build -W --keep-going): succeeded with 0 warnings, and the changed passages render. Sphinx does not run in nitpicky mode, so unresolvedpy:cross-references would not fail this build. The symbol check below covers them.pre-commit run --files docs/source/migration/migrating_to_isaaclab_3-0.rst: all hooks passed.:class:/:func:/:meth:/:attr:/:mod:target and everyfrom X import Yin the four migration files againstsource/. The only unresolved targets were intentional 2.x "before" snippets. I also used targeted greps for the CLI flags, file paths and deprecation messages listed above. I did not run any snippet in a simulator.source/<pkg>/, so no changelog fragment is needed.Type of change
Release backport
developChecklist
pre-commitchecks withuv run isaaclab --formatsource/<pkg>/changelog.d/for every touched package (do not editCHANGELOG.rstor bump package versions — CI handles that)CONTRIBUTORS.mdor my name already exists there