Skip to content

Cherry-picks fixes for docs, ovphysx, ARM installation, stale sensor, locomanip quaternion, deformable demo, IK, benchmark scripts#5816

Merged
kellyguo11 merged 14 commits into
isaac-sim:release/3.0.0-beta2from
kellyguo11:cherry-pick-0527
May 28, 2026
Merged

Cherry-picks fixes for docs, ovphysx, ARM installation, stale sensor, locomanip quaternion, deformable demo, IK, benchmark scripts#5816
kellyguo11 merged 14 commits into
isaac-sim:release/3.0.0-beta2from
kellyguo11:cherry-pick-0527

Conversation

jaybdub and others added 9 commits May 27, 2026 12:26
…isaac-sim#5754)

# Description


`scripts/imitation_learning/locomanipulation_sdg/gr00t/convert_dataset.py`
still passed `scalar_first=True` to `Rotation.from_quat` / `as_quat`,
but
since isaac-sim#4437 (Jan 2026) Isaac Lab returns body poses in XYZW. The script
therefore mis-interpreted recorded poses as WXYZ, corrupting every
relative-pose computation (hands, object, fixture, goal) in the GR00T
training data and causing trained policies to produce twisted-arm
rollouts.

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

## Type of change

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

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

## Screenshots

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

<!--
Example:

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

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

## Checklist

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

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

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

Co-authored-by: Kelly Guo <kellyg@nvidia.com>
… tst layout to prepare for more systematic coverage (isaac-sim#5779)

- Fixes pytetwild compilation error on ARM64.
- Normalizes the install CI test suite so future coverage is easier to
add.

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

- [ ] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (do **not** edit
`CHANGELOG.rst` or bump `extension.toml` — CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
# Description

`ContactSensor` (and other lazy-eval sensors — `IMU`, `PVA`,
`JointWrenchSensor`) surfaced **pre-reset** values when
`scene.reset(env_ids)` ran inside `ManagerBasedRLEnv._reset_idx`. The
reset call zeroed each sensor's `_data` buffers correctly, but the
shared `reset_envs_kernel` then marked the env as outdated — so the next
`sensor.data` access (during `observation_manager.compute()`) triggered
a lazy refetch from a physics buffer that had not been stepped since the
reset, overwriting the zeros with stale data (contact forces, joint
wrenches, velocities → spurious finite-diff accelerations).

The fix clears the outdated flag in `reset_envs_kernel` instead of
setting it. The next `InteractiveScene.update(dt)` re-arms the flag at
the sensor's configured update period, so:
- The first `data` read after `scene.reset(env_ids)` returns the
freshly-zeroed buffers.
- The next step's read pulls fresh post-reset physics data as before.

This is a single-point fix in the shared sensor layer — it covers **both
Newton and PhysX backends** for every sensor that follows the "reset()
zeros _data + data is lazy" pattern.

Fixes isaac-sim#4970

## Type of change

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

## Screenshots

N/A — behavior change is observable in the sensor data values, covered
by the regression tests below.

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (do **not** edit
`CHANGELOG.rst` or bump `extension.toml` — CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

## Tests added

Per-backend, per-sensor regression tests that mirror the manager-based
env path (write new asset state, then `scene.reset(env_ids)`, then read
`sensor.data`). Each was verified RED with the kernel change temporarily
reverted and GREEN with it restored:

| Backend | Sensor | Test |
|---|---|---|
| PhysX | ContactSensor |
`test_contact_sensor.py::test_contact_sensor_no_stale_data_after_reset`
(cuda + cpu) |
| PhysX | JointWrenchSensor |
`test_joint_wrench_sensor.py::test_no_stale_data_after_scene_reset` |
| PhysX | PVA | `test_pva.py::test_no_stale_data_after_scene_reset` |
| PhysX | IMU | `test_imu.py::test_no_stale_data_after_scene_reset` |
| Newton | ContactSensor |
`test_contact_sensor.py::test_no_stale_data_after_scene_reset` (cuda +
cpu) |
| Newton | JointWrenchSensor |
`test_joint_wrench_sensor.py::test_no_stale_data_after_scene_reset` |
| Newton | PVA | `test_pva.py::test_no_stale_data_after_scene_reset` |
| Newton | IMU | `test_imu.py::test_no_stale_data_after_scene_reset` |

Existing `ContactSensor` (PhysX, 20 tests) and `IMU` (PhysX, 8 tests)
suites continue to pass.

> [!note]
> The Newton IMU's native `SensorIMU` (`accelerometer` / `gyroscope`)
does not carry data between physics steps the way PhysX's
`get_velocities()` does, so its test passes both before and after the
fix. The test stays in as a guard against future regressions in Newton
IMU's design.

## Notes for reviewers

- Behavior change is intentional: sensors that override `reset()` to
zero their `_data` (contact, IMU, PVA, joint wrench, both backends) now
keep those zeros until the next physics step. Sensors that don't zero
data (e.g. ray-caster, frame transformer) still see refetches at the
next update-period boundary, which preserves current behavior for them.
- No public API change. No deprecation needed.
# Description

Fixes `--viz none` / `--visualizer None` handling so the CLI parser maps
the disable-all sentinel to internal `None` instead of preserving
`"none"` as a requested visualizer backend. This keeps the documented
behavior where `--viz none` disables config-defined visualizers without
later failing visualizer backend resolution.

The PR also restores the prior documentation that describes `--viz none`
as intentional behavior.

Fixes: N/A

## Type of change

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

## Screenshots

N/A

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (do **not** edit
`CHANGELOG.rst` or bump `extension.toml` — CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

## Test Plan

- `./isaaclab.sh -f`
-
`PYTHONPATH=/home/antoiner/Documents/IsaacLab_Newton/.worktrees/fix-viz-none/source/isaaclab_tasks:$PYTHONPATH
./isaaclab.sh -p -m pytest
source/isaaclab/test/app/test_argparser_launch.py
source/isaaclab/test/app/test_kwarg_launch.py
source/isaaclab_tasks/test/test_sim_launcher_visualizer_intent.py`
# Description

Fixes the Kit-backed Python logging path so Isaac Lab `INFO` records
remain visible after `SimulationApp` installs Kit's logging bridge. This
restores the PhysX joint wrench sensor initialization log for
`Isaac-Ant-v0` with `presets=physx` while keeping the sensor
implementations on standard Python logging.

Fixes the reported joint wrench sensor logging issue.

## Type of change

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

## Screenshots

N/A

## Test Plan

- `./isaaclab.sh -f`
- `git diff --check`
- `timeout 120s ./isaaclab.sh -p scripts/environments/zero_agent.py
--task Isaac-Ant-v0 --num_envs 1 --viz newton presets=physx`
- Verified output includes `[INFO]: Joint wrench sensor initialized: 1
envs, 9 bodies`
- `./isaaclab.sh -p -m pytest
source/isaaclab_physx/test/sensors/test_joint_wrench_sensor.py::test_initialization_and_shapes`

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation (not
applicable; no documentation page change required)
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works (not added per request; verified with existing test and
repro command)
- [x] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (do **not** edit
`CHANGELOG.rst` or bump `extension.toml` — CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
# Description

Clarifies the Multi-Backend Architecture documentation so the factory
overview renders distinct backend implementation names instead of
repeated `Articulation` links. The page now mentions OvPhysX alongside
PhysX and Newton where the backend is supported, and the Cartpole
examples use root-runnable `./isaaclab.sh train --rl_library rsl_rl ...`
commands.

No new dependencies are required.

No linked issue.

## Type of change

- Documentation update

## Screenshots

Not applicable. This is an RST documentation text 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
- [ ] My changes generate no new warnings (not verified with a full docs
build)
- [ ] I have added tests that prove my fix is effective or that my
feature works (not added; docs-only change)
- [ ] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (not added;
top-level docs-only change)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

## Validation

- `./isaaclab.sh -f`
- `./isaaclab.sh train --rl_library rsl_rl --task
Isaac-Cartpole-Direct-v0 --help`
- `./isaaclab.sh train --rl_library rsl_rl --task
Isaac-Cartpole-Direct-v0 --help physics=newton_mjwarp`
- `./isaaclab.sh train --rl_library rsl_rl --task
Isaac-Cartpole-Direct-v0 --help physics=ovphysx`
- `./isaaclab.sh -p -c "from isaaclab_ovphysx.physics import
OvPhysxManager, OvPhysxCfg; from isaaclab_ovphysx.assets import
Articulation, RigidObject; from isaaclab_ovphysx.sensors import
ContactSensor; from isaaclab_ovphysx.cloner import ovphysx_replicate"`
# Description

Clarifies the PhysX backend documentation around timestep/frequency
wording, stabilization guidance, and the Isaac Lab 3.0 `PhysxCfg` import
path.

This PR also updates the example configuration to keep
`enable_stabilization=False` at `dt=1 / 120`, softens the contact-sensor
caveat wording, and clarifies the Isaac Sim version note for
`solve_articulation_contact_last`.

No new dependencies are required.

Fixes # (issue)

No linked issue.

## Type of change

- Documentation update

## Screenshots

Not applicable.

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings (not run: full Sphinx docs
build)
- [ ] I have added tests that prove my fix is effective or that my
feature works (not applicable: docs-only wording change)
- [ ] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (not applicable:
docs-only change under top-level docs)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
# Description

Refreshes the OvPhysX physical backend documentation so it no longer
presents merged work as open and gives users a minimal path to install
and verify the backend.

- Updates the OvPhysX status list for merged asset, sensor,
SceneDataProvider, and FrameView work.
- Adds minimal source-install notes for `ov[ovphysx]` / `ov[all]` and
smoke-test commands.
- Aligns the physical backend feature matrix with current OvPhysX
coverage while keeping remaining work marked as in flight.

Addresses isaac-sim#5634

## Type of change

- Documentation update

## Screenshots

Not applicable; this is a documentation text 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 from the RST/pre-commit checks
- [x] Documentation-only change; no new tests were added
- [x] No changelog fragment is needed because this only touches
top-level docs, not a package under `source/<pkg>`
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

## Test Plan

- `./isaaclab.sh -f`
- `./isaaclab.sh -p -c "import ovphysx.types; from
isaaclab_ovphysx.physics import OvPhysxCfg; print('OvPhysX runtime
OK')"`
- `./isaaclab.sh -p -m pytest
source/isaaclab_ovphysx/test/assets/test_rigid_object.py::test_initialization
-k cpu`

Full Sphinx build was not run locally because the Isaac Sim Python
environment in this checkout does not have the `sphinx` module
installed.
Fixes NVBug 5984996.

- Documentation update

- [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
- [x] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (do **not** edit
`CHANGELOG.rst` or bump `extension.toml` since CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
@github-actions github-actions Bot added documentation Improvements or additions to documentation isaac-mimic Related to Isaac Mimic team infrastructure labels May 27, 2026
@kellyguo11 kellyguo11 changed the title Cherry-picks fixes for docs, ovphysx, ARM installation, stale sensor, locomanip quaternion Cherry-picks fixes for docs, ovphysx, ARM installation, stale sensor, locomanip quaternion, deformable demo May 27, 2026
Signed-off-by: Kelly Guo <kellyg@nvidia.com>
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 27, 2026

Greptile Summary

This cherry-pick bundles 11 bug-fix PRs from develop into release/3.0.0-beta2, targeting stale sensor data after reset, the --visualizer none kitless path, Python INFO logging suppressed by Kit's log bridge, quaternion convention in the locomanipulation dataset script, and ARM installation robustness.

  • Stale sensor fix ([Bug Report] Stale contact sensor data after reset #4970): All sensor kernels (contact, IMU, PVA, joint wrench) for both Newton and PhysX backends now skip environments whose timestamp == 0.0, preventing pre-reset buffer contents from leaking into the first post-reset observation. The Newton ContactSensor.reset() is also refactored to use the shared _resolve_indices_and_mask helper.
  • Visualizer / logging fixes: _parse_visualizer_csv now returns None for the \"none\" token so _cli_visualizer_disable_all is correctly set; sim_launcher.py detects visualizer_explicit_none before AppLauncher is invoked in kitless mode. Python INFO logging for isaaclab loggers is preserved post-Kit-startup via a scoped stream handler.
  • Other fixes: Quaternion convention corrected to scalar-last in convert_dataset.py; ARM install guards apt-get calls behind sudo/availability checks and adds GL/X11 headers for imgui-bundle; install_type=\"none\" renamed to \"core\" with a backward-compat alias."

Confidence Score: 4/5

The changes are well-scoped fixes; the stale-sensor timestamp guards are applied consistently across all sensor types and both backends, and the visualizer/logging paths are backed by updated tests.

The core stale-sensor fix is straightforward and symmetric across eight kernels. The visualizer and logging changes involve somewhat intricate flag-threading logic, and the WARNING-mode root logger is overridden back to INFO immediately after being set — which is intentional but worth a second look. No data-loss or correctness regression was found.

source/isaaclab/isaaclab/app/app_launcher.py — the two-step root-logger level adjustment (WARNING then INFO) in the post-Kit startup path is subtle and worth verifying against real Kit startup behavior.

Important Files Changed

Filename Overview
source/isaaclab_newton/isaaclab_newton/sensors/contact_sensor/contact_sensor.py Reset refactored to use shared _resolve_indices_and_mask helper; also passes _timestamp to copy_from_newton_kernel to guard against stale data after reset.
source/isaaclab_newton/isaaclab_newton/sensors/contact_sensor/contact_sensor_kernels.py Adds timestamp parameter and early-return guard (timestamp==0.0) to skip envs not yet stepped since reset, preventing stale Newton contact buffer data (#4970).
source/isaaclab_physx/isaaclab_physx/sensors/contact_sensor/kernels.py Adds timestamp early-return guard to update_net_forces_kernel, same stale-data fix as Newton backend.
source/isaaclab/isaaclab/app/app_launcher.py Two independent fixes: (1) captures Python logging intent before Kit starts so Isaac Lab INFO records survive Kit's log bridge; (2) fixes _parse_visualizer_csv to return None for 'none' and updates _cli_visualizer_disable_all accordingly.
source/isaaclab_tasks/isaaclab_tasks/utils/sim_launcher.py Adds visualizer_explicit_none detection so --visualizer none correctly disables all visualizers in kitless (non-Kit) mode.
scripts/imitation_learning/locomanipulation_sdg/gr00t/convert_dataset.py Fixes quaternion convention from scalar-first (w,x,y,z) to scalar-last (x,y,z,w) to match Isaac Lab's ArticulationData.body_link_pose_w convention.
source/isaaclab/isaaclab/cli/commands/install.py Adds sudo/availability guard before swig install; adds GL/X11 dev header installation for imgui-bundle on ARM; renames install_type 'none' to 'core' with backward compat alias.
source/isaaclab_newton/isaaclab_newton/sensors/imu/imu.py Passes _timestamp to imu_copy_kernel for the stale-data timestamp guard.
source/isaaclab_physx/isaaclab_physx/sensors/pva/kernels.py Adds timestamp parameter and early-return guard to pva_update_kernel for stale-data prevention.

Sequence Diagram

sequenceDiagram
    participant Env as RL Environment
    participant Sensor as SensorBase (reset)
    participant Kernel as Warp Kernel

    Env->>Sensor: reset(env_ids)
    Sensor->>Sensor: _resolve_indices_and_mask(env_ids)
    Sensor->>Kernel: reset_envs_kernel(env_mask, _timestamp → 0.0)
    Note over Kernel: timestamp[env] = 0.0 for reset envs

    Env->>Sensor: update(dt) — first step after reset
    Sensor->>Kernel: update_timestamp_kernel(dt)
    Note over Kernel: timestamp[env] += dt → > 0.0

    Env->>Sensor: _update_outdated_buffers()
    Sensor->>Kernel: contact/imu/pva/wrench kernel(timestamp, ...)
    alt "timestamp[env] == 0.0 (not yet stepped)"
        Kernel-->>Sensor: return early — skip stale buffer
    else "timestamp[env] > 0.0"
        Kernel-->>Sensor: copy sensor data to output buffers
    end
Loading

Reviews (1): Last reviewed commit: "Merge branch 'release/3.0.0-beta2' into ..." | Re-trigger Greptile

Comment on lines +1233 to +1240
AppLauncher._apply_python_logging_level(self._python_logging_level)
if self._python_logging_level <= logging.INFO:
AppLauncher._ensure_isaaclab_info_stream_handler()
elif self._python_logging_level == logging.WARNING:
AppLauncher._ensure_isaaclab_info_stream_handler()
# Let Isaac Lab INFO records reach the scoped handler while the other root
# handlers remain at WARNING.
logging.getLogger().setLevel(logging.INFO)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Root logger ends up at INFO even in WARNING mode. _apply_python_logging_level(WARNING) correctly sets the root logger to WARNING, but the very next call to logging.getLogger().setLevel(logging.INFO) overrides it back to INFO. Any handler added after this point that lacks its own level filter will receive INFO records from all loggers — not just isaaclab ones — defeating the WARNING intent. Consider documenting the two-step rationale inline so the intentional override is clear to future maintainers.

Suggested change
AppLauncher._apply_python_logging_level(self._python_logging_level)
if self._python_logging_level <= logging.INFO:
AppLauncher._ensure_isaaclab_info_stream_handler()
elif self._python_logging_level == logging.WARNING:
AppLauncher._ensure_isaaclab_info_stream_handler()
# Let Isaac Lab INFO records reach the scoped handler while the other root
# handlers remain at WARNING.
logging.getLogger().setLevel(logging.INFO)
AppLauncher._apply_python_logging_level(self._python_logging_level)
if self._python_logging_level <= logging.INFO:
AppLauncher._ensure_isaaclab_info_stream_handler()
elif self._python_logging_level == logging.WARNING:
# _apply_python_logging_level just set all existing handlers to WARNING.
# Raise the root to INFO so the scoped isaaclab_info_stream handler (added
# next) can receive INFO records; all other handlers remain at WARNING and
# will therefore suppress non-WARNING noise from third-party loggers.
AppLauncher._ensure_isaaclab_info_stream_handler()
logging.getLogger().setLevel(logging.INFO)

Comment on lines +139 to 141
# resolve mask via the shared helper (uses self._reset_mask, persistent across calls).
env_mask = self._resolve_indices_and_mask(env_ids, env_mask)
# reset the timers and counters
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Double resolution of env_mask. _resolve_indices_and_mask(env_ids, env_mask) is called here, and then super().reset(None, env_mask) triggers a second call inside SensorBase.reset. The second call is a harmless no-op (it returns the already-resolved mask since env_mask is not None), but the shared _reset_mask buffer was already mutated in the first call if env_ids was non-None. Logic is correct; this is a minor efficiency/clarity note.

Copy link
Copy Markdown

@isaaclab-review-bot isaaclab-review-bot Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Isaac Lab Review Bot

Summary

This cherry-pick PR brings 13 PRs from develop to release/3.0.0-beta2, primarily fixing a critical stale sensor data bug (#4970), ARM64 installation issues, a quaternion convention bug in locomanipulation data conversion, and --viz none CLI parsing. The changes are well-structured with comprehensive regression tests for each sensor fix.

Design Assessment

Design is sound. The stale sensor data fix uses an elegant approach: each sensor kernel now checks timestamp[env] == 0.0 to skip envs that haven't been stepped since reset, preventing lazy refetch from returning pre-reset physics buffer values. This single-point fix in the shared sensor layer covers all lazy-eval sensors (Contact, IMU, PVA, JointWrench) across both PhysX and Newton backends.

The ARM64 install improvements appropriately gate pytetwild to x86_64-only (since its sdist build fails on ARM) and auto-install build dependencies (swig, GL/X11 headers) when sudo is available.

Findings

🔵 Suggestion: _StaleResetSceneCfg duplicated across test filessource/isaaclab_physx/test/sensors/test_imu.py and source/isaaclab_physx/test/sensors/test_pva.py

The _StaleResetSceneCfg class is defined identically in both test files. Consider extracting to a shared test utilities module to reduce duplication and make future changes easier.

🔵 Suggestion: Consistent error message for missing sudosource/isaaclab/isaaclab/cli/commands/install.py:86-89

The swig skip message says "Pre-install swig in your image if you need to build nlopt from source" while the GL/X11 skip message lists the packages. Consider making both messages consistent by listing the specific package(s) needed.

Test Coverage

Coverage is excellent. Each sensor fix includes comprehensive regression tests:

  • test_contact_sensor_no_stale_data_after_reset (PhysX cuda+cpu, Newton cuda+cpu)
  • test_no_stale_data_after_scene_reset for IMU, PVA, JointWrench (both backends)

All tests mirror the ManagerBasedRLEnv._reset_idx flow where reset runs inside a step without a subsequent physics step.

  • Bug fix: Has regression tests
  • Test quality: Good — deterministic, isolated, properly verifies both pre-reset (non-zero) and post-reset (zero) states

CI Status

Several checks are still pending (Build Base Docker Image, Installation Tests). Pre-commit and changelog checks have passed.

Verdict

No issues found

This is a well-executed cherry-pick PR with solid fixes for critical bugs (stale sensor data, ARM64 installation, quaternion convention). Each fix is accompanied by appropriate regression tests. The code changes are minimal and targeted, reducing the risk of unintended side effects. The documentation updates accurately reflect the current state of OvPhysX support.

@kellyguo11 kellyguo11 changed the title Cherry-picks fixes for docs, ovphysx, ARM installation, stale sensor, locomanip quaternion, deformable demo Cherry-picks fixes for docs, ovphysx, ARM installation, stale sensor, locomanip quaternion, deformable demo, IK May 27, 2026
mmichelis and others added 3 commits May 27, 2026 14:06
# Description

Enable particle self-contact in the Newton VBD solver config used by the
deformables demo, and tune the contact radius/margin so particles don't
inter-penetrate.

## Type of change

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

## Checklist

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

---------

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

Fixes a spurious PhysX tensor warning when the Newton visualizer
requests scene-data transforms for assets whose joint prims share names
with rigid-body prims, such as Ant and Humanoid.

The PhysX scene-data backend already discovers exact rigid-body prims
from USD, so this change creates the rigid-body view from those exact
paths instead of broad `/World/envs/env_*` wildcard patterns that can
also match same-named joint prims.

Fixes # (issue)

## Type of change

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

## Screenshots

Not applicable.

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] I have added a changelog fragment under
`source/<pkg>/changelog.d/` for every touched package (do **not** edit
`CHANGELOG.rst` or bump `extension.toml` — CI handles that)
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

Manual verification:

- `./isaaclab.sh -f`
- `timeout 60s ./isaaclab.sh -p scripts/environments/zero_agent.py
--task Isaac-Ant-v0 --num_envs 128 --viz newton presets=physx`
- `timeout 60s ./isaaclab.sh -p scripts/environments/zero_agent.py
--task Isaac-Humanoid-v0 --num_envs 128 --viz newton presets=physx`

The Ant and Humanoid repro commands start without the previous
`[omni.physx.tensors.plugin] Failed to find rigid body at
.../Robot/joints/...` warnings.
isaac-sim#5784)

## 1. Summary

- Benchmark scripts and standalone environment helpers failed with
``gymnasium.error.NameNotFound: Environment 'Isaac-Cartpole-Direct-Warp'
doesn't exist`` when invoked with any ``-Warp-v0`` task. Docs at
``source/overview/core-concepts/physical-backends/newton/warp-environments.rst``
advertise the very command that fails.
- Root cause: the affected scripts import ``isaaclab_tasks`` only; the
``-Warp-v0`` variants are registered in the optional
``isaaclab_tasks_experimental`` extension. The RL training/play scripts
already conditionally import it; these did not.
- Fix: add the same ``with contextlib.suppress(ImportError): import
isaaclab_tasks_experimental`` block after the existing ``import
isaaclab_tasks``. Seven scripts, 39 insertions total.

## 2. Scripts changed

| File | Before | After |
|---|---|---|
| ``scripts/benchmarks/benchmark_rsl_rl.py`` | imports
``isaaclab_tasks`` only | + conditional ``isaaclab_tasks_experimental``
|
| ``scripts/benchmarks/benchmark_non_rl.py`` | imports
``isaaclab_tasks`` only | + conditional ``isaaclab_tasks_experimental``
|
| ``scripts/benchmarks/benchmark_rlgames.py`` | imports
``isaaclab_tasks`` only | + conditional ``isaaclab_tasks_experimental``
|
| ``scripts/environments/list_envs.py`` | imports ``isaaclab_tasks``
only | + conditional ``isaaclab_tasks_experimental`` |
| ``scripts/environments/random_agent.py`` | imports ``isaaclab_tasks``
only | + conditional ``isaaclab_tasks_experimental`` |
| ``scripts/environments/zero_agent.py`` | imports ``isaaclab_tasks``
only | + conditional ``isaaclab_tasks_experimental`` |
| ``scripts/environments/export_IODescriptors.py`` | imports
``isaaclab_tasks`` only | + conditional ``isaaclab_tasks_experimental``
|

All eight
``scripts/reinforcement_learning/{rl_games,rsl_rl,sb3,skrl}/{train,play}.py``
scripts already follow this pattern; the affected scripts are the
remaining gap.

## 3. Verification

- Pre-commit clean on all 8 changed files (ruff, ruff-format, codespell,
RST hooks).
- Pattern mirrors
``scripts/reinforcement_learning/rsl_rl/train.py:56-58``, which is the
canonical placement.
- ``contextlib.suppress(ImportError)`` keeps the scripts working when
the experimental extension isn't installed (e.g. minimal IsaacLab
installs).

## 4. Cherry-pick target

The customer-visible bug is on ``release/3.0.0-beta2`` per the NVBug.
After this lands on ``develop``, cherry-pick onto that release branch so
QA can verify on the same build.

Refs NVBug 6224916
@kellyguo11 kellyguo11 changed the title Cherry-picks fixes for docs, ovphysx, ARM installation, stale sensor, locomanip quaternion, deformable demo, IK Cherry-picks fixes for docs, ovphysx, ARM installation, stale sensor, locomanip quaternion, deformable demo, IK, benchmark scripts May 27, 2026
@kellyguo11 kellyguo11 requested a review from ooctipus as a code owner May 27, 2026 21:11
@kellyguo11 kellyguo11 merged commit b4f4467 into isaac-sim:release/3.0.0-beta2 May 28, 2026
37 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation infrastructure isaac-mimic Related to Isaac Mimic team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants