Skip to content

Cherry-picks fixes for visualizers, SKRL template, digit limitations, teleop/mimic dependency#5829

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

Cherry-picks fixes for visualizers, SKRL template, digit limitations, teleop/mimic dependency#5829
kellyguo11 merged 4 commits into
isaac-sim:release/3.0.0-beta2from
kellyguo11:cherry-pick-0527-2

Conversation

@kellyguo11
Copy link
Copy Markdown
Contributor

peterd-NV and others added 4 commits May 27, 2026 20:02
…y install (isaac-sim#5820)

# Description

Adds isaaclab_teleop as a dep to isaaclab_mimic when using
`./isaaclab.sh -i mimic`

Fixes # (issue)

Previously when a user installs just mimic and tried to run data
generation, an error would occur as isaaclab teleop was not installed.
This change fixes the import error.

## 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`
- [ ] 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: peterd-NV <peterd@nvidia.com>
…im#5821)

## Summary

- Drop `newton_mjwarp` from the three Digit env rows in
`docs/source/overview/environments.rst` (`Isaac-Velocity-Flat-Digit-v0`,
`Isaac-Velocity-Rough-Digit-v0`, `Isaac-Tracking-LocoManip-Digit-v0`).
- Add a "Closed-loop articulations on Newton (e.g. Agility Digit)"
section to `docs/source/refs/issues.rst` describing the root cause and
recommending the `physx` preset until the upstream fix lands.

## Why

Robots with closed kinematic loops (Digit's achilles rod and toe
push-rods) do not run correctly under the `newton_mjwarp` physics preset
today. Newton's `ArticulationView` builds its per-link axis by walking
`model.joint_child` over the articulation's joint range and
`sorted()`-ing without deduplication, so a body that is the child of N
joints occupies N slots on that axis. On Digit this gives
`view.link_count = 49` against 43 unique physical bodies; the four
loop-closed bodies (left/right `tarsus`, left/right `toe_roll`) account
for the six extra slots. Any code path that assumes one entry per
logical body breaks (e.g. tensor-shape mismatches in `feet_slide`-style
rewards).

The supported-environments tables previously listed `newton_mjwarp` for
Digit, which is misleading. This PR removes that claim and documents the
limitation under Known Issues.

## Test plan

- [ ] `./isaaclab.sh -f` (pre-commit) passes locally.
- [ ] Sphinx build renders the new Known Issues entry without warnings
and the Digit rows in the environments tables show only `physx`.
…m#5733)

<!--
Thank you for your interest in sending a pull request. Please make sure
to check the contribution guidelines.

Link:
https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html

💡 Please try to keep PRs small and focused. Large PRs are harder to
review and merge.
-->

Improve the visualizer integration test
- Unskip all tests
- Add retry loop for pause/replay step to reduce flakyness
- Separate out visualizer tests into separate files and kit processes
- Fix camera pose of Kit Viz + Newton_MJWarp case
- Add debug image capture mode (disabled by default)
- Add simple tiled image check

Other visualizer fixes
- Pin pyarrow to 22.0.0 to fix Rerun on Windows
- Make tiled camera view instructions in the visualizer docs more
explicit
- Fix Newton Pyglet issue on Windows
- Change tiled camera panel in Newton Viewer from "Image Logger (1)" to
"Tiled Visualizer Camera"

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

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

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

- [ ] 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

Merge changes from main branch:

- isaac-sim#4875 - Adds Isaac-Stack-Cube-Franka-IK-Rel-v0 task variants
- isaac-sim#4909 - Updates minor RSL-RL configclass docstring
- isaac-sim#4934 - Updates Newton docs on main for 3.0 beta changes
- isaac-sim#5182 - Fix flatdict version pin to allow 4.1.0+
- isaac-sim#5195 - Add NCCL troubleshooting notes
- isaac-sim#5406 - Updates doc building job on main to match develop
- isaac-sim#5311 - Update skrl integration for version 2.0.0
- isaac-sim#5482 - Adds nightly-changelog.yml on main
- isaac-sim#5527 - Use isaaclab-bot GitHub App token for nightly changelog push
- isaac-sim#5537 - Address deprecation warnings in nightly changelog workflow
- isaac-sim#5746 - Fix .dockerignore for _isaac_sim symlink
- isaac-sim#5745 - Parameterize nightly compile over configurable branches
- isaac-sim#5546 - Fix swapped preserve_order docstrings
- isaac-sim#5817 - Update skrl agent configurations in the Isaac Lab template
@github-actions github-actions Bot added documentation Improvements or additions to documentation isaac-mimic Related to Isaac Mimic team infrastructure labels May 28, 2026
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.

Code Review Summary

This cherry-pick PR brings several bug fixes and improvements from develop to the release/3.0.0-beta2 branch. The changes are well-structured and appropriately scoped for a release stabilization branch.

📋 Changes Overview

Category Files Assessment
Dependency Fix install.py ✅ Correct
Documentation environments.rst, issues.rst, visualization.rst ✅ Accurate
Visualizer Tests Split into 4 test files + utils ✅ Improved isolation
SKRL Templates 3 agent config templates ✅ Updated for skrl 2.0.0
Camera/Visualizer camera_view.py, newton_visualizer.py, physx_manager.py ✅ Sound

🔬 Detailed Analysis

1. Mimic/Teleop Dependency (install.py)

OPTIONAL_ISAACLAB_SUBMODULES: dict[str, tuple[str, ...]] = {
    "mimic": ("isaaclab_teleop", "isaaclab_mimic"),  # teleop now installed first
    ...
}

Verdict: ✅ Correct fix. Since isaaclab_mimic depends on isaaclab_teleop, installing teleop first prevents import errors during mimic data generation.

2. Camera View Position Resolution (camera_view.py)

The reordering of fallback methods in prim_world_positions() is more robust:

  1. First tries FrameView (PhysX/Fabric-backed transforms)
  2. Falls back to scene articulation positions
  3. Final fallback uses USD xform cache

Verdict: ✅ Better error isolation - FrameView exceptions now fail fast before attempting scene fallback.

3. PhysX Rigid Body View Wildcard Patterns (physx_manager.py)

patterns.add(re.sub(r"/World/envs/env_\d+", "/World/envs/env_*", prim.GetPath().pathString))

Verdict: ✅ Restores cross-environment compatibility for Newton visualizers updating PhysX transforms.

4. Newton Headless Detection (newton_visualizer.py)

runtime_headless = self.cfg.headless or (
    sys.platform not in ("win32", "darwin") and not os.environ.get("DISPLAY")
)

Verdict: ✅ Fixes false headless detection on Windows/macOS where DISPLAY is not used.

5. SKRL Template Updates

Updates config field names for skrl 2.0.0 compatibility:

  • state_preprocessorobservation_preprocessor (for observations)
  • amp_state_preprocessoramp_observation_preprocessor
  • task_reward_weighttask_reward_scale
  • style_reward_weightstyle_reward_scale
  • Removed deprecated discriminator_reward_scale

Verdict: ✅ Aligns with skrl 2.0.0 API.

6. Documentation Updates

  • Removes newton_mjwarp from Digit environment support tables
  • Adds Known Issues section documenting closed-loop articulation limitation
  • Improves tiled camera view documentation with UI access instructions

Verdict: ✅ Accurate and helpful for users.

7. Visualizer Test Restructuring

Splits monolithic 609-line test file into:

  • 4 separate test files (Newton/PhysX × standard/tiled)
  • 1571-line shared utilities module

Verdict: ✅ Better test isolation, reduces flakiness, easier debugging.


🧪 Test Coverage

Change Type Coverage Status
Mimic dependency test_install_command_parsing.py updated
Visualizer fixes ✅ Integration tests restructured
Documentation N/A (no tests needed)
SKRL templates N/A (config templates)

📝 Minor Observations

  1. visualizer_cfg.py field reordering: The docstring update for tiled_cam_target_prim_path defaulting to "/World/envs/*/Robot" is clear and matches typical robot asset layouts.

  2. string.py docstring fix: The corrected preserve_order documentation now accurately describes the behavior (was previously swapped).


✅ Verdict: Approve

This is a clean cherry-pick PR with well-scoped bug fixes appropriate for a release branch. All changes are:

  • Self-contained with minimal cross-module impact
  • Properly tested where applicable
  • Well-documented

No blocking issues identified.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 28, 2026

Greptile Summary

This PR cherry-picks four bug-fix branches from develop into release/3.0.0-beta2, targeting visualizer correctness, SKRL template API alignment, Agility Digit newton_mjwarp limitations, and the isaaclab_mimicisaaclab_teleop install dependency.

  • Visualizer fixes: prim_world_positions now tries FrameView first for live PhysX/Fabric transforms before falling back to scene articulation and USD; PhysX rigid-body view switches from per-env exact paths to wildcard patterns (env_*) so a single view covers all envs; Newton headless detection is corrected to skip the DISPLAY check on Windows/macOS.
  • SKRL templates: state_preprocessor renamed to observation_preprocessor across AMP, IPPO, and MAPPO configs; MAPPO critic input corrected to STATES; AMP reward weight fields renamed to *_scale and unified.
  • Install / CI: ./isaaclab.sh -i mimic now co-installs isaaclab_teleop; the nightly changelog workflow is extended to compile against a configurable list of branches using a GitHub App token.

Confidence Score: 4/5

Safe to merge; all changes are targeted bug fixes with no behavioral regressions identified in the main simulation paths.

The core logic changes (FrameView-first fallback chain, wildcard rigid-body view, platform-aware headless detection) are well-scoped and covered by the restructured integration tests. The pyarrow==22.0.0 hard pin and the silent exception swallow in camera_view.py are minor quality concerns that do not affect correctness under normal operation.

source/isaaclab/isaaclab/envs/utils/camera_view.py (exception swallowing) and source/isaaclab_visualizers/setup.py (pyarrow hard pin) warrant a second look.

Important Files Changed

Filename Overview
source/isaaclab/isaaclab/envs/utils/camera_view.py Refactored prim_world_positions: FrameView is now tried first for all envs atomically; if any env fails, the entire batch falls back to scene articulation then USD XformCache. Silent exception swallow loses diagnostic information.
source/isaaclab_physx/isaaclab_physx/physics/physx_manager.py Rigid-body view now deduplicates per-env paths into wildcard patterns (/World/envs/env_*) using a set, so a single PhysX view covers all envs; fixes Newton visualizer live-transform updates.
source/isaaclab_visualizers/isaaclab_visualizers/newton/newton_visualizer.py Headless detection now skips DISPLAY check on non-Linux platforms (Windows/macOS), and the tiled camera UI control is renamed from Newton ImageLogger to Tiled Camera View.
source/isaaclab/isaaclab/cli/commands/install.py mimic install now includes isaaclab_teleop as a prerequisite since isaaclab_mimic declares it as a required dependency.
source/isaaclab/isaaclab/visualizers/visualizer_cfg.py Field reordering only; tiled_cam_target_prim_path default changed from /World/envs//Robot/base to /World/envs//Robot (matching the articulation root, not a child link).
tools/template/templates/agents/skrl_amp_cfg Updated to SKRL renamed API: state_preprocessor to observation_preprocessor, amp_state_preprocessor to amp_observation_preprocessor, task/style reward keys renamed to *_scale, discriminator_reward_scale removed.
tools/template/templates/agents/skrl_mappo_cfg Critic model input corrected to STATES (centralized critic), shared_state_preprocessor removed, observation_preprocessor added alongside state_preprocessor per updated SKRL MAPPO API.
source/isaaclab/isaaclab/utils/string.py Docstring corrections only: preserve_order=True and preserve_order=False descriptions were swapped in both resolve_matching_names and resolve_matching_names_values; now correctly documented.
source/isaaclab_visualizers/setup.py Added pyarrow==22.0.0 as a hard-pinned dependency in the rerun extra to fix a runtime compatibility issue.
.github/workflows/nightly-changelog.yml Expanded from single-branch (develop) to matrix over a configurable CRON_BRANCHES list; migrated auth from PAT to GitHub App token; concurrency scoped per-branch; manual dispatch requires exactly one branch.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["prim_world_positions(stage, path, env_indices, scene)"] --> B["Try FrameView for ALL envs"]
    B -->|"Success for all"| C["Return tensor"]
    B -->|"Any exception"| D["positions.clear()"]
    D --> E{scene is not None?}
    E -->|"Yes"| F["_scene_articulation_positions()"]
    F -->|"Returns tensor"| G["Return tensor"]
    F -->|"Returns None"| H["USD XformCache fallback per env"]
    E -->|"No"| H
    H --> I["Return tensor"]
Loading

Comments Outside Diff (2)

  1. source/isaaclab_visualizers/setup.py, line 754 (link)

    P2 Hard-pinned transitive dependency may cause conflicts

    pyarrow==22.0.0 is pinned with == in the rerun extra. Any consumer that also pulls in pyarrow (e.g., from a data-science stack) will hit an unsatisfiable constraint if their requirement is not exactly 22.0.0. The same pin appears in tools/wheel_builder/res/python_packages.toml. If the pin is needed to work around a specific rerun-sdk/pyarrow incompatibility, a >=22.0.0,<23 floor-style bound would be more permissive while still excluding the broken version.

    Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

  2. source/isaaclab_visualizers/isaaclab_visualizers/newton/newton_visualizer.py, line 711-727 (link)

    P2 Accessing private _images and _selected on Newton's ImageLogger

    _draw_tiled_camera_view_controls reads image_logger._images and writes image_logger._selected directly. These are private attributes of Newton's upstream ImageLogger; if that class renames or restructures them in a future Newton release, this method will raise AttributeError at runtime with no clear failure message. It would be safer to access them through whatever public API Newton exposes, or at minimum document the Newton version these attributes were verified against.

Reviews (1): Last reviewed commit: "Merges changes from main (#5824)" | Re-trigger Greptile

Comment on lines +234 to +237
except Exception:
positions.clear()

if scene is not None:
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 The bare except Exception that clears positions and falls through to the next strategy swallows the original error completely. If FrameView fails for a reason other than "this prim type isn't supported" (e.g., a wrong import, a GPU OOM, a partial iteration where 8 of 10 envs succeeded), there is no log entry to explain why the slower fallback path was taken. Adding a logging.debug here would make production triage much easier.

Suggested change
except Exception:
positions.clear()
if scene is not None:
except Exception as _e:
import logging as _logging
_logging.getLogger(__name__).debug(
"FrameView path failed for prim_path_template=%r; falling back to scene/USD path. Reason: %s",
prim_path_template,
_e,
)
positions.clear()
if scene is not None:

@kellyguo11 kellyguo11 merged commit a84e02b into isaac-sim:release/3.0.0-beta2 May 28, 2026
36 of 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.

4 participants