Skip to content

Cherry-picks doc fixes/updates, demo/benchmark scripts, default num_envs, shutdown error, mjcf fix#5888

Merged
kellyguo11 merged 6 commits into
isaac-sim:release/3.0.0-beta2from
kellyguo11:cherry-pick-0530
May 31, 2026
Merged

Cherry-picks doc fixes/updates, demo/benchmark scripts, default num_envs, shutdown error, mjcf fix#5888
kellyguo11 merged 6 commits into
isaac-sim:release/3.0.0-beta2from
kellyguo11:cherry-pick-0530

Conversation

@kellyguo11
Copy link
Copy Markdown
Contributor

@kellyguo11 kellyguo11 commented May 31, 2026

YizeWang and others added 4 commits May 30, 2026 18:52
# Description

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

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

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

This PR fixes demo scripts that were using outdated tensor/view APIs.

The quadcopter demo now reads robot mass through the public
`robot.data.body_mass` API. The H1 locomotion demo now applies the
RSL-RL deprecated config handler based on the installed `rsl-rl-lib`
version. This PR also adds Yize Wang to `CONTRIBUTORS.md`.

Fixes NV Bugs:
- 6199772 (quadcopter.py)
- 6161743 (quadcopter.py)
- 6120938 (h1_locomotion.py)

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

## Screenshots

Fixed scripts:
<img width="960" height="528" alt="h1_locomotion"
src="https://github.com/user-attachments/assets/bc7d9e1d-2326-40ce-837a-a39b36806aa7"
/>
<img width="960" height="528" alt="quadcopter"
src="https://github.com/user-attachments/assets/7f25d035-d75e-4efd-92ca-e72453eb06de"
/>

Validation of other scripts:
<img width="960" height="528" alt="arl_robot_1"
src="https://github.com/user-attachments/assets/16f27afe-d712-4ff3-9ad3-afd6104b520d"
/>
<img width="960" height="528" alt="arms"
src="https://github.com/user-attachments/assets/e86d0b9c-8fdb-4dc4-905d-3130f46b2f14"
/>
<img width="960" height="528" alt="bipeds"
src="https://github.com/user-attachments/assets/00319d50-1810-4021-a7e0-4df7d873959a"
/>
<img width="960" height="528" alt="multi_asset"
src="https://github.com/user-attachments/assets/9b448f57-504d-4203-b6b3-1c73053ff221"
/>
<img width="960" height="528" alt="pick_and_place"
src="https://github.com/user-attachments/assets/884027cd-1b26-4865-83f4-11754f814f24"
/>
<img width="960" height="528" alt="procedural_terrain"
src="https://github.com/user-attachments/assets/eba408d2-b5d4-4280-87ce-31938000fdb5"
/>
<img width="960" height="528" alt="quadrupeds"
src="https://github.com/user-attachments/assets/9b9ccfbb-5228-47da-a9f6-f7b2aaff7e3f"
/>
<img width="960" height="528" alt="hands"
src="https://github.com/user-attachments/assets/a24e10fa-76d2-48f7-b3a2-dcecb7486f25"
/>
<img width="960" height="528" alt="markers"
src="https://github.com/user-attachments/assets/a70dcf0a-ca4e-4a4f-896d-bc9d30e40645"
/>
<img width="960" height="528" alt="deformables"
src="https://github.com/user-attachments/assets/3af3d761-9ba3-4bf6-b698-523732475a2a"
/>

<!--
Example:

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

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

## Checklist

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

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

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

---------

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

Updates documentation for Spark to install cuda 13 jax. Remove
limitation of SKRL Jax training on Spark.

## 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
-->
- Add maintainer tooling (tools/environ_docs.py,
tools/update_environments_rst.py) to auto-generate the comprehensive
environment list in environments.rst from the Gym registry (RL
libraries, presets, workflows, and inference task names), with manual
overrides for RLinf-only tasks and camera task notes.
- Introduce a shared clone snippet (isaaclab_latest_clone.rst) and a
Sphinx substitution (|isaaclab_latest_branch|, default
release/3.0.0-beta2) used across installation, quickstart, deployment,
and policy docs; clone commands use parsed-literal so the branch name
renders correctly.
- Refresh environments.rst to stay in sync with the registry (166
training environments), update README links/version table for
release/3.0.0-beta2, and clean up stale develop-branch compatibility
warnings and a few doc link fixes.

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

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

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

---------

Signed-off-by: Kelly Guo <kellyg@nvidia.com>
@github-actions github-actions Bot added documentation Improvements or additions to documentation isaac-lab Related to Isaac Lab team infrastructure labels May 31, 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.

🤖 Automated Review for PR #5888

This cherry-pick PR collects fixes from PRs #5866, #5879, and #5884 into the release/3.0.0-beta2 branch, adding documentation infrastructure improvements, demo script bug fixes, and new maintainer tooling for auto-generating environment documentation.


📋 Summary

Category Files Assessment
Documentation Infrastructure docs/_extensions/isaaclab_docs.py, docs/conf.py ✅ Well-structured
Environment Doc Tooling tools/environ_docs.py, tools/update_environments_rst.py, tools/test/ ✅ Good design with tests
Demo Bug Fixes scripts/demos/h1_locomotion.py, scripts/demos/quadcopter.py ✅ Correct API migration
Doc Content Updates 20+ .rst files ✅ Consistent branch references
CI/Tests test_uv_pip_install_isaaclab_rl_tasks_imports_rl_tasks.py ✅ Good coverage addition

🔍 Findings

1. Missing Cherry-Pick: PR #5882 Not Included (Medium)

File: PR description
Issue: The PR description references cherry-picking #5882 (drone navigation num_envs default fix, camera benchmark fix, and __del__ shutdown error fix), but this PR's commits only include #5866, #5884, and #5879. None of the 8 files from #5882 are present in the diff:

  • source/isaaclab/isaaclab/envs/direct_rl_env.py
  • source/isaaclab/isaaclab/envs/direct_marl_env.py
  • source/isaaclab/isaaclab/envs/manager_based_env.py
  • scripts/benchmarks/benchmark_cameras.py
  • Drone navigation config files

The PR title also mentions "drone navigation default num_envs, shutdown error" which are exclusively from #5882. Consider either including the missing cherry-pick or updating the title/description to reflect actual content.

2. Broad Exception Suppression in _physics_names_for_docs (Low)

File: tools/environ_docs.py (line ~185)

with contextlib.suppress(Exception):
    names |= _infer_implicit_physics_names(task_name)

This suppresses all exceptions including TypeError, AttributeError, and other bugs. Since this is a documentation generation tool (not runtime), a narrower catch like (ImportError, KeyError, AttributeError, ValueError) would be safer to avoid silently masking real bugs during development. Alternatively, logging suppressed exceptions at debug level would aid maintainability.

3. CI: "Check for Broken Links" Failure is Transient (Info)

The CI failure is caused by a transient 502 response from https://github.com/isaac-sim/IsaacLab/pull/3174, which is unrelated to this PR's changes. This is a known flaky check.


✅ Verified Correctness

  1. Quadcopter API fix (scripts/demos/quadcopter.py):
    robot.data.body_mass.torch[0].sum() is the correct public API, matching the pattern used in isaaclab/envs/mdp/events.py (self.asset.data.body_mass.torch.clone()). The [0] index correctly selects the first environment instance for this single-env demo.

  2. H1 locomotion deprecation handler (scripts/demos/h1_locomotion.py):
    The import of handle_deprecated_rsl_rl_cfg and usage with metadata.version("rsl-rl-lib") exactly matches the pattern in scripts/reinforcement_learning/rsl_rl/train.py.

  3. Sphinx extension (docs/_extensions/isaaclab_docs.py):
    Properly implements setup() with parallel_read_safe=True and parallel_write_safe=True. Directives correctly use SphinxDirective base class and nested_parse for RST generation.

  4. docs/conf.py changes:
    Extension registration, sys.path insertion, exclude_patterns for include-only fragments, and rst_prolog with substitution are all correctly structured.

  5. Environment doc tooling (tools/environ_docs.py):
    Well-designed with comprehensive test coverage in tools/test/test_environ_docs.py (276 lines of tests). The marker-based patch_environments_rst() approach is maintainable.


🏁 Verdict

No blocking issues. The one substantive observation is the missing #5882 cherry-pick which should either be included or removed from the description. The broad exception suppression in environ_docs.py is a minor maintainability concern. Otherwise, the code changes are correct and well-tested.


Update (commit 536cddc): New commit removes test_uv_pip_install_isaaclab_rl_tasks_imports_rl_tasks.py (CI test file). No new issues introduced. Previous findings (missing #5882 cherry-pick, broad exception suppression, inline suggestions on environ_docs.py and test_environ_docs.py) remain unaddressed but are non-blocking.


Update (commit 2d5015a): New commits add:

  1. --viz kit flag to URDF/MJCF conversion examples in documentation (consistent across Linux/Windows tabs)
  2. MJCF converter fix — enables isaacsim.asset.importer.mjcf extension before importing (addresses the "mjcf fix" from #5882)
  3. Updated test_mjcf_converter.py to avoid enabling the extension in test setup, verifying the converter does it itself

✅ The MJCF fix is correct: uses get_extension_manager().set_extension_enabled_immediate() with a proper guard check. The test properly validates this behavior.

Previous findings status:

  • Missing #5882 content: Partially addressed — MJCF fix is now included. The num_envs defaults and __del__ shutdown error fixes still appear absent.
  • Broad exception suppression in environ_docs.py: Not addressed (non-blocking).
  • Inline suggestions on environ_docs.py and test_environ_docs.py: Not addressed (non-blocking).

No new issues found in these changes.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 31, 2026

Greptile Summary

This cherry-pick bundles documentation fixes targeting release/3.0.0-beta2 (branch references, JAX install instructions, installation guide restructuring), plus two runtime fixes in demo scripts and a new auto-generation pipeline for the comprehensive environment list.

  • Demo fixes: quadcopter.py replaces the deprecated root_view.get_masses() call with data.body_mass.torch[0].sum(), and h1_locomotion.py adds the missing handle_deprecated_rsl_rl_cfg call that was triggering a shutdown error.
  • Auto-generated environment table: A new Sphinx extension (isaaclab_docs.py) and tooling (tools/environ_docs.py, tools/update_environments_rst.py) generate the comprehensive environment list directly from the Gym registry, removing the need to maintain it by hand; the new table also correctly reflects many additional environments and updated preset/RL-library labels.

Confidence Score: 4/5

Safe to merge. The two demo fixes are straightforward API-migration patches and the documentation restructuring is extensive but low-risk.

Changes are largely documentation and tooling. The two demo script fixes are small and targeted. The new environ_docs.py pipeline has good unit-test coverage and the generated environments.rst output matches expectations. The only notes are a test that implicitly depends on live task registration and a minor robustness gap in get_workflow; neither affects runtime behaviour.

tools/test/test_environ_docs.py (live-task integration assertion) and tools/environ_docs.py (get_workflow string-check) are the only spots worth a second look.

Important Files Changed

Filename Overview
scripts/demos/quadcopter.py Fixes mass lookup from deprecated root_view.get_masses() to data.body_mass.torch[0].sum(). The [0] index is correct for this single-robot demo.
scripts/demos/h1_locomotion.py Adds handle_deprecated_rsl_rl_cfg call to suppress the deprecation-related shutdown error when loading the pre-trained RSL-RL runner config.
tools/environ_docs.py New utility for auto-generating the environments.rst table from the Gym registry; logic is well-structured with appropriate exception suppression around optional inference.
tools/update_environments_rst.py New maintainer script; correctly handles read/write/check modes and exits with appropriate codes.
tools/test/test_environ_docs.py Good unit test coverage for environ_docs helpers; one test (test_physics_names_for_docs_infers_physx_from_default) implicitly depends on live task registration, making it an integration test in unit clothing.
docs/_extensions/isaaclab_docs.py New Sphinx extension generating branch-pinned clone/install code blocks; cleanly registered and supports overriding the branch via ISAACLAB_LATEST_BRANCH env var.
docs/conf.py Registers the new Sphinx extension, sets isaaclab_latest_branch config value and rst_prolog, and moves installation include fragments to exclude_patterns.
docs/source/overview/environments.rst Large update: adds auto-generation markers for the comprehensive environment list, corrects ovphysx (direct only) notes, and adds the _comprehensive-environment-list ref label.
source/isaaclab/test/install_ci/uv_pip/test_uv_pip_install_isaaclab_rl_tasks_imports_rl_tasks.py New CI test verifying [all] wheel installs RL libraries without pulling in isaacsim; properly gated with @pytest.mark.docker and skip guard when uv is absent.
tools/wheel_builder/res/python_packages.toml Minor comment update clarifying that [all] is for kit-less use and Newton must not be added here due to Isaac Sim pin conflicts.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Gym Registry\n gymnasium.register] -->|all registered specs| B[collect_environment_doc_rows\nenviron_docs.py]
    B --> C{is_training_task?}
    C -- No --> D[skip]
    C -- Yes --> E[enumerate_task_presets\npreset_cli]
    E --> F[_physics_names_for_docs\n+ implicit PhysX inference]
    B --> G[parse_rl_libraries_from_kwargs\n+ apply_rl_library_overrides]
    F --> H[format_presets_rst]
    G --> I[format_rl_libraries]
    H --> J[EnvironmentDocRow]
    I --> J
    J --> K[render_comprehensive_list_table]
    K --> L[patch_environments_rst\nenvironments.rst]
    L --> M{--check mode?}
    M -- Yes --> N[Exit 1 if stale\nExit 0 if up-to-date]
    M -- No --> O[Write updated environments.rst]
Loading

Reviews (1): Last reviewed commit: "update develop branch to release/3.0.0-b..." | Re-trigger Greptile

Comment on lines +164 to +169
def test_physics_names_for_docs_infers_physx_from_default():
names = _physics_names_for_docs(
"Isaac-Velocity-Flat-G1-v0",
{PresetTarget.PHYSICS: ["newton_mjwarp"], PresetTarget.DOMAIN: [], PresetTarget.RENDERER: []},
)
assert names == ["newton_mjwarp", "physx"]
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 This test calls _physics_names_for_docs with a real task name, which internally calls _infer_implicit_physics_names("Isaac-Velocity-Flat-G1-v0"). That function loads the live env config from the registry, imports isaaclab_physx and isaaclab_tasks, and inspects actual preset objects. If the G1 task's default physics changes or the task is unregistered, the assertion silently fails because _physics_names_for_docs suppresses all exceptions and just returns ["newton_mjwarp"] — making the failure look like a logic regression rather than a missing dependency. The other tests in this file all use mock EnvSpec objects; this one should too.

Suggested change
def test_physics_names_for_docs_infers_physx_from_default():
names = _physics_names_for_docs(
"Isaac-Velocity-Flat-G1-v0",
{PresetTarget.PHYSICS: ["newton_mjwarp"], PresetTarget.DOMAIN: [], PresetTarget.RENDERER: []},
)
assert names == ["newton_mjwarp", "physx"]
def test_physics_names_for_docs_infers_physx_from_default():
# Integration assertion: depends on Isaac-Velocity-Flat-G1-v0 declaring PhysxCfg()
# as its default physics preset (see _infer_implicit_physics_names).
names = _physics_names_for_docs(
"Isaac-Velocity-Flat-G1-v0",
{PresetTarget.PHYSICS: ["newton_mjwarp"], PresetTarget.DOMAIN: [], PresetTarget.RENDERER: []},
)
# If this fails unexpectedly, verify the G1 task config still uses PhysxCfg() as default.
assert names == ["newton_mjwarp", "physx"]

Comment thread tools/environ_docs.py
Comment on lines +231 to +235
def get_workflow(entry_point: str) -> str:
"""Return the human-readable workflow label for a Gym entry point."""
if "ManagerBasedRLEnv" in entry_point:
return "Manager Based"
return "Direct"
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 get_workflow performs "ManagerBasedRLEnv" in entry_point without guarding for non-string entry points. If a task is registered with a callable, this raises TypeError. Adding an isinstance guard prevents silent mislabelling or a runtime error if that registration pattern is ever used.

Suggested change
def get_workflow(entry_point: str) -> str:
"""Return the human-readable workflow label for a Gym entry point."""
if "ManagerBasedRLEnv" in entry_point:
return "Manager Based"
return "Direct"
def get_workflow(entry_point: str) -> str:
"""Return the human-readable workflow label for a Gym entry point."""
if isinstance(entry_point, str) and "ManagerBasedRLEnv" in entry_point:
return "Manager Based"
return "Direct"

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!

@kellyguo11 kellyguo11 changed the title Cherry-picks documentation fixes and updates, fixes for demo and benchmark scripts, drone navigation default num_envs, shutdown error Cherry-picks doc fixes/updates, demo/benchmark scripts, default num_envs, shutdown error, mjcf fix May 31, 2026
…sim#5889)

# Description

Adds missing isaac sim extension enable call for MJCF importer
Updates stale importer docs to use new visualizer arguments

## 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
-->
@kellyguo11 kellyguo11 merged commit 7e26bd3 into isaac-sim:release/3.0.0-beta2 May 31, 2026
60 of 61 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-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants