Cherry-picks doc fixes/updates, demo/benchmark scripts, default num_envs, shutdown error, mjcf fix#5888
Conversation
# 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>
There was a problem hiding this comment.
🤖 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.pysource/isaaclab/isaaclab/envs/direct_marl_env.pysource/isaaclab/isaaclab/envs/manager_based_env.pyscripts/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
-
Quadcopter API fix (
scripts/demos/quadcopter.py):
robot.data.body_mass.torch[0].sum()is the correct public API, matching the pattern used inisaaclab/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. -
H1 locomotion deprecation handler (
scripts/demos/h1_locomotion.py):
The import ofhandle_deprecated_rsl_rl_cfgand usage withmetadata.version("rsl-rl-lib")exactly matches the pattern inscripts/reinforcement_learning/rsl_rl/train.py. -
Sphinx extension (
docs/_extensions/isaaclab_docs.py):
Properly implementssetup()withparallel_read_safe=Trueandparallel_write_safe=True. Directives correctly useSphinxDirectivebase class andnested_parsefor RST generation. -
docs/conf.pychanges:
Extension registration,sys.pathinsertion,exclude_patternsfor include-only fragments, andrst_prologwith substitution are all correctly structured. -
Environment doc tooling (
tools/environ_docs.py):
Well-designed with comprehensive test coverage intools/test/test_environ_docs.py(276 lines of tests). The marker-basedpatch_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:
--viz kitflag to URDF/MJCF conversion examples in documentation (consistent across Linux/Windows tabs)- MJCF converter fix — enables
isaacsim.asset.importer.mjcfextension before importing (addresses the "mjcf fix" from #5882) - Updated
test_mjcf_converter.pyto 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_envsdefaults and__del__shutdown error fixes still appear absent. - Broad exception suppression in
environ_docs.py: Not addressed (non-blocking). - Inline suggestions on
environ_docs.pyandtest_environ_docs.py: Not addressed (non-blocking).
No new issues found in these changes.
Greptile SummaryThis cherry-pick bundles documentation fixes targeting
Confidence Score: 4/5Safe 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
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]
Reviews (1): Last reviewed commit: "update develop branch to release/3.0.0-b..." | Re-trigger Greptile |
| 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"] |
There was a problem hiding this comment.
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.
| 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"] |
| 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" |
There was a problem hiding this comment.
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.
| 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!
…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 -->
7e26bd3
into
isaac-sim:release/3.0.0-beta2
Description
Cherry-pick PRs from develop: