Cherry-picks RLinf/compass doc updates, visualizer fixes, presets and imports fixes, Newton 1.2.1rc2 pin#6014
Conversation
# Description
Bug : 6247480
Observation:
1. Documented checkpoint save path <output_dir>/checkpoints/ does not
match actual
behavior — checkpoints are saved directly under <output_dir>/
The doc states:
"The resulting checkpoint will be stored in <output_dir>/checkpoints/
with the filename
model_<iteration_number>.pt"
Actual directory layout after training completes:
~/compass-nurec/output/galileo_spot/
├── model_0.pt
├── model_50.pt
├── model_100.pt
├── model_150.pt
├── model_200.pt
├── debug_images/
├── tensorboard/
└── videos/
No checkpoints/ subdirectory is created. Checkpoint files are written
directly to the
output root. Any user or test step that follows the doc and checks
<output_dir>/checkpoints/ for verification will get:
ls: cannot access '<output_dir>/checkpoints/': No such file or directory
Command:
${ISAACLAB_PATH:?}/isaaclab.sh -p run.py \ -c
configs/train_config_real2sim.gin \ -o
~/compass-nurec/output/galileo_spot \ -b
~/compass-nurec/X-Mobility/x_mobility-nav2-semantic_action_path.ckpt \
--embodiment spot \ --environment nova_carter-galileo \ --num_envs 64 \
--video --video_interval 1 \ --visualizer kit \ --enable_cameras \
--precompute_valid_poses
File:
docs/source/policy_deployment/03_compass_with_NuRec/compass_navigation_policy_with_NuRec.rst
Doc:
https://isaac-sim.github.io/IsaacLab/release/3.0.0-beta2/index.html
Error Logs: N/A
Expected:
Doc should state checkpoints are saved directly at
<output_dir>/model_<N>.pt. Checkpoint save interval is every 50
iterations (confirmed: model_0.pt, model_50.pt, model_100.pt, etc.).
## 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
-->
<!-- 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. --> Fixes - remove legacy isaaclab_visualizers/setup.py - fix too small ground plane mesh in Rerun and Viser visualizers in some envs - fix flickering ground in Viser visualizer - fix library conflict with imgui_bundle, which broke Newton viewer's HUD - expand viz test to include a specific check for imgui_bundle failure to load (this often occurs due to new conflict libraries which causes Newton visualizer HUD to break) - prevent log spam from [Warning] [omni.physx.tensors.plugin] Failed to find rigid body... - add contact arrows to newton visualizer with a limitation note to the visualization docs - fix an edgecase where wrong viz marker prototype is used when marker count equals number of prototype - move the xr visualization test from test/visualization -> test/xr_visualization to separate it more from test/visualizers <!-- 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) 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 Fix broken docs links due to LEAPP update and IsaacSim update that moved docs around. ## 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: Antoine Richard <antoiner@nvidia.com>
…olution (isaac-sim#5944) alternative to isaac-sim#5939 - Selecting a typed preset (e.g. `presets=newton_mjwarp`) on a task that does **not** declare that name on a `PhysicsCfg`/`RendererCfg` previously created a silent mixed configuration: the name would match an unrelated scalar/sensor preset that happens to share the name, tuning those fields while leaving the real backend (e.g. PhysX) untouched. This adds a post-resolution check that a selected *reserved* typed name actually landed on a config of its own type at least once, and raises a clear `ValueError` otherwise. - The set of reserved canonical names is declared per typed target in `PresetTarget` (`preset_target.py`) — `PHYSICS = {newton_mjwarp, newton_kamino}`, plus the known renderer backends. New solvers/renderers opt in by adding their name there; the resolver hardcodes nothing. `physx`/`ovphysx` are intentionally **not** reserved (PhysX is the default backend, so selecting it on a task without a physics preset is harmless rather than a silent mismatch). - Implementation is minimal: one `typed_hits: set[str]` threaded through `_pick_alternative`/`_resolve_active_presets` records when a reserved name resolves to a value of its target type; `_validate_typed_presets` then flags `reserved-selected ∩ consumed − typed_hits`. Truly-unknown names continue to flow to the existing "Unknown preset(s)" error path. | Invocation | Result | |---|---| | `Isaac-Velocity-Flat-Anymal-C-v0 presets=newton_mjwarp` | resolves (lands on `NewtonCfg`) | | `Isaac-Navigation-Flat-Anymal-C-v0 presets=newton_mjwarp` | `ValueError` (no Newton physics; only matched a sensor/scalar) | | `Isaac-Navigation-Flat-Anymal-C-v0 presets=physx` | resolves (PhysX not reserved, benign) | | `Isaac-Navigation-Flat-Anymal-C-v0 presets=newton_kamino` | "Unknown preset(s)" (unchanged path) | | legacy alias `presets=newton` on navigation | `ValueError` (canonicalized to `newton_mjwarp`) | - [x] `./isaaclab.sh -p -m pytest source/isaaclab_tasks/test/core/test_hydra.py` (added 7 regression tests for the validator + end-to-end resolution; full file passes) - [x] `test_preset_cli.py`, `test_newton_solver_preset_names.py`, `test_preset_kit_decision.py` pass - [x] Config-resolution probes for the table above - [x] `pre-commit` (ruff/format/codespell/rst/license) green - [ ] CI A changelog fragment is included under `source/isaaclab_tasks/changelog.d/`.
- Bump all mirrored `newton[sim]` git pins from `v1.2.0` to `v1.2.1rc2`. - Update the wheel builder dependency list to use the same Newton tag. - Add changelog fragments for the touched Newton, PhysX, and visualizer packages. - `git ls-remote --tags https://github.com/newton-physics/newton.git v1.2.1rc2` - `python tools/changelog/cli.py compile --package isaaclab_newton --dry-run` - `python tools/changelog/cli.py compile --package isaaclab_physx --dry-run` - `python tools/changelog/cli.py compile --package isaaclab_visualizers --dry-run` - Changelog gate logic against `upstream/develop` - `git diff --check upstream/develop...HEAD` - Parsed edited TOML files with `tomllib` - `python -m py_compile source/isaaclab_visualizers/setup.py`
## Summary - `lazy_export()` packages declare their export surface in a sibling `.pyi` stub, and relative submodule imports (`from . import <sub>`) belong in that stub so they resolve lazily. A few `__init__.py` files still imported submodules eagerly, which forced the submodule (and its transitive imports) to load at package-import time and defeated the lazy stub. - `isaaclab/envs/__init__.py`: moved `from . import mdp, ui` into `envs/__init__.pyi` (added to the stub imports and `__all__`). - `isaaclab/sensors/ray_caster/__init__.py`: removed the redundant `from . import patterns` — the stub already declared `patterns`. After the change, `import isaaclab.envs` no longer pulls `mdp`/`ui` eagerly (verified they are absent from `sys.modules` until first access), while `isaaclab.envs.mdp`, `from isaaclab.envs import mdp`, `ui`, `ray_caster.patterns`, and all named class exports still resolve correctly. Left intentionally unchanged: `isaaclab/utils/warp/__init__.py` eagerly runs `wp.init()` and monkeypatches `wp.to_torch` (its `ProxyArray` import feeds that runtime shim), so it is genuine eager initialization rather than a re-export. ## Test plan - [x] `import isaaclab.envs` → `mdp`/`ui` not in `sys.modules`; resolve on access. - [x] `from isaaclab.envs import mdp, ManagerBasedRLEnv` and `import isaaclab.sensors.ray_caster; ray_caster.patterns` all resolve. - [x] `pre-commit` (ruff / ruff-format) passes on the changed files.
Resolve issues with valid Windows paths and the installation of decord on Spark. - Bug fix (non-breaking change which fixes an issue) - 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 - [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 -->
…izers (isaac-sim#5927) # 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. --> Add tutorial script and documentation for Tiled Camera View in Visualizers <!-- 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. --> - New feature (non-breaking change which adds functionality) - Documentation update ## Screenshots Please attach before and after screenshots of the change if applicable. <!-- Example: | Before | After | | ------ | ----- | | _gif/png before_ | _gif/png after_ | To upload images to a PR -- simply drag and drop an image while in edit mode and it should upload the image directly. You can then paste that source into the above before/after sections. --> ## Checklist - [ ] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [ ] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format` - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there <!-- As you go through the checklist above, you can mark something as done by putting an x character in it For example, - [x] I have done this task - [ ] I have not done this task --> --------- Signed-off-by: matthewtrepte <mtrepte@nvidia.com>
There was a problem hiding this comment.
Code Review Summary
This cherry-pick PR bundles 8 commits from develop covering: documentation fixes (COMPASS, LEAPP, links), visualizer improvements (contacts, tiled camera tutorial, ground plane rendering, imgui dependency checks), preset/Hydra refactoring (typed-selector validation, fold_preset_tokens removal), lazy-import fixes, Newton v1.2.1rc2 pin bump, and PhysX rigid-body-view hardening.
Overall the changes are well-structured and improve both the user experience and internal consistency. The "clean up" commit (e3a6487) fixed the duplicate-import issue from the prior review. One critical item remains:
🔴 Critical: Tutorial script imports removed function
scripts/tutorials/07_visualizers/run_tiled_camera_visualizer.py (lines 34-36, 125)
The new tutorial script imports and uses fold_preset_tokens:
from isaaclab_tasks.utils import (
add_launcher_args,
fold_preset_tokens, # ← removed from public API in this same PR
...
)And later calls it (line 125):
sys.argv = [sys.argv[0]] + fold_preset_tokens(hydra_args)This PR removes fold_preset_tokens from isaaclab_tasks.utils (see preset_cli.py and __init__.pyi). This will produce an ImportError at runtime. The fix is to align with the pattern used everywhere else:
from isaaclab_tasks.utils import (
add_launcher_args,
launch_simulation,
resolve_task_config,
setup_preset_cli,
)sys.argv = [sys.argv[0]] + hydra_args🟡 Minor: Image filename typo — "iteractive"
docs/source/_static/visualizers/kit_viz_anymal_iteractive_view.jpg
The filename contains a typo: iteractive should be interactive. This also propagates to the RST reference in docs/source/how-to/visualizer_tiled_camera.rst:
.. figure:: ../_static/visualizers/kit_viz_anymal_iteractive_view.jpgNot a functional issue, but would be nice to fix for consistency with the interactive_view naming used by the Newton image.
🟡 Note: PhysX rigid-body-view name collision matching
source/isaaclab_physx/isaaclab_physx/physics/physx_manager.py (around line 195)
The new logic collects non_rigid_body_names using only the leaf prim name:
non_rigid_body_names.add(prim_path.rsplit("/", 1)[-1])If a non-rigid prim shares its leaf name (e.g. collision, visual) with a rigid-body prim at a different hierarchy location, the rigid-body prim will be kept as exact per-env paths rather than wildcarded. In high-env-count scenes (4096+) this could create many explicit paths. The correctness direction is right — just a note for future performance consideration if common leaf names trigger false positives.
🔵 Observation: PR title says "Newton 1.3.1rc2" but code pins v1.2.1rc2
The PR title references "Newton 1.3.1rc2" while the actual pin in all setup.py files is v1.2.1rc2. This is cosmetic but could confuse anyone searching by version number.
✅ Positive observations
- The typed-preset validation in
hydra.pyis well-designed with propertyped_hitstracking threaded through the resolution chain. VisualizationMarkersedge-case fix (marker count == prototype count) is clean and covered by a new unit test.- Newton contact arrow rendering with scene-contact-sensor fallback and proper visibility filtering is solid.
expand_infinite_plane_scaleis well-factored with thorough unit tests covering all edge cases.- Newton v1.2.1rc2 pin consistently applied across all 4 locations.
- The imgui-bundle integration test assertion (
assert_no_newton_imgui_bundle_warning) is good defensive CI. - Pre-commit, Build Wheel, Check for Broken Links, and Check changelog fragments all pass ✓.
- The
prim_world_positions()reordering (scene articulation first) correctly avoids expensive USD traversal.
Verdict: One critical item remains — the tutorial script's fold_preset_tokens import will fail at runtime and should be patched before merge. Everything else looks good.
Update (commit b2ca1b6): ✅ The critical issue is fixed — fold_preset_tokens import has been removed and sys.argv = [sys.argv[0]] + hydra_args is now used directly, matching all other scripts. No new issues introduced in this commit. LGTM.
Greptile SummaryThis cherry-pick consolidates eight PRs onto
Confidence Score: 3/5The new tutorial script crashes on import due to a removed API; the core library changes are solid. The new
Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A["CLI: physics=NAME / renderer=NAME / presets=NAME"] --> B["setup_preset_cli()\nreturns verbatim remainder"]
B --> C["sys.argv = [argv0] + remainder"]
C --> D["register_task()\nparses tokens from sys.argv"]
D --> E["_resolve_active_presets()\nwalks config tree\ncollects typed_hits"]
E --> F{"typed selector?"}
F -- "physics= / renderer=" --> G["_validate_typed_presets()\nensures name hit its type"]
G -- "hit found" --> H["Hydra DictConfig\nregistered"]
G -- "no hit" --> I["ValueError:\nTyped preset selector did not match"]
F -- "presets= broadcast" --> H
H --> J["launch_simulation()"]
|
| from isaaclab_tasks.utils import ( | ||
| add_launcher_args, | ||
| fold_preset_tokens, | ||
| launch_simulation, | ||
| resolve_task_config, | ||
| setup_preset_cli, | ||
| ) |
There was a problem hiding this comment.
Removed API imported by new tutorial script
fold_preset_tokens was deleted from preset_cli.py and removed from __init__.pyi in this same PR; every other updated script now assigns sys.argv = [sys.argv[0]] + hydra_args directly. Because isaaclab_tasks/utils/__init__.py drives its public exports via lazy_export() (which reads the .pyi stub), fold_preset_tokens is no longer available at runtime. Running this new tutorial script will immediately raise ImportError: cannot import name 'fold_preset_tokens'. The fix is to drop the import and use hydra_args directly, exactly as the other scripts do.
| add_launcher_args(parser) | ||
| args_cli, hydra_args = setup_preset_cli(parser) | ||
| args_cli.task = _resolve_task(args_cli) | ||
| sys.argv = [sys.argv[0]] + fold_preset_tokens(hydra_args) |
Incremental Review Update (e3a6487)Commit reviewed: ✅ New Changes Look GoodThe new commit removes duplicate imports from 14 files across
No new issues introduced. 🔴 Critical Issue Still OutstandingThe tutorial script issue from the original review remains unaddressed:
Status Summary
Verdict: The cleanup commit is good, but the critical tutorial import issue must still be resolved before merge. |
Description
Cherry pick fixes from develop: