Skip to content

Add PhysX joint wrench sensor#1

Open
AntoineRichard wants to merge 41 commits into
camevor:newton-joint-wrench-sensorfrom
AntoineRichard:antoine/physx-joint-wrench-sensor
Open

Add PhysX joint wrench sensor#1
AntoineRichard wants to merge 41 commits into
camevor:newton-joint-wrench-sensorfrom
AntoineRichard:antoine/physx-joint-wrench-sensor

Conversation

@AntoineRichard
Copy link
Copy Markdown

Description

Adds the PhysX backend for JointWrenchSensor on top of isaac-sim#5412.

The PhysX sensor creates only an articulation view and reads incoming joint wrenches directly from ArticulationView.get_link_incoming_joint_force(), splitting the result into force and torque buffers for the shared joint-wrench sensor API.

This also removes ArticulationData.body_incoming_joint_wrench_b from the articulation data APIs, migrates manager/direct environments that used it to JointWrenchSensor, and documents the Isaac Lab 3.0 migration path.

@camevor can you review?

Fixes # (issue)

N/A

Type of change

  • New feature (non-breaking change which adds functionality)
  • Breaking change (existing functionality will not work without user modification)
  • Documentation update

Screenshots

N/A

Tests

  • ./isaaclab.sh -f
  • docker exec isaac-lab-base bash -lc "cd /workspace/isaaclab && ./isaaclab.sh -p -m pytest source/isaaclab_physx/test/sensors/test_joint_wrench_sensor.py" - 9 passed
  • docker exec isaac-lab-base bash -lc "cd /workspace/isaaclab && ./isaaclab.sh -p -m pytest source/isaaclab/test/test_mock_interfaces/test_mock_data_properties.py" - 253 passed

Checklist

  • I have read and understood the contribution guidelines
  • I have run the pre-commit checks 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

nvsekkin and others added 2 commits April 30, 2026 06:32
…e Docker waits) (isaac-sim#5429)

# Description

Fixes two CI reliability problems:
1. **Stale pipelines not cancelled on new commits.**
2. **Manual cancellation didn't actually stop tests.**

## What changed

- **Concurrency**: per-PR `cancel-in-progress` group on `build.yaml`,
  `docs.yaml`, `license-check.yaml`, `check-links.yml`; added missing
`concurrency` blocks to `install-ci.yml`, `pre-commit.yaml`,
`labeler.yml`.
- **`run-tests` action**: backgrounded `docker wait` + bash `wait`
builtin
  (signal-interruptible), `trap HUP|INT|TERM` that `docker kill`s the
  container, plus an `if: cancelled()` force-kill step as a safety net.
- **`build.yaml` job conditions**: dropped `always() &&` from test jobs.
  `if: always()` makes a job uncancellable, which silently defeated the
  concurrency fix above. Behavior on success/failure is unchanged.

## Type of change

- Bug fix (non-breaking change which fixes an issue)

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

---------

Co-authored-by: Antoine RICHARD <antoiner@nvidia.com>
Add the PhysX backend implementation for JointWrenchSensor and migrate body incoming wrench observations off ArticulationData.

Remove the old articulation data accessor and document the Isaac Lab 3.0 migration path.
@github-actions github-actions Bot added documentation Improvements or additions to documentation isaac-lab labels Apr 30, 2026
AntoineRichard and others added 26 commits April 30, 2026 16:46
Resolve nested USD articulation roots before creating the PhysX articulation view so classic Ant and Humanoid environments can use the joint wrench sensor from the asset prim path.
Resolve nested articulation roots for the Newton joint wrench sensor and let classic Ant and Humanoid Newton presets use the same wrench observation terms as PhysX.
Convert PhysX incoming joint wrenches from body1 frame at the body origin into the shared child-side joint frame with torque referenced at the child-side joint anchor.
# Description

Improves performance across the board for asset writes.

## Type of change

- Bug fix (non-breaking change which fixes an issue)

## Micro benchmarks

```
  ┌─────────────────────────────────┬────────┬───────┬─────────┐
  │             Method              │ Before │ After │ Speedup │
  ├─────────────────────────────────┼────────┼───────┼─────────┤
  │ write_root_link_pose_to_sim     │ 94     │ 81    │ 1.16x   │
  ├─────────────────────────────────┼────────┼───────┼─────────┤
  │ write_root_com_pose_to_sim      │ 111    │ 90    │ 1.23x   │
  ├─────────────────────────────────┼────────┼───────┼─────────┤
  │ write_root_link_velocity_to_sim │ 128    │ 124   │ 1.03x   │
  ├─────────────────────────────────┼────────┼───────┼─────────┤
  │ write_root_com_velocity_to_sim  │ 110    │ 108   │ 1.02x   │
  ├─────────────────────────────────┼────────┼───────┼─────────┤
  │ write_joint_state_to_sim        │ 180    │ 127   │ 1.42x   │
  ├─────────────────────────────────┼────────┼───────┼─────────┤
  │ write_joint_position_to_sim     │ 98     │ 108   │ ~1.0x   │
  ├─────────────────────────────────┼────────┼───────┼─────────┤
  │ set_joint_position_target       │ 94     │ 107   │ ~1.0x   │
  ├─────────────────────────────────┼────────┼───────┼─────────┤
  │ write_joint_stiffness_to_sim    │ 171    │ 152   │ 1.13x   │
  ├─────────────────────────────────┼────────┼───────┼─────────┤
  │ write_joint_damping_to_sim      │ 177    │ 151   │ 1.17x   │
  ├─────────────────────────────────┼────────┼───────┼─────────┤
  │ write_joint_armature_to_sim     │ 170    │ 153   │ 1.11x   │
  ├─────────────────────────────────┼────────┼───────┼─────────┤
  │ set_masses                      │ 177    │ 152   │ 1.16x   │
  ├─────────────────────────────────┼────────┼───────┼─────────┤
  │ set_coms                        │ 350    │ 272   │ 1.29x   │
  ├─────────────────────────────────┼────────┼───────┼─────────┤
  │ set_inertias                    │ 350    │ 280   │ 1.25x   │
  └─────────────────────────────────┴────────┴───────┴─────────┘

```

## 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
…m#5441)

# Description

Added platform_system == 'Linux' marker to the isaacteleop dependency in
isaaclab_teleop/setup.py so pip no longer fails to resolve it on
Windows.
The isaaclab_teleop package itself remains in the teleop and all extras
unconditionally — only the native isaacteleop library is skipped on
non-Linux platforms.

Fixes # (issue)

## Type of change

- Bug fix (non-breaking change which fixes an issue)

## Screenshots

Please attach before and after screenshots of the change if 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
- [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
## Summary
- Remove PR-level path filters from required Docker and installation
workflows so checks are always reported.
- Add change-detection jobs that skip expensive self-hosted tests for
docs-only PRs.
- Add gate checks for branch protection: `Docker Tests Gate` and
`Installation Tests Gate`.
- Add a regression test that verifies required workflows do not use path
filters and expose gate jobs.

## Testing
- `./isaaclab.sh -p -m pytest
.github/workflows/test_required_ci_gates.py -q`
- `./isaaclab.sh -f`

## Follow-up for branch protection
After this merges, update the required checks to require the gate checks
instead of the individual Docker shards and installation job:
- require `Docker Tests Gate`
- require `Installation Tests Gate`
- remove required checks for `Installation Tests`, `isaaclab (core)
[1/3]`, `isaaclab (core) [2/3]`, `isaaclab (core) [3/3]`,
`isaaclab_assets`, `isaaclab_contrib`, and `isaaclab_newton`
# 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

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

<!--
As you go through the checklist above, you can mark something as done by
putting an x character in it

For example,
- [x] I have done this task
- [ ] I have not done this task
-->

---------

Co-authored-by: Piotr Barejko <pbarejko@nvidia.com>
# Description

`source/isaaclab_ovphysx/setup.py` lists `"ovphysx"` in
`install_requires`.
The default `./isaaclab.sh -i` flow auto-discovers every package under
`source/` and pip-installs each one, so the wrapper's hard dep on the
`ovphysx` PyPI wheel is fetched unconditionally. When that wheel is
unavailable (the common case for users who don't need the runtime), the
whole install aborts and unrelated cfg classes such as `OvPhysxCfg`
become unimportable.

This change makes the runtime an opt-in extra:

```python
INSTALL_REQUIRES: list[str] = []
EXTRAS_REQUIRE = {"ovphysx": ["ovphysx"]}
```

After the change:

- `./isaaclab.sh -i` (default) — installs `isaaclab_ovphysx`
wrapper-only,
  cfg modules import without needing the `ovphysx` wheel.
- `pip install -e source/isaaclab_ovphysx[ovphysx]` — installs the
wrapper
  with the `ovphysx` runtime alongside it for users who want it.

No CLI machinery is touched. Users who want the runtime use pip's
existing `[extra]` syntax directly; we don't need to surface it through
`./isaaclab.sh` since `isaaclab_ovphysx` is already installed by the
default all-scan.

## Type of change

- Bug fix (non-breaking change which fixes an issue)

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

Co-authored-by: Antoine RICHARD <antoiner@nvidia.com>
# Description

Recent branch protection rules blocked force push from the doc
deployment job to the gh-pages branch, breaking the documentation update
pipeline of our built docs.

This change removes the force push from the job, which shouldn't be
necessary.

## 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

Fixes three NVBugs from the Apr 28 SQA wave against Isaac Lab 3.0 Beta2.

NVBugs fixed:

- nvbug#6123115 - pip wheel install does not pull skrl
- nvbug#6122694 - nlopt wheel build fails on DGX Spark (ARM64)
- nvbug#6110670 - Win11 isaaclab.bat --install rejects setuptools<82.0.0
spec

Changes:

- Document that the bundled training scripts need the [all] extras with
the pip wheel.
- On ARM Linux, isaaclab.sh -i now installs swig and pre-installs nlopt
2.6.2 with --no-build-isolation.
- On Windows, extract_python_exe prefers kit/python/python.exe over
python.bat, and the .bat fallback wrapper now caret-escapes cmd.exe
metacharacters.

## Type of change

- Bug fix (non-breaking change which fixes an issue)

## Checklist

- [x] I have read and understood the contribution guidelines
- [x] I have run the pre-commit checks with ./isaaclab.sh --format
- [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

---------

Signed-off-by: Kelly Guo <kellyg@nvidia.com>
Co-authored-by: Kelly Guo <kellyg@nvidia.com>
# Description

Clear up docs on tutorials for deformable asset. No need to mention
color of cubes (in case this changes in the future).

## 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

Centralizes multi-GPU device resolution in AppLauncher and
launch_simulation() so that individual training scripts do not need
per-script distributed device logic.

### Problem

In distributed (multi-GPU) training, every RL script duplicates device
resolution. This breaks when CUDA_VISIBLE_DEVICES restricts each process
to a single GPU (e.g., SLURM), because local_rank=1 exceeds the visible
device count. Additionally, physics backends like Newton/Warp that
allocate on the current CUDA device during init may all default to
cuda:0.

### Fix

**app_launcher.py:** CUDA_VISIBLE_DEVICES-aware device ID resolution,
early torch.cuda.set_device(), new self.device attribute.

**sim_launcher.py:** New _resolve_distributed_device() helper
centralizes device logic in launch_simulation(). After AppLauncher
creation, propagates AppLauncher.device to env_cfg.sim.device. Handles
kitless Newton path. Also treats PresetCfg renderers as non-Kit in
_is_kit_camera().

**presets.py:** Adds newton and physx aliases to
MultiBackendRendererCfg.

## Type of change
- Bug fix (non-breaking change which fixes an issue)

## Checklist
- [x] I have run the pre-commit checks
- [x] My changes generate no new warnings
- [x] I have read and understood the contribution guidelines

---------

Co-authored-by: Kelly Guo <kellyguo11@users.noreply.github.com>
Co-authored-by: Bob <bob@isaaclab.dev>
Co-authored-by: Mustafa H <34825877+StafaH@users.noreply.github.com>
## 1. Summary

Restores biped-specific reset overrides on H1, Cassie, Digit, G1 that
were lost when the parent PR (isaac-sim#5248) consolidated startup events into
the shared `EventsCfg`. Re-enables `add_base_mass` randomization on H1
and Cassie with the new log-uniform scale default.

This PR contains only the biped-level deltas — Newton physics, shape
margin, and quadruped enablement all live in isaac-sim#5248.

## 2. Dependencies

1. PR isaac-sim#5365 — `checked_apply` helper.
2. PR isaac-sim#5248 — quadruped Newton support, shared `RoughPhysicsCfg`,
`NewtonShapeCfg(margin=0.01)`.

## 3. Changes

### 3.1 Restore biped reset overrides

Bipeds have precise initial poses that should not be randomly scaled on
reset. The shared `EventsCfg.reset_robot_joints` uses `position_range =
(0.5, 1.5)`; bipeds override to `(1.0, 1.0)`:

| Env | Override |
|---|---|
| H1 | `position_range = (1.0, 1.0)` |
| Cassie | `position_range = (1.0, 1.0)` + leg `armature = 0.02` for
stability on rough terrain |
| Digit | `position_range = (1.0, 1.0)` |
| G1 | `position_range = (1.0, 1.0)` |

### 3.2 Re-enable `add_base_mass` on H1 and Cassie

Per-env `add_base_mass = None` overrides on H1 and Cassie (pre-existing
biped convention from PR isaac-sim#444, reinforced by PR isaac-sim#4165's Newton NaN TODO)
are removed. The parent PR's new log-uniform scale default `(1/1.25,
1.25)` is safer for bipeds than the old additive `(-5, 5)` kg (which was
effectively ±25% on H1's torso vs ±100% on Cassie's pelvis).

- **H1** inherits the shared default (symmetric ±25% scale,
`body_names="torso_link"`).
- **Cassie** overrides to `(1.0, 1.25)` asymmetric heavier-bias:
lighter-than-nominal pelvis destabilizes Cassie's closed-loop Achilles
rod coupling and hip PD response, while heavier-than-nominal dampens
dynamics.

| Variant | reward | ep len | vs disabled |
|---|---:|---:|---:|
| Disabled (`= None`) | +20.00 | 982 | ref |
| Symmetric ±25% (`(1/1.25, 1.25)`) | +12.00 | 605 | -40% (regression) |
| Asymmetric heavier `(1.0, 1.25)` | +18.00 | 935 | **+90%** (chosen) |

H1 reward at iter 1499: `24.02` with mass rand on vs `23.58` with it
disabled — essentially equal; re-enabling provides sim-to-real
robustness at negligible training cost.

## 4. PhysX / Newton parity (1500 iter, 4096 envs, last30 avg)

| Robot | PhysX 1500 | Newton 1500 | Newton/PhysX |
|---|---:|---:|---:|
| H1 | **+18.15** | **+24.05** | **132%** ✓ |
| Cassie | **+19.57** | **+24.75** | **127%** ✓ |

Both bipeds reach parity or better on Newton at full 1500-iter training.

## 5. Versions

- `isaaclab_tasks` 1.5.25 → 1.5.26

## Type of change

- New feature (non-breaking).

---------

Co-authored-by: ooctipus <zhengyuz@nvidia.com>
…isaac-sim#5432)

# Description

Adds a re-entrant context manager `disabled_fabric_change_notifies` that
suspends the `omni::fabric::IFabricUsd` USD notice listener for the
duration of bulk cloning. During `Sdf.CopySpec` loops in
`usd_replicate`, every per-prim mutation otherwise fires
`IFabricUsd::UsdNoticeListener::Handle` to do an immediate Fabric↔USD
sync — for moderately heavy scenes that single hot path can dominate
scene-load time. Toggling the listener's soft flag
(`IFabricUsd.cpp:739`) gates the work without unregistering the
listener, then the natural `SimulationContext.reset` path performs the
catch-up resync in one pass.

The same handler is what
`isaacsim.core.cloner.Cloner.disable_change_listener` toggles, but this
implementation reaches it through the underlying
`omni::fabric::IFabricUsd` Carbonite interface directly, so the cloner
has **no `isaacsim.core.simulation_manager` dependency**. Since
`omni.fabric` has no public Python binding for
`setEnableChangeNotifies`, acquisition is via a small ctypes module
modelled on the in-tree `isaaclab_newton.physics._cubric` pattern.

The context manager is wired in at the cloner-session boundary —
`clone_from_template` and the two cloning regions in `InteractiveScene`
— not inside `usd_replicate` itself, keeping the leaf USD-authoring
primitive pure.

## Motivation

This PR supersedes the approach taken in isaac-sim#5070 (still open). isaac-sim#5070
reaches the same toggle via
`isaacsim.core.simulation_manager.SimulationManager.enable_fabric_usd_notice_handler`,
which:

1. Adds an `isaacsim.core.simulation_manager` dependency to the cloner
(project policy: avoid `isaacsim.*` implementation deps).
2. Implements via a state-dict pattern + a private
`_manage_notice_handlers` kwarg leaked through public `usd_replicate`.
3. Disables the handler from inside `usd_replicate` and never re-enables
it on exit (global-state leak that survives exceptions).

This PR keeps isaac-sim#5070's measured perf win while replacing the above with a
single context manager wired in at the orchestrator boundary,
exception-safe, re-entrant, and IsaacSim-implementation-free.

### Architecture

| Concern | Where it lives |
|---|---|
| ABI-coupled ctypes binding |
`source/isaaclab/isaaclab/cloner/_fabric_notices.py` (private, ~135
lines) |
| Public context manager | `disabled_fabric_change_notifies(stage, *,
restore=True)` in `cloner_utils.py` |
| Application | `clone_from_template` body and
`InteractiveScene.clone_environments` |

The `restore=False` kwarg, used at the two scene-init sites, opts out of
the on-exit re-enable. This avoids the redundant `forceMinimalPopulate`
batch that fires when the flag flips back on; downstream
`SimulationContext.reset` performs the same Fabric resync as part of
normal startup. `restore=True` (the default) is exception-safe and is
what tests and any future direct callers get.

When the Carbonite interface can't be acquired (e.g. running outside a
live Kit application), the context manager falls through to a no-op so
callers never break — they just don't get the perf win.

## Benchmarks

`scripts/benchmarks/benchmark_startup.py`, RTX 5090, headless, warm run
(2nd of 2 invocations after kernel/extension caches populate).

| Task | num_envs | Backend | Before | After | Saved | % |
|---|---:|---|---:|---:|---:|---:|
| `Isaac-Cartpole-Direct-v0` | 4096 | PhysX | 7.41 s | 6.47 s | 0.94 s |
−12.7% |
| `Isaac-Cartpole-Direct-v0` | 4096 | Newton | 22.06 s | 22.01 s | 0.05
s | ~0% |
| `Isaac-Velocity-Flat-Anymal-C-v0` | 4096 | PhysX | 28.09 s | 14.49 s |
13.60 s | **−48.4%** |
| `Isaac-Velocity-Flat-Anymal-C-v0` | 4096 | Newton | 36.72 s | 32.99 s
| 3.73 s | −10.1% |
| `Isaac-Dexsuite-Kuka-Allegro-Reorient-v0` | 8192 | PhysX | 104.84 s |
41.94 s | 62.90 s | **−60.0%** |
| `Isaac-Dexsuite-Kuka-Allegro-Reorient-v0` | 8192 | Newton | 81.00 s |
74.17 s | 6.83 s | −8.4% |

Savings come entirely from `env_creation` (Scene Creation + Simulation
Start) and `first_step`. Non-cloning phases (`app_launch`,
`python_imports`, `task_config`) are unchanged within run-to-run noise.
Newton kitless runs see smaller wins because Fabric is only touched when
`omni.fabric` is loaded for rendering; PhysX with Kit is the primary
beneficiary.

The `first_step` collapse on heavy scenes (e.g. Dexsuite −93%, 10.8 s →
0.74 s) is the deferred Fabric resync work folding into the existing
`SimulationContext.reset` pass with much less overhead than an eager
`forceMinimalPopulate`.

## Type of change

- New feature (non-breaking change which adds functionality)
- Performance improvement

## Test plan

- `pytest source/isaaclab/test/sim/test_cloner.py` → 18 passed
- `pytest source/isaaclab_physx/test/sim/test_cloner.py` → 22 passed (2
xfailed/2 xpassed are pre-existing)
- `./isaaclab.sh -f` (pre-commit) clean
- Smoke test confirms `restore=True` round-trips the flag,
`restore=False` leaves it off, and nested context managers are
re-entrant.

## Follow-ups

- File a Kit-team request for an `omni.fabric` Python binding to
`setEnableChangeNotifies`, after which `_fabric_notices.py` can be
deleted.
- Consider an ABI-drift smoke test under `test_cloner.py` to catch
Kit-side vtable changes in CI.

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
# Description

Document Kamino solver selection through the existing Hydra preset
system.

- Adds a "Backend and Solver Presets" section that explains how `newton`
and `kamino` presets both use `NewtonCfg` but choose different solver
configs.
- Notes that Kamino is experimental and depends on assets being
structured for Kamino.
- Adds a brief mention from the Newton solver-transitioning page and
updates the MuJoCo-Warp example to current public config APIs.

Fixes: N/A

## Type of change

- Documentation update

## Screenshots

N/A. Documentation-only change.

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [ ] 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 config file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
# Description

This migrates json nsys trace definitions from omniperf benchmark to
isaaclab itself. Part 1/2

- Added new nsys_trace.json (moved from omniperf benchmark) to decorate
functions of interest in isaac traces without requiring decorators in
the codebase.
- Added a unit test to ensure the json stays in sync.

## Type of change

- New feature (non-breaking change which adds functionality)

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings *(Intentionally added new
warnings in new test file)*
- [x] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file *(N/A - no package source files
edited)*
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
# Description

Adds wheel versioning so QA can identify which build is newer and
reproduce any wheel from its commit. The wheel follows PEP 440
local-version `<VERSION>+build<N>.<sha7>`.

Downloading in QA env:

```
# Latest from develop
RUN_ID=$(gh run list --workflow=wheel.yml --branch=develop -L 1 --json databaseId -q '.[0].databaseId')
rm -rf ./out && gh run download "$RUN_ID" --pattern 'isaaclab-*' -D ./out

# Latest from a specific PR branch
RUN_ID=$(gh run list --workflow=wheel.yml --branch=<branch-name> -L 1 --json databaseId -q '.[0].databaseId')
rm -rf ./out && gh run download "$RUN_ID" --pattern 'isaaclab-*' -D ./out

# Specific run
rm -rf ./out && gh run download <run-id> --pattern 'isaaclab-*' -D ./out

# Find newly downloaded wheel file
WHEEL_FILE=$(ls -1t ./out/isaaclab-*/*.whl | head -1)

# Install it
pip install --force-reinstall $WHEEL_FILE
```

## 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 with `./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
# Description

Recent changes in Isaac Lab requires a newer version of Isaac Sim than
what is available in the GitHub repo for Isaac Sim. Adds notes in the
docs and readme to mention this incompatibility issue and specifies
working commits and tags of Isaac Lab that can be used in conjunction
with Isaac Sim from GitHub.

## 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
-->
# Description

Some tests arbitrarily times out due to inconsistent CI runs. This
change adds a logic to rerun tests that have timed out in an attempt to
reduce flaky timeout issues.

## Type of change

<!-- As you go through the list, delete the ones that are not
applicable. -->

- Bug fix (non-breaking change which fixes an issue)

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [ ] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

<!--
As you go through the checklist above, you can mark something as done by
putting an x character in it

For example,
- [x] I have done this task
- [ ] I have not done this task
-->
…c-sim#5470)

# Description

Two unrelated CI flakes in the same test infrastructure area, bundled
because both are minimal targeted fixes.

### 1. `test_disabled_fabric_change_notifies_speedup_regression`
(`source/isaaclab_physx/test/sim/test_cloner.py`)

This is a wall-clock perf regression test that's intended to run
**locally only** — it asserts a >= 1.2× speedup of clone+reset with
listener suspension. The result is platform-sensitive (deferred Fabric
resync in `sim.reset` can offset the scene-time savings on some
hardware), so it was meant to be skipped in CI.

The original guard was `if os.getenv(\"CI\", \"\").lower() in (\"true\",
\"1\"): pytest.skip(...)` inside the test body. However, this project's
CI doesn't set the `CI` env var — it selects tests via the `isaacsim_ci`
pytest marker registered in `pyproject.toml` and applied module-wide via
`pytestmark` at the top of `test_cloner.py`. Result: the env-var skip
never fires, and the test runs (and occasionally flakes) on CI.

Fix: replace the dead env-var branch with a top-level
`@pytest.mark.skip(...)` decorator so the test is collected and skipped
unconditionally regardless of how CI selects tests. The correctness of
the suspension mechanism is still covered by
`test_disabled_fabric_change_notifies_toggles_ifabricusd_flag`, which is
unaffected. Re-enable the perf test manually when touching listener
suspension.

### 2. `test_output_equal_to_usd_camera_when_intrinsics_set`
(`source/isaaclab/test/sensors/test_ray_caster_camera.py`)

Intermittent CI failure where the ray caster camera output mismatched
the USD camera reference with inf-valued differences across all 518400
elements:

```
E   Mismatched elements: 518400 / 518400 (100.0%)
E   Greatest absolute difference: inf at index (0, 0, 0, 0) (up to 0.0001 allowed)
E   Greatest relative difference: inf at index (0, 0, 0, 0) (up to 0.005 allowed)
```

Root cause: the test placed the camera at `eye=(0, 0, 5)` looking at
`target=(0, 0, 0)`, which is colinear with the default up vector and
produces a degenerate view transform. Fix: nudge `eye` to `(0.001, 0,
5)` for both the ray caster and USD camera, keeping them at identical
poses while breaking the singularity. The underlying degeneracy is
tracked in a separate internal ticket; this is the test-side mitigation.

Fixes # (n/a)

## Type of change

- Bug fix (non-breaking change which fixes an issue)

## Screenshots

N/A — test infrastructure changes.

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
# Description

<!--
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.
-->

Patch newton model reqs issue where in some caes env configs were
constructed in a way where newton model reqs were not correctly
determined, leading to downstream issues.

Also, revert the revert to physx scene data provider, since the fix
above no longer requires the revert, which is non ideal since building
newton model from usd fallback is slow.

<!-- 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
-->

---------

Signed-off-by: matthewtrepte <mtrepte@nvidia.com>
Co-authored-by: Kelly Guo <kellyg@nvidia.com>
Co-authored-by: HuiDong Chen <huidongc@nvidia.com>
Co-authored-by: myurasov-nv <168484206+myurasov-nv@users.noreply.github.com>
Co-authored-by: hujc <leo.hu.sh@gmail.com>
Co-authored-by: Antoine Richard <antoiner@nvidia.com>
Co-authored-by: peterd-NV <peterd@nvidia.com>
# Description

Added support to train a gear assembly/insertion policy for the Flexiv
Rizon 4s robot. Defined new envs/tasks for this.
Added required robot config for the Flexiv Rizon 4s with Grav gripper.
Added documentation for a tutorial on training a gear assembly policy
with Flexiv Rizon 4s.

## Type of change

- New feature (non-breaking change which adds functionality)
- 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
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

---------

Co-authored-by: Kelly Guo <kellyg@nvidia.com>
…ts (isaac-sim#5434)

## Problem

Every PR that touches `source/<pkg>/` updates
`source/<pkg>/docs/CHANGELOG.rst` and
`source/<pkg>/config/extension.toml`. Both files are append-only at the
top, so concurrent PRs collide on the same lines. Contributors burn time
resolving merge conflicts that say nothing about the actual change.
Maintainers occasionally land an entry under the wrong version heading
because the resolution is mechanical and easy to mis-do.

## Solution

Adopt the towncrier-style fragment-per-PR pattern (used by pip, urllib3,
Twisted, Trio, attrs, Sphinx, …):

- Each PR adds **one fragment file** per touched package under
`source/<pkg>/changelog.d/<slug>.<tier>.rst`. Different PRs touch
different files — no conflict.
- A **nightly CI workflow** rolls accumulated fragments into per-package
`CHANGELOG.rst` entries, bumps each `extension.toml`, deletes consumed
fragments, and pushes the result back to `develop`.
- A **PR gate** rejects any PR that touches a managed package's source
without adding a fragment, and rejects modifications to existing
fragments (immutability).

CHANGELOG.rst and extension.toml become append-only-by-CI files; humans
never edit them.

## Contributor workflow (one fragment per touched package)

```bash
# Branch: jdoe/fix-spawn-pose
$EDITOR source/isaaclab/changelog.d/jdoe-fix-spawn-pose.rst
```

```rst
Fixed
^^^^^

* Fixed :meth:`~isaaclab.assets.Articulation.write_root_pose` ignoring the env-id mask.
```

Filename convention:

| Filename | Effect |
|---|---|
| `<slug>.rst` | patch bump (`X.Y.Z → X.Y.Z+1`) |
| `<slug>.minor.rst` | minor bump (`X.Y.Z → X.Y+1.0`) |
| `<slug>.major.rst` | major bump (`X+1.0.0`) — breaking change |
| `<slug>.skip` | no entry, no bump (CI / docs / test-only PRs) |

The slug is any short, unique name. **Branch name with `/` replaced by
`-` is the recommended default** — already in scope at commit time,
naturally unique because of the `<user>/<feature>` branch convention.
Within a batch, the highest tier wins for the package (`major > minor >
patch`).

## What the nightly does

`tools/changelog/cli.py compile --all` walks every package's
`changelog.d/`, sorts fragments by merge time, merges sections across
fragments (canonical order: Added, Changed, Deprecated, Removed, Fixed),
prepends a single `X.Y.Z (YYYY-MM-DD)` block to `CHANGELOG.rst`, bumps
`extension.toml`, and deletes the consumed files. One commit per night,
with a body listing every package that bumped:

```
[CI][Auto Version Bump] Compile changelog fragments (schedule)

Bumped packages:
- isaaclab: 4.6.26 → 4.7.0
- isaaclab_physx: 0.5.29 → 1.0.0
- isaaclab_tasks: 1.5.32 → 1.5.33
```

## What's tested

**Unit + integration (82 tests, all passing):** filename regex
acceptance/rejection, bump-tier aggregation, cross-fragment section
merge, immutability, missing-fragment-per-touched-package,
version-pinning guards, content validation. Worked-example fixtures
under `tools/changelog/tests/fixtures/integration/{01_patch_bump,
02_minor_bump, 03_major_bump}/` double as living demos.

**Live end-to-end on a fork** (real GitHub Actions runners, not local
mocks):
1. Single fragment dry-run + real run: ✓ produces correct CHANGELOG
block, bumps extension.toml, deletes fragment, commits with the expected
subject/body.
2. Multi-package multi-tier batch (7 simulated PRs across 3 packages,
mixed Fixed/Added/Deprecated/Removed/Changed/Breaking, mixed
patch/minor/major/skip): ✓ each package bumps to the right tier
(`isaaclab: 4.6.26→4.7.0` minor, `isaaclab_physx: 0.5.29→1.0.0` major,
`isaaclab_tasks: 1.5.32→1.5.33` patch), single commit lists all three.
3. Cross-fragment section merge (3 fragments → one Added section with 3
bullets, 2 fragments → one Fixed section with 2 bullets, one fragment
contributing to both): ✓ bullets correctly merged in merge-time order.

Fork test branch:
<https://github.com/hujc7/IsaacLab/tree/test-changelog-nightly>.

## Setup checklist for upstream after merge

The new workflow files are pinned by SHA per the existing CI
conventions; no additional repo settings are required for the workflows
to run. Two optional follow-ups maintainers may want:

1. **Add `CHANGELOG_PAT` secret** (fine-grained PAT with
`contents:write` on the repo). Optional. Without it, the nightly's
auto-commit uses `GITHUB_TOKEN` — sufficient to push, but pushes signed
with `GITHUB_TOKEN` do not trigger downstream workflow runs (this is
GitHub's by-design loop guard). Adding the PAT lets the auto-commit
re-trigger the docs / Docker rebuilds.
2. **Branch protection on `develop`** may need an exception for
`github-actions[bot]` so the auto-commit can push directly. If `develop`
already accepts non-PR pushes from CI service accounts, no change.

## Files changed

- `tools/changelog/cli.py` — single entry with `compile` and `check`
subcommands.
- `tools/changelog/tests/` — 82 tests + integration fixtures.
- `.github/workflows/changelog-check.yml` — PR gate (per-PR).
- `.github/workflows/nightly-changelog.yml` — nightly auto-compile (cron
+ workflow_dispatch).
- `AGENTS.md` — contributor docs (+10 / -5 lines in the existing
"Changelog" section).
- `source/<pkg>/changelog.d/.gitkeep` — empty directory placeholders for
every managed package.
# Description

Adds the `scripts/**` path to the build.yaml filter to allow the CI
workflow to run on changes to scripts.

This is a followup to the new tests added in [PR
5397](isaac-sim#5397) and the existing
tests in the scripts/tools folder.

## Type of change

- New feature (non-breaking change which adds functionality)

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation *(N/A)*
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works *(N/A)*
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file *(N/A)*
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

Co-authored-by: Kelly Guo <kellyg@nvidia.com>
Co-authored-by: Piotr Barejko <pbarejko@nvidia.com>
…c-sim#5335)

# Description

The previous benchmark convergence checking was dependent on analyzing
reward curves, which required maintaining expected reward thresholds for
each environment, which is not sustainable or reliable.

This change adds a new success metric `Metrics/success_rate` that can be
instrumented by each environment to signal whether training succeeded or
not, without requiring any special knowledge of that environment by the
benchmark scripts. The results are logged to the json artifact.

Threshold, window, and tag can be overridden via new CLI args. A new
`--check_success` arg can also be used to optionally enable early-exit
when success stabilizes.

## Type of change

- New feature (non-breaking change which adds functionality)

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation *(N/A)*
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works *(unit tests + manual e2e tests)*
- [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

Adds a Newton and Base implementation for a `JointWrenchSensor`

## Type of change
- New feature (non-breaking change which adds functionality)

## Checklist

- [ ] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [ ] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [ ] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

<!--
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: camevor <camevor@nvidia.com>
Signed-off-by: Kelly Guo <kellyg@nvidia.com>
Co-authored-by: Antoine RICHARD <antoiner@nvidia.com>
Co-authored-by: Kelly Guo <kellyg@nvidia.com>
frlai and others added 13 commits May 3, 2026 02:07
# Description
FEATURE: adds new LEAPP export functionality that targets manged
environments that using rsl_rl. Policies can be exported end to end.
Also adds a new direct deployment environment to deploy exported
policies, bypassing all the manager classes.

## Type of change

- New feature (non-breaking change which adds functionality)

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

---------

Signed-off-by: frlai <frlai@nvidia.com>
# Description

The renderer was previously held by the camera. this PR refactors this
relationship, creating a RenderContext as a property of the
SimulationContext to manage the renderer's lifetime independent of the
camera(s)

## Type of change

- refactor

## 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
-->

---------

Signed-off-by: r-schmitt <139814266+r-schmitt@users.noreply.github.com>
Co-authored-by: nvsekkin <72572910+nvsekkin@users.noreply.github.com>
CI cleanup that drops redundant aggregator gate jobs (skipped jobs
already satisfy branch protection), fixes reporting of change-detection
in the GitHub job summary, simplifies concurrency keys back to
github.ref (run # was redundant).

## Type of change

- Bug fix (non-breaking change which fixes an issue)

## Checklist

- [x] I have read and understood the contribution guidelines
- [x] I have run the pre-commit checks with `./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
# Description

Routes the visualizer-side cloning data through a per-group `ClonePlan`
map and has the PhysX scene data provider pull a Newton model from those
plans directly — replacing the clone-time `visualizer_clone_fn` callback
and the `VisualizerPrebuiltArtifacts` payload introduced in isaac-sim#5398.

## Pipeline

```
InteractiveScene.clone_environments
    plans = clone_from_template(...)        # dict[str, ClonePlan]
    sim.set_clone_plans(plans)              # canonical owner
            ↓
PhysxSceneDataProvider.__init__
    plans = sim.get_clone_plans()
    sources, destinations, mask = aggregate(plans)
    positions = read_env_xforms(stage)
    model, state = newton_visualizer_prebuild(...)
```

Single source of truth, single direction. No clone-time callback, no
requirements push from sensors, no late-resolve refresh loop.

## Notable changes

- **Add** `ClonePlan` (`dest_template`, `prototype_paths`,
`clone_mask`); `SimulationContext.{get,set}_clone_plans`;
`InteractiveScene.clone_plans` forwarder.
- **Remove** `TemplateCloneCfg.visualizer_clone_fn`,
`cloner.resolve_visualizer_clone_fn`, `VisualizerPrebuiltArtifacts`,
`SimulationContext.{get,set,clear}_scene_data_visualizer_prebuilt_artifact`,
`Camera._register_renderer_scene_data_requirements`,
`create_newton_visualizer_prebuild_clone_fn`.
- **Collapse** three calls to
`_refresh_visualizer_clone_fn_from_requirements` into one
`_aggregate_scene_data_requirements` after entities are constructed.
- **Provider** derives flat `(sources, destinations, mask)` from
per-group plans, recovering each source path as
`dest_template.format(<first env using this prototype>)` and reading
per-env positions off the env-template's `xformOp:translate`.

## Type of change

- Bug fix
- Breaking change *(removes the public symbols listed above. They were
introduced in isaac-sim#5398 four days ago; the changelog fragments are filed as
`.minor.rst` since the surface had no time to acquire dependents.)*

## Checklist

- [x] I have read and understood the contribution guidelines
- [x] I have run the `pre-commit` checks with `./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] I have added changelog fragments under
`source/isaaclab/changelog.d/`, `source/isaaclab_newton/changelog.d/`
(both `.minor.rst`), and `source/isaaclab_physx/changelog.d/` (`.skip` —
private/internal changes only)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
… physics tuning) (isaac-sim#5312)

## 1. Summary

Enable G1 rough-terrain training on Newton. The only engine-specific
change is a `~1.7×` bump on `max_iterations` (Newton = 5000, PhysX =
3000). No physics, solver, reward, or action-space tuning — the G1 rough
env config is identical on both backends.

## 2. Core finding — PhysX saturates at iter 3000; Newton matches by
iter 5000

Ran both backends for 7500 iter on identical configs. **Reward alone is
misleading** — PhysX reward oscillates +16 to +19 across its entire run
past iter 3000 without improving. Episode length confirms the plateau:

| iter | PhysX reward | PhysX ep_len | Newton reward | Newton ep_len |
|---:|---:|---:|---:|---:|
| 3000 | **+18.14** | **983** | +6.21 | 979 |
| 4000 | +19.38 | 986 | +10.65 | 983 |
| **5000** | **+18.04** | **978** | **+16.01** | **984** |
| 5500 | +18.19 | 983 | +16.60 | 985 |
| 6000 | +17.07 | 981 | +18.86 | 996 |
| 6500 | +16.71 | 989 | +19.80 | 996 |
| 7000 | +16.27 | 968 | +18.10 | 976 |
| 7500 | +15.81 | — | +17.56 | 969 |

- **PhysX plateau**: both metrics stable at iter 3000 (+18.14 / 983). No
meaningful gain past iter 3000.
- **Newton at iter 5000**: (+16.01 / 984) — matches PhysX quality on
both reward and ep_len.
- **Newton at iter 6000+**: equals or exceeds PhysX on both metrics.

Episode length > 960 everywhere means the robot is stable (not falling)
even when reward is low — reward alone is not a sufficient convergence
signal.

## 3. Ablation record

Tested at L40, 4096 envs, seed=42, Newton @ `381781c2` (1.2.0.dev0):

| Variant | iter | Reward | Verdict |
|---|---:|---:|---|
| A0 — Vanilla Newton | 3000 | +6.21 | Newton slower but learning |
| A1 — Newton armature 0.01 | 3000 | +5.14 | No help |
| A2 — Newton armature 0.03 | 3000 | +6.43 | No help |
| D0 — Vanilla Newton (extended) | 5000 | +16.01 | **Matches PhysX
plateau quality** |
| E0 — Vanilla PhysX | 3000 | +18.14 | PhysX plateau |

Key observations:
- Armature tuning (0.01, 0.03) does not change Newton's convergence rate
on G1.
- Damping preset (5 → 20) and finger-removal also tested in earlier
rounds; no durable benefit once Newton is given enough iterations.
- Newton catches PhysX by iter 5000 on vanilla config, so the
framework-level `max_iterations` bump is sufficient on its own.

## 4. Change


`source/isaaclab_tasks/isaaclab_tasks/manager_based/locomotion/velocity/config/g1/agents/rsl_rl_ppo_cfg.py`:

```python
from isaaclab_tasks.utils import preset

class G1RoughPPORunnerCfg(RslRlOnPolicyRunnerCfg):
    # Newton needs ~1.7x the PPO iterations to match PhysX on G1. PhysX saturates near iter 3000
    # (reward ≈ +18, ep_len ≈ 980) and does not meaningfully improve on either metric past that —
    # reward oscillates +16 to +19 through iter 7500, ep_len stays flat. Newton reaches the same
    # (reward, ep_len) quality at iter 5000 (+16 / 984). Comparing reward alone is misleading:
    # ep_len confirms the robot is stable in both cases. The gap is sample-efficiency, not a
    # ceiling — no physics or reward tuning closes it.
    max_iterations = preset(default=3000, newton=5000)
```

G1 `rough_env_cfg.py` is unchanged on this branch — no finger removal,
no armature preset, no damping preset.

Precedent for per-robot `max_iterations` tuning: Allegro Hand (5000),
Spot (20000).

## Type of change

- New feature (non-breaking).
# Description

Add RenderContext to documentation

## 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

Update omniverseclient pin to `2.71.1.7015`.

Fixes # (issue)

<!-- As a practice, it is recommended to open an issue to have
discussions on the proposed pull request.
This makes it easier for the community to keep track of what is being
developed or added, and if a given feature
is demanded by more than one party. -->

## Type of change

<!-- As you go through the list, delete the ones that are not
applicable. -->

- Bug fix (non-breaking change which fixes an issue)
- New feature (non-breaking change which adds functionality)
- Breaking change (existing functionality will not work without user
modification)
- Documentation update

## Screenshots

Please attach before and after screenshots of the change if applicable.

<!--
Example:

| Before | After |
| ------ | ----- |
| _gif/png before_ | _gif/png after_ |

To upload images to a PR -- simply drag and drop an image while in edit
mode and it should upload the image directly. You can then paste that
source into the above before/after sections.
-->

## Checklist

- [ ] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [ ] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [ ] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

<!--
As you go through the checklist above, you can mark something as done by
putting an x character in it

For example,
- [x] I have done this task
- [ ] I have not done this task
-->
# Description

<!--
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.
-->

I am updating a small set of documentation fixes I found. I stumbled
across one and then had claude scour the documentation to find any
others. Claude found a bunch and after removing ones I didn't feel
required fixing, this is the result.

My prompt was


```
I need to scour the documentation and thoroughly check to see that the bash syntax being provided is correct. I need you to go through each rst document and read it in its entirety and pay special attention to the bash commands. Check to see if they are correct. Is this the correct syntax? Does it make sense? Go through the documentation in `docs/` with a very fine tooth comb, checking for any and all discrepancies and issues. 
```

Fixes # (issue)

<!-- As a practice, it is recommended to open an issue to have
discussions on the proposed pull request.
This makes it easier for the community to keep track of what is being
developed or added, and if a given feature
is demanded by more than one party. -->

## Type of change

<!-- As you go through the list, delete the ones that are not
applicable. -->

- Documentation update

## Screenshots

Here's a screenshot showing that the new `::` comment blocks in the
batch code render properly and don't cause issues in the rst

<img width="879" height="513" alt="Screenshot from 2026-05-04 15-59-20"
src="https://github.com/user-attachments/assets/9e2585dd-9315-40c4-913a-41a33ccac460"
/>


<!--
Example:

| Before | After |
| ------ | ----- |
| _gif/png before_ | _gif/png after_ |

To upload images to a PR -- simply drag and drop an image while in edit
mode and it should upload the image directly. You can then paste that
source into the above before/after sections.
-->

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [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
-->
# Description

- In the Dexsuite env the success and failure markers are placed exactly
at the same location.
If both markers are visible, the rendering order will determine which
one is visible in the
camera output. Hide both markers to avoid this nondeterministic
behavior.

- Ordering of test cases appear to affect camera outputs for some
reason, therefore I move
the `newton_renderer` test cases after `isaacsim_rtx_renderer` test
cases.

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

- [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
-->
# Description

- Restores legacy `teleop_devices` config (`OpenXRDeviceCfg` /
`ManusViveCfg` + `GR1T2RetargeterCfg`) on `PickPlaceGR1T2EnvCfg`
alongside the existing `isaac_teleop` pipeline, re-enabling CI
validation via `--teleop_device=handtracking`.
- Updates `teleop_se3_agent.py` and `record_demos.py` to route between
the two stacks: IsaacTeleop is used by default when configured; passing
`--teleop_device` explicitly forces the legacy `teleop_devices` path
(errors if no matching entry exists).
- Removes automatic `--xr` inference from `--teleop_device` containing
`"handtracking"`. Users who need XR with the legacy path should pass
`--xr` explicitly.

Fixes # (issue)

## Type of change

- Bug fix (non-breaking change which fixes an issue)

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

---------

Co-authored-by: Kelly Guo <kellyg@nvidia.com>
…alizer (--visualizer) (isaac-sim#5474)

# 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.
-->

Extending Brian's original PR:
Sync video recorder's (--video) renderer backend with the active
visualizer (--visualizer)

Change enable cross recording support for Renderers and Visualizers

Also fixes
https://nvbugs/6121118


<!-- 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)

## Screenshots

Please attach before and after screenshots of the change if applicable.

<!--
Example:

| Before | After |
| ------ | ----- |
| _gif/png before_ | _gif/png after_ |

To upload images to a PR -- simply drag and drop an image while in edit
mode and it should upload the image directly. You can then paste that
source into the above before/after sections.
-->

## Checklist

- [ ] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [ ] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [ ] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

<!--
As you go through the checklist above, you can mark something as done by
putting an x character in it

For example,
- [x] I have done this task
- [ ] I have not done this task
-->

---------

Signed-off-by: bdilinila <148156773+bdilinila@users.noreply.github.com>
Signed-off-by: Kelly Guo <kellyg@nvidia.com>
Signed-off-by: matthewtrepte <mtrepte@nvidia.com>
Co-authored-by: Brian Dilinila <bdilinila@nvidia.com>
Co-authored-by: HuiDong Chen <huidongc@nvidia.com>
Co-authored-by: bdilinila <148156773+bdilinila@users.noreply.github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Piotr Barejko <pbarejko@nvidia.com>
Co-authored-by: myurasov-nv <168484206+myurasov-nv@users.noreply.github.com>
Co-authored-by: Pascal Roth <57946385+pascal-roth@users.noreply.github.com>
Co-authored-by: Antoine Richard <antoiner@nvidia.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: ClemensSchwarke <clemens.schwarke@gmail.com>
Co-authored-by: rwiltz <165190220+rwiltz@users.noreply.github.com>
Co-authored-by: Kelly Guo <kellyg@nvidia.com>
Co-authored-by: Kelly Guo <kelly@nvidia.com>
Co-authored-by: ooctipus <zhengyuz@nvidia.com>
Co-authored-by: hougantc-nvda <127865892+hougantc-nvda@users.noreply.github.com>
Co-authored-by: Piotr Barejko <piotrbarejko@protonmail.com>
# Conflicts:
#	docs/source/api/lab/isaaclab.sensors.rst
#	source/isaaclab/config/extension.toml
#	source/isaaclab/docs/CHANGELOG.rst
#	source/isaaclab/isaaclab/assets/articulation/base_articulation_data.py
#	source/isaaclab/isaaclab/sensors/joint_wrench/base_joint_wrench_sensor.py
#	source/isaaclab/isaaclab/sensors/joint_wrench/base_joint_wrench_sensor_data.py
#	source/isaaclab/isaaclab/sensors/joint_wrench/joint_wrench_sensor.py
#	source/isaaclab/isaaclab/sensors/joint_wrench/joint_wrench_sensor_cfg.py
#	source/isaaclab/isaaclab/sensors/joint_wrench/joint_wrench_sensor_data.py
#	source/isaaclab_newton/config/extension.toml
#	source/isaaclab_newton/docs/CHANGELOG.rst
#	source/isaaclab_newton/isaaclab_newton/sensors/joint_wrench/joint_wrench_sensor.py
#	source/isaaclab_newton/isaaclab_newton/sensors/joint_wrench/joint_wrench_sensor_data.py
#	source/isaaclab_newton/test/sensors/test_joint_wrench_sensor.py
#	source/isaaclab_physx/docs/CHANGELOG.rst
#	source/isaaclab_tasks/config/extension.toml
#	source/isaaclab_tasks/docs/CHANGELOG.rst
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.