Sync fpgs-dev with develop#6599
Merged
ooctipus merged 116 commits intoJul 18, 2026
Merged
Conversation
Revisited the solver parameters. Now, the environments consistently use num_substeps=1. Tuned also the settings for the DR Legs task, making training 3x faster. ## 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 - [ ] 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
## Summary - Deferred Kit and USD imports from modules loaded during task and configuration resolution until the runtime functionality requires them. - Prevented overlapping standalone USD package providers on x86 by restricting `usd-exchange` to ARM, where `usd-core` is not installed. - Added a metadata regression test that keeps the standalone USD providers platform-disjoint. ## Root Cause The failing installation-training environments loaded incompatible USD Python bindings in one process, with traces showing both `pxrInternal_v0_25_5` and `pxrInternal_v0_25_11`. On x86, `usd-core` and `usd-exchange` both supplied USD/`pxr` components. Their coexistence made native binding initialization depend on installation and import order, producing wrapper and converter registration failures. ## Test Plan - `./isaaclab.sh -p -m pytest source/isaaclab/test/cli/test_source_package_metadata.py` - `./isaaclab.sh -f` - Installation Tests: fresh successful run plus 10 successful reruns, each passing on x86 and ARM. ## CI Validation - Fresh run: x86 `84271139083`, ARM `84271139099` - Reruns 1-5: x86 `84278649544`, `84284392796`, `84297138420`, `84306527331`, `84317891132`; ARM `84278649480`, `84284392767`, `84297138393`, `84306527439`, `84317891100` - Reruns 6-10: x86 `84343375232`, `84356535895`, `84361942197`, `84373650598`, `84379046431`; ARM `84343375249`, `84356535827`, `84361942203`, `84373650527`, `84379046460` --------- Signed-off-by: Antoine RICHARD <antoiner@nvidia.com> Co-authored-by: hujc <leo.hu.sh@gmail.com>
# Description Fourbar-pole swingup RL example that uses Kamino. Builds on the core Kamino changes in isaac-sim#5962 The USD model is added to `newton-assets` in newton-physics/newton-assets#44 See video for a trained policy. 5s episode -> reset -> 5s episode. https://github.com/user-attachments/assets/9deb0597-6653-4614-b05f-5f3a03f0ff74 ## 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 - [ ] 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 --------- Co-authored-by: Agon Serifi <agon.serifi@disney.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Antoine RICHARD <antoiner@nvidia.com>
Bumped packages: - isaaclab: 8.1.2 → 9.0.0 - isaaclab_assets: 0.4.1 → 0.4.2 - isaaclab_ovphysx: 6.1.0 → 6.1.1 - isaaclab_tasks: 8.1.5 → 8.1.6
… utilities (isaac-sim#6334) # Description Moves the rigid object and rigid object collection interface test factories into shared underscore-prefixed utility modules so later parts can reuse them. Pure code movement with no behavior change and no ordering content. Part 1/8 of the series splitting isaac-sim#6248 into independently reviewable units. isaac-sim#6248 remains open, untouched, as the reference implementation; this stack was cut from its final tree after a `develop` sync (Kamino Core, Newton bump, OVPhysX 0.5.1). ## Stack - **Part 1/8 (this PR)**: isaac-sim#6334 — Extract rigid object interface test utilities - Part 2/8: isaac-sim#6335 — Core ordering foundation - Part 3/8: isaac-sim#6336 — Newton backend - Part 4/8: isaac-sim#6337 — PhysX backend - Part 5/8: isaac-sim#6338 — Extract articulation interface test utilities - Part 6/8: isaac-sim#6339 — OVPhysX backend - Part 7/8: isaac-sim#6340 — Cross-backend ordering interface tests - Part 8/8: isaac-sim#6341 — Events, consumers, and documentation ## Type of change - Test/documentation/refactor change ## 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 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 - [x] My name exists in `CONTRIBUTORS.md` ## Test Plan - [x] `./isaaclab.sh -p -m pytest source/isaaclab/test/assets/test_rigid_object_iface.py` -> 1478 passed, 12 xfailed - [x] `./isaaclab.sh -p -m pytest source/isaaclab/test/assets/test_rigid_object_collection_iface.py` -> 1902 passed; the 7 failures + 636 errors are pre-existing on `develop` in the local environment (OVPhysX 0.4.13 wheel vs the 0.5.x binding API from isaac-sim#6314) — fail-set identical to the `develop` baseline - [x] `./isaaclab.sh -f` -> all hooks pass --------- Signed-off-by: Antoine RICHARD <antoiner@nvidia.com> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
# Description Repeated sensor data reads currently re-enter the backend update implementation even when the cached data is already fresh. For PhysX contact sensors, this repeats getters such as get_net_contact_forces() before the device mask can suppress masked kernel work. This change adds a synchronization-free host freshness generation to SensorBase. Updates and resets invalidate the generation, ordinary repeated reads reuse the cached buffers, and force_recompute=True bypasses the guard. Regression coverage includes repeated reads, full and partial resets, forced recomputation, and CUDA graph capture. No new dependencies are required. Fixes isaac-sim#6315 ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Screenshots Not applicable; this change has no visual output. ## Testing - ./isaaclab.sh -f - SensorBase and selected core/PhysX sensor suites: 113 passed - Newton sensor suites: 150 passed, 6 XPASS - Verified the repeated-read regression fails before the fix on CPU and CUDA ## 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 -f - [x] I have made corresponding changes to the documentation (not applicable; no public API or user workflow changed) - [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 - [x] I have added my name to CONTRIBUTORS.md or my name already exists there
…r API (isaac-sim#5677) # Fast GPU pose/scale ops on Fabric + a new writer-scope API ## What this does Two things: 1. **Local-space pose and scale ops are now GPU-fast on the Fabric backend.** They go through the same Warp-kernel path that world-space ops already used. The old USD fallback for local-space is ~100× slower (see the table below). 2. **All transform writes go through a small context manager.** You open a scope, do your writes inside it, and the scope handles the cleanup: ```python with view.xform_world_space_writer() as writer: writer.set_poses(positions=p, orientations=o) writer.set_scales(scales=s) ``` Use `view.xform_local_space_writer()` for local-space writes. Builds on Piotr's prototype at [`bareya/pbarejko/camera-update`](https://github.com/bareya/IsaacLab/tree/pbarejko/camera-update). ## Why a scope? A FrameView keeps two copies of each prim's transform in Fabric storage: the `omni:fabric:worldMatrix` and `omni:fabric:localMatrix` attributes. When you write one, the other has to be recomputed so they stay consistent. Without a scope, that recompute has to run after every single write. With a scope, it runs **once**, when the scope closes. You can call `set_poses` and `set_scales` as many times as you want inside the scope; on exit, one Warp kernel derives the other space and one `wp.synchronize()` runs. Empty scopes cost nothing. The scope also pauses **Fabric Hierarchy**'s transform-change tracking while you're writing, then restores it on exit. (Fabric itself is just the data store; Fabric Hierarchy, exposed through USDRT's `IFabricHierarchy`, is the plugin that watches writes to `omni:fabric:localMatrix` / `omni:fabric:worldMatrix` and keeps them mutually consistent across the hierarchy.) Its tracking is pull-based: a per-attribute listener records writes into a changelog, and the plugin drains and processes that changelog on the next call to `IFabricHierarchy::update_world_xforms()`. Pausing the listener does not block the writes themselves — they still land in Fabric storage — it just keeps them out of the changelog. With the changelog empty, the next tick has nothing to "catch up on" for these prims, and can't decide one of the two spaces is canonical and derive the other from it. See the next section for why that matters. Rules: - Only one writer can be open on a view at a time. Opening a second one raises `RuntimeError`. - While a writer is open, the view's own getters (`get_world_poses`, etc.) raise. Read through the writer (`writer.get_poses()`) inside the scope, or close the scope first. - **Do not advance the simulation or render from inside the scope.** No `sim.step()`, no `world.render()`, no `SimulationApp.update()`. The matrices are mid-write until exit, and rendering against that state would read torn data. Keep scopes short and close them before stepping. - If something raises inside the scope (a user-code bug, a notebook cell interrupt, etc.), the scope still runs the opposite-space recompute on exit so the world and local matrices stay consistent prim-by-prim. The partial write itself is not rolled back — if you need all-or-nothing, snapshot the matrices yourself before entering. ## Why we have to coordinate with Fabric Hierarchy (renderer correctness) A writer scope is synchronous Python code, so the renderer can't see anything mid-scope — no tick runs until we exit. The risk is on the **next** render/sim tick after the scope closes. On that next tick, Fabric Hierarchy runs its `IFabricHierarchy::update_world_xforms()` step, which can recompute `omni:fabric:worldMatrix` from `omni:fabric:localMatrix` (or vice versa). If it thinks one of the two was the user's most recent edit, it derives the other from it; the derived value — not what we wrote — is then what the **Fabric Scene Delegate (FSD)** hands to RTX on the render path. Three things in this PR keep that next-tick recompute from clobbering our work: 1. **Opposite-space derive at scope exit.** By the time the scope closes, `omni:fabric:worldMatrix` and `omni:fabric:localMatrix` are mutually consistent prim-by-prim, so any recompute Fabric Hierarchy does is a no-op. 2. **Fabric-Hierarchy change tracking is paused for the whole scope.** The writer calls `track_local_xform_changes(False)` and `track_world_xform_changes(False)` on enter (saving the prior state) and restores them on exit. While tracking is paused, the listeners don't record our writes in their changelog, so when the next tick runs there's nothing for `update_world_xforms()` to "catch up on". 3. **Two persistent selections with explicit read-only / read-write flags.** Outside the scope, the view's selection is fully read-only — both `omni:fabric:worldMatrix` and `omni:fabric:localMatrix` are flagged RO. Inside the scope, the writer flips to a fully read-write selection. ``` _sel_ro : worldMatrix=RO, localMatrix=RO (steady state, between writes) _sel_rw : worldMatrix=RW, localMatrix=RW (active during a writer scope) ``` Both selections are built once when the view is initialized and kept alive for its lifetime. The writer scope flips a single flag (`_is_rw`) on enter/exit; nothing is rebuilt. The RO steady state tells Fabric Hierarchy's next-tick `update_world_xforms()` that no attribute is user-authored, so it leaves both alone. ## Backend support - **Fabric (PhysX):** the fast GPU path described above. - **USD, Newton, OVPhysX:** the writer is a thin wrapper. Writes go straight to the backend's existing storage. No batching, no extra recompute (there is no second matrix to keep in sync). Same API across all four backends. Newton has two different "scale" ideas, and the API keeps them apart: - `NewtonSiteFrameView.set_scales(...)` (deprecated) writes the **Newton collision-shape geometry** size. - The writer's `set_scales(...)` writes per-site **transform scale**, matching what USD FrameView does. They operate on different state and are not merged. ## API changes **New (recommended):** - `view.xform_world_space_writer()` / `view.xform_local_space_writer()` — a context manager with `set_poses`, `set_scales`, `get_poses`, `get_scales`. **Deprecated (still works, warns once per class on first use):** - `set_world_poses` / `set_local_poses` — use the writer scope. - `get_scales` / `set_scales` — use `get_local_scales` / `get_world_scales`, or the writer's `set_scales`. ## Benchmark (1024 prims, 50 iterations, Blackwell RTX PRO 5000) Per-iteration timings (lower is better): | Operation | USD (ms) | Fabric (ms) | Newton Site (ms) | |----------------------------|---------:|------------:|-----------------:| | Get World Poses | 8.6148 | 0.0375 | 0.0307 | | Set World Poses | 19.1357 | 0.1090 | 0.0368 | | Get Local Poses | 5.9556 | 0.0374 | 0.0497 | | Set Local Poses | 7.9794 | 0.0979 | 0.0790 | | Get World Scales | 13.1193 | 0.0371 | 0.0015 | | Set World Scales | 21.4571 | 0.1014 | 0.0612 | | Get Local Scales | 3.2544 | 0.0375 | 0.0022 | | Set Local Scales | 3.8350 | 0.0937 | 0.0587 | | Get Both (World+Local) | 14.7506 | 0.0738 | 0.1302 | | Interleaved World Set→Get | 28.1046 | 0.1432 | 0.1588 | | **Per-iter total** | **126.2** | **0.77** | **0.61** | Speedup vs USD (per-iter ops; one-time view construction excluded): | Operation | Fabric × | Newton Site × | |----------------------------|---------:|--------------:| | Get World Poses | 229.6× | 280.2× | | Set World Poses | 175.6× | 519.8× | | Get Local Poses | 159.0× | 119.9× | | Set Local Poses | 81.5× | 101.0× | | Get World Scales | 353.9× | 8911.5× | | Set World Scales | 211.6× | 350.4× | | Get Local Scales | 86.8× | 1489.9× | | Set Local Scales | 40.9× | 65.4× | | Get Both (World+Local) | 200.0× | 113.3× | | Interleaved World Set→Get | 196.2× | 177.0× | | **Overall (per-iter)** | **164×** | **207×** | One-time view construction (reported separately, not part of the per-iter total): USD 4.6 ms, Fabric 4.4 ms, Newton Site 1013 ms — the Newton number is dominated by stage population on the first call. Steady-state per-iteration cost is what the speedup row reflects. ## Notes for reviewers - Getters call `wp.synchronize()` before returning, so the returned `ProxyArray` is always immediately readable from both GPU and host code — no caller-side sync needed. (Both the cached and the per-indices paths sync; this used to be asymmetric.) --------- Co-authored-by: pv-nvidia <peter.verswyvelen@gmail.com> Co-authored-by: pv-nvidia <{"message":"Not Found","documentation_url":"https://docs.github.com/rest/users/emails#list-email-addresses-for-the-authenticated-user","status":"404"}>
# Description Pins every active newton[sim] dependency to Newton commit c7ae7c7648cd0717df39e5c94b95d5a02c997320 (current main), which includes the experimental coupled solver framework (newton-physics/newton#2848). Upstream comparison: newton-physics/newton@2064e3b...c7ae7c7 Compatibility updates: adds newton-usd-schemas>=0.3.1 next to each pin since Newton now hard-requires it for USD parsing (newton-physics/newton#3117) and it only ships in the heavy newton[importers] extra; removes the cloner fallback reading the deleted ModelBuilder.equality_constraint_* attributes (newton-physics/newton#3296), which are now handled through the mujoco:equality_constraint_* custom attributes, and updates the fake builder in the cloner test accordingly. Verified in a fresh uv env: full isaaclab_newton test suite (340 passed non-gated plus all Isaac-Sim-gated files: articulation 236, rigid object 94, rigid object collection 158, actuators 71, schemas 20), contrib rigid-deformable coupling (4 passed), and end-to-end cartpole training with presets=newton_mjwarp. Note: isaacsim-core 6.0.0.1 hard-pins newton==1.2.0, so installing Isaac Sim after the Newton pin clobbers it; the documented ./isaaclab.sh -i order handles this correctly. ## Type of change - New feature (non-breaking change which adds functionality) ## 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 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
> **Stacked on isaac-sim#6225** (OVPhysX `Articulation` → `OvPhysxView`), which is stacked on isaac-sim#6224 (`OvPhysxView`). Review/merge those first — the diff here collapses to a single commit once they land. ## What The ovphysx wheel now exposes per-collision-shape material as the `ARTICULATION_SHAPE_FRICTION_AND_RESTITUTION` / `RIGID_BODY_SHAPE_FRICTION_AND_RESTITUTION` tensor types. This closes the gap that kept `test_set_material_properties` `xfail`ed: the test had been written against the PhysX-only `root_view.get_material_properties()` / `set_material_properties()` / `max_shapes` view API, which `OvPhysxView` does not provide. - Add `tensor_types` aliases `SHAPE_FRICTION_AND_RESTITUTION` and `RIGID_BODY_SHAPE_FRICTION_AND_RESTITUTION`, guarded with `try/except AttributeError` so the module stays import-safe against older wheels. - Rewrite `test_set_material_properties` to read/write the material through `OvPhysxView.get_attribute` / `set_attribute` on the new tensor type. The per-articulation shape count is derived from the binding shape `[N, S, 3]` (`[static_friction, dynamic_friction, restitution]`); the test skips on wheels that lack the type. The now-unused `_MATERIAL_GAP_REASON` is removed. ## Verification The material binding is device-resident (it follows the simulation device). The `set → step → read` round-trip passes on both `cpu` and `cuda:0` for `num_articulations` 1 and 2.
…isaac-sim#6356) # Description Currently, Omni tests test-type are broadly marked only as pytest, which makes it difficult to categorize, filter, and run tests by intent or coverage area. Update Omni tests to include the appropriate pytest marks so they are more discoverable and easier to target in local runs, CI, and reporting. Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. `row["test_type"] = f"{test_type}{','.join(markers)}"` Fixes # ([OMPE-100407](https://jirasw.nvidia.com/browse/OMPE-100407)) ## Type of change - New feature (non-breaking change which adds functionality) ## 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 - [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 <!-- 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: Matthew Taylor <mataylor@nvidia.com>
## 1. Summary - **isaaclab**: makes the base Kit experiences use one renderer GPU by default; XR explicitly retains multi-GPU rendering. - Keeps single-process renderer multi-GPU available through existing `kit_args`, avoiding overlap with training `--distributed`. - Adds `ISAACLAB_FABRIC_USE_GPU_INTEROP=0|1` as an independent temporary CI workaround; when unset, the Kit default is preserved. ## 2. Opt-in and workaround Enable single-process renderer multi-GPU explicitly: ```text --kit_args "--/renderer/multiGpu/enabled=true --/renderer/multiGpu/autoEnable=true --/renderer/multiGpu/maxGpuCount=16" ``` The multi-GPU CI lane can temporarily disable Fabric GPU interop with `ISAACLAB_FABRIC_USE_GPU_INTEROP=0`. Explicit raw Kit settings and `kit_args` take precedence over the environment override. Remove the workaround after the underlying Kit/PhysX problem is fixed. ## 3. Validation - [x] Merged current `develop` without conflicts. - [x] Full `./isaaclab.sh -f` passed after the merge. - [x] Five focused Fabric override and explicit-precedence tests passed. - [x] Exact four-A10G diagnostics reproduced instability without the Fabric override while five explicit-false controls completed cleanly: isaac-sim#6300 (comment)
# Description Documentation jobs are failing because of broken links from upstream documentation: was: ``` https://nvidia-isaac-ros.github.io/reference_workflows/isaac_for_manipulation/packages/isaac_ros_manipulation_ur_dnn_policy/index.html ``` is: ``` https://nvidia-isaac-ros.github.io/reference_workflows/isaac_for_manipulation/packages/isaac_ros_manipulation_dnn_policy/index.html ``` Fixes # (issue) <!-- 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) - New feature (non-breaking change which adds functionality) - Breaking change (existing functionality will not work without user modification) - 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 -->
…im#6322) ## 1. Summary Fix CUDA initialization on non-default devices by selecting the resolved device in PyTorch before synchronizing Warp at shared launcher and physics-backend initialization boundaries. Newton binds CUDA graph capture explicitly to the simulation device without backend-specific default-device setup. The exact three-rank camera workload failed 2/2 without device-scoped capture and has now passed 6/6 with the fix, including two runs on the final centralized implementation and one after merging current ``develop``. ## 2. Root cause Warp used its default ``cuda:0`` context while nonzero distributed ranks used their assigned devices. Newton's collision pipeline then mixed allocations from different CUDA contexts, producing CUDA errors 900 and 101 during graph capture. ## 3. Design - Select the PyTorch device before synchronizing Warp through a private shared helper. - Synchronize both runtimes after Kit startup in ``AppLauncher``. - Synchronize both runtimes when resolving distributed ranks in ``sim_launcher``. - Reassert the resolved device in ``PhysicsManager.initialize`` before backend-specific setup, covering direct ``SimulationContext`` use for every backend. - Keep ``wp.ScopedCapture(device=device)`` in Newton so graph ownership remains explicit. ## 4. Related work Extracted from isaac-sim#5823 so the product fix can be reviewed and landed independently of the multi-GPU CI infrastructure. ## 5. Test plan - [x] Regression test fails without device-scoped capture and passes with it - [x] Exact three-rank Newton camera training passes on three physical GPUs, including the committed tree merged with current ``develop`` - [x] Device synchronization, launcher, backend-ordering, and distributed-resolution tests: 28 passed - [x] Full Newton manager test file: 71 passed; two unrelated Kamino cases require a newer Newton API than the installed environment provides - [x] Changelog fragment gate - [x] ``./isaaclab.sh -f``
…isaac-sim#6009) # Description Consolidates all dependencies into the central pyproject. This should make it easier to maintain a ground truth. ## 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
## Summary
Renderer presets repeated the category that the `renderer=` selector
already names. This PR drops the redundant `_renderer` suffix while
keeping the old spellings working as deprecated aliases:
| Old | New |
|---|---|
| `ovrtx_renderer` | `ovrtx` |
| `isaacsim_rtx_renderer` | `isaacsim_rtx` |
`newton_renderer` is intentionally **left unchanged** (no alias): the
bare `newton` spelling is deliberately avoided across the codebase —
it's a live physics deprecation alias (`newton` → `newton_mjwarp`) and
is guarded by `test_newton_solver_preset_names.py` — so renaming the
renderer to `newton` would reintroduce that ambiguity.
## How it works
The rename reuses the existing per-target legacy-alias mechanism (the
same one that powers `newton` → `newton_mjwarp`): the aliases live on
`PresetTarget.RENDERER.legacy_aliases`, so `renderer=ovrtx_renderer` /
`presets=...,ovrtx_renderer` still resolve — they just emit a
`FutureWarning` pointing at the new name. The aliases will be removed in
a future release.
Nice side effect: the preset name `ovrtx` now matches its underlying
`renderer_type` value.
## Changes
- **`presets.py`** — renamed the `MultiBackendRendererCfg` fields and
updated `set_isaac_rtx_global_settings`.
- **`preset_target.py`** — added the alias map + docstring to
`PresetTarget.RENDERER`.
- **`sim_launcher.py`** — help text and runtime-compatibility error
messages now use the suffix-less names.
- **Docs / benchmark scripts / shadow-hand task docstrings** — updated
example strings (re-padded the affected RST grid tables in
`environments.rst`).
- **Tests** — updated `test_runtime_compatibility.py`,
`test_preset_kit_decision.py`, `test_shadow_hand_camera_presets.py` to
the canonical names, and added a parametrized alias regression test in
`test_hydra.py`.
- Changelog fragments for `isaaclab` and `isaaclab_tasks`.
## Notes
- The golden-image test infra (`rendering_test_utils.py` + ~190 golden
files) builds renderer labels as `f"{renderer}_renderer"`, which are
used both as `presets=` tokens and as on-disk filenames. Those old
spellings still resolve via the new alias, so it was left untouched
(renaming 190 golden files is out of scope).
## Testing
Verified the alias-resolution logic and ran `pre-commit` on all changed
files (all hooks pass). The full pytest suite requires a GPU/Isaac Sim
environment not available locally — CI will exercise it.
Bumped packages: - isaaclab: 9.0.0 → 10.0.0 - isaaclab_newton: 1.6.0 → 1.6.1 - isaaclab_ovphysx: 6.1.1 → 6.2.0 - isaaclab_physx: 2.7.0 → 2.7.1 - isaaclab_tasks: 8.1.6 → 8.1.7 - isaaclab_visualizers: 1.1.0 → 1.1.1
…saac-sim#6241) > **Stacked on isaac-sim#6227** (OVPhysX `RigidObjectCollection` → `OvPhysxView`), which is stacked on isaac-sim#6224 (`OvPhysxView`). Review/merge those first. Sibling of isaac-sim#6239 (articulation) and isaac-sim#6240 (rigid object). ## What The ovphysx wheel now exposes per-collision-shape rigid-body material as the `RIGID_BODY_SHAPE_FRICTION_AND_RESTITUTION` tensor type. This closes the gap that kept the collection's `test_set_material_properties` `xfail`ed (it was an empty `NotImplementedError` stub written against the PhysX-only `root_view.get/set_material_properties()` API). - Add the `tensor_types` alias `RIGID_BODY_SHAPE_FRICTION_AND_RESTITUTION`, guarded with `try/except AttributeError` (shared with the sibling material PRs; documented there). - Implement `test_set_material_properties`, mirroring the PhysX backend but reading/writing the material through `OvPhysxView.get_attribute` / `set_attribute`. The collection's fused binding is body-major flat, so data `[num_envs, num_cubes, 3]` is mapped to/from the view layout with `reshape_data_to_view_3d` and its inverse. ## Verification OVPhysX runs the PhysX solver. The material round-trip passes on both `cpu` and `cuda:0` for `num_envs` 1/3 × `num_cubes` 1/2. The changelog fragment is a `.skip` because the only user-facing addition (the alias) is documented by the sibling material PRs; this PR is test enablement.
…ac-sim#6240) > **Stacked on isaac-sim#6226** (OVPhysX `RigidObject` → `OvPhysxView`), which is stacked on isaac-sim#6224 (`OvPhysxView`). Review/merge those first — the diff here collapses to a single commit once they land. Sibling of isaac-sim#6239 (the articulation equivalent). ## What The ovphysx wheel now exposes per-collision-shape rigid-body material as the `RIGID_BODY_SHAPE_FRICTION_AND_RESTITUTION` tensor type (shape `[N, S, 3]` = static friction, dynamic friction, restitution). This closes the gap that kept **five** rigid-object material tests `xfail`ed — they were empty `NotImplementedError` stubs written against the PhysX-only `root_view.get/set_material_properties()` / `max_shapes` view API. - Add the `tensor_types` alias `RIGID_BODY_SHAPE_FRICTION_AND_RESTITUTION`, guarded with `try/except AttributeError` so the module stays import-safe against older wheels. - Implement, mirroring the PhysX backend but reading/writing the material through `OvPhysxView.get_attribute` / `set_attribute`: - `test_rigid_body_set_material_properties` and `test_set_material_properties_via_view` — set/get round-trip. - `test_rigid_body_no_friction`, `test_rigid_body_with_static_friction`, `test_rigid_body_with_restitution` — physical-behavior tests. - Ground planes use the solver-common `RigidBodyMaterialBaseCfg`; masses come from `data.body_mass`. The no-friction test settles the cube and uses zero restitution so the resting contact is clean before asserting the sliding velocity is preserved. ## Verification OVPhysX runs the PhysX solver, so the physical tests use the PhysX reference tolerances. All five pass on both `cpu` and `cuda:0` for `num_cubes` 1 and 2. Full `test_rigid_object.py` is green (53 passed on cpu, no regressions).
…, Part 2/5) (isaac-sim#6198) # Description **Part 2 of 5** of the benchmark refactor series: unified runtime and startup benchmark entry points. > **Stacked on Part 1 (isaac-sim#6197).** The incremental Part 2 diff is: > AntoineRichard/IsaacLab@antoiner/benchmark-core...antoiner/benchmark-runtime-startup Series: Part 1/5 core (isaac-sim#6197) -> **Part 2/5 runtime + startup (this PR)** -> Part 3/5 training (isaac-sim#6199) -> Part 4/5 play (isaac-sim#6201) -> Part 5/5 cleanup (isaac-sim#6206). This PR is additive. The existing benchmark scripts remain available until Part 5. Adds: - `scripts/benchmarks/runtime.py`: steps an environment with random actions and emits a `RuntimeBundle`. - `scripts/benchmarks/startup.py`: profiles five startup phases with `cProfile` and emits a `StartupBundle`. - One end-to-end smoke test per entry point. Physics and rendering backends are selected with Hydra preset overrides. Output is selected with `--benchmark_formatter`, which accepts canonical formatter names and comma-separated values such as `schema,omniperf`. Formatter-list parsing is handled by the benchmark core, and preset metadata is derived directly from the Hydra arguments. The startup bundle records the complete benchmark duration. Both entry points close their environments when benchmark processing raises. ## Validation - `237 passed` across `scripts/benchmarks/test` and `source/isaaclab/test/benchmark`. - Both runtime and startup smoke tests pass with Newton/MJWarp. - `./isaaclab.sh -f` passes after commit. ## Type of change - New feature (non-breaking change which adds functionality) ## Checklist - [x] I have read and understood the contribution guidelines. - [x] I have run all pre-commit checks with `./isaaclab.sh -f`. - [x] I have updated the benchmark documentation. - [x] I have added focused end-to-end coverage. - [x] I have added the required changelog fragment.
…#6243) > **Stacked on isaac-sim#6239 (articulation material) and isaac-sim#6240 (rigid-object material)** — this branch merges both so the MDP term has `Articulation.root_view` + `RigidObject.root_view` (the isaac-sim#6225/isaac-sim#6226 migrations) and the material aliases. Review/merge those (and their bases isaac-sim#6224/isaac-sim#6225/isaac-sim#6226) first; the diff here collapses to a single commit once they land. (isaac-sim#6241/collection is **not** needed — this MDP term targets `RigidObject`/`Articulation`, not collections.) ## What `randomize_rigid_body_material` previously **no-op'd on the OVPhysX backend** (the wheel lacked a material binding). The wheel now exposes per-shape material as `*_SHAPE_FRICTION_AND_RESTITUTION`, so this replaces the no-op with a real implementation. OVPhysX runs the PhysX solver, so the new `_RandomizeRigidBodyMaterialOvPhysx`: - mirrors the **PhysX bucket approach** (PhysX's 64000 unique-material limit applies): pre-samples `num_buckets` materials and randomly assigns them to shapes; - writes per-shape `(static_friction, dynamic_friction, restitution)` through the asset's `OvPhysxView` (`set_attribute` on `SHAPE_FRICTION_AND_RESTITUTION` for articulations, `RIGID_BODY_SHAPE_FRICTION_AND_RESTITUTION` for rigid objects), read-modify-writing the full `[N, S, 3]` buffer so non-selected envs are preserved. ### Limitation Randomizes **all shapes** only. Per-body selection (`asset_cfg.body_ids`) raises `NotImplementedError` — the ovphysx wheel exposes no per-body shape counts (unlike PhysX's `link_physx_view.max_shapes` / Newton's `num_shapes_per_body`), so body→shape ranges can't be indexed. ## Verification New real-backend test (`test_randomize_rigid_body_material_mdp.py`) drives the implementation against an OVPhysX `RigidObject`: it asserts the written friction/restitution land within the sampled ranges, and that a per-body selection fails loud. Passes on both `cpu` and `cuda:0`. The PhysX and Newton paths are untouched.
# Description Clears per-world solver-internal buffers on env reset via Newton's solver-reset API — closing the NaN-recovery gap discussed in [newton-physics/newton#1266](newton-physics/newton#1266). Without this, a world that produces a NaN in one solve warm-starts the next iteration from that NaN (MJWarp leaves `mj_checkPos` / `mj_checkVel` / `mj_checkAcc` as TODOs, so nothing in the solver cleans it up). IsaacLab's standard reset rewrites `joint_q` / `joint_qd` / `body_q` but never touches MJWarp-internal `qacc_warmstart`, applied forces, or activations — the world is permanently dead. ## What changed * New `NewtonManager._reset_solver_internals(world_mask)` hook, invoked at **both** boundaries that consume the accumulated reset masks, immediately before the masks are zeroed: the top of `step()` and `forward()`. The `forward()` call site matters because data reads may trigger `forward()` between an env reset and the next `step()`, which would otherwise consume the mask before the solver internals were ever cleared. * The **base implementation is solver-agnostic**: it forwards to `SolverBase.reset(state, world_mask=..., flags=0)` — the upstream API from [newton-physics/newton#2657](newton-physics/newton#2657), available at the Newton commit `develop` already pins. `flags=0` clears only solver-owned buffers and preserves the joint state IsaacLab authored during the reset. `SolverBase.reset` is a documented no-op, so solvers that do not implement it (VBD, XPBD, Featherstone, MPM today) are unaffected — and any solver that adds a `reset()` upstream is covered automatically with no IsaacLab change. * `NewtonMJWarpManager` specializes the hook only to gate the CPU-MuJoCo path (`use_mujoco_cpu=True`): its reset branch owns a single global `MjData` and is not mask-aware, and the hook fires on every boundary with a usually-all-`False` mask. For MJWarp, `SolverMuJoCo.reset(flags=0)` zeroes `qacc_warmstart`, `qfrc_applied`, `xfrc_applied`, `ctrl`, `act` per masked world. * `NewtonKaminoManager` opts out with a documented no-op override — its FK delegate already performs the masked `SolverKamino.reset` with an explicit `ResetConfig` at the same boundaries, so the generic call would be a redundant second reset. ## Type of change * Bug fix (non-breaking change which fixes an issue) ## Screenshots N/A — physics behavior fix, no UI. ## 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 ## Test plan * New regression test `source/isaaclab_newton/test/physics/test_newton_solver_reset.py` (2 envs, CUDA): poisons `qacc_warmstart`, authors a joint write for one env, and verifies both public boundaries (`sim.forward()` and `sim.step()`) clear the flagged world's history while preserving the other world's history and the authored joint state. Verified to fail with the reset disabled. * `source/isaaclab_newton/test/physics/test_newton_manager_abstraction.py` passes (74 tests). * Canonical training probes run to completion with no tracebacks: * `./isaaclab.sh train --rl_library rsl_rl --task Isaac-Cartpole-Direct --num_envs 16 presets=newton_mjwarp --max_iterations 5` * `./isaaclab.sh train --rl_library rsl_rl --task Isaac-Cartpole-Direct --num_envs 16 presets=newton_kamino --max_iterations 5`
isaac-sim#6363) ## Problem ```bash --kit_args "--ext-folder=/path/to/ext" # exit 2: "argument --kit_args: expected one argument" --kit_args=--ext-folder=/path/to/ext # worked --kit_args "--ext-folder=/a --ext-folder=/b" # worked ``` argparse rejects a value token that looks like an option (`-`-prefixed, no space) — and Kit args always start with `--`. Affects every entry point. ## Fix Two normalization points, sharing one fusing helper that rewrites `["--kit_args", "--ext-folder=/path/to/ext"]` into `["--kit_args=--ext-folder=/path/to/ext"]`: 1. `AppLauncher.add_app_launcher_args` fuses the pair in `sys.argv` before any parsing. Covers every script that parses `sys.argv`: demos, tutorials, tools, benchmarks, and the per-library play scripts. 2. `dispatch_library_entrypoint` applies the same fusing to the explicit argv list it forwards to the per-library train/play scripts. Those scripts parse that list (not `sys.argv`), so the `sys.argv` normalization alone never reached the unified `train` command or the multi-GPU ranks (each child rank runs through the dispatcher). Already-working forms are unchanged: a guard test asserts the equals-attached, quoted multi-token, and plain-flag forms are forwarded byte-identical. Tests: 17 in `source/isaaclab/test/cli/test_train_multigpu_command_building.py`. 12 fail with the `AppLauncher` fusing reverted; the dispatcher regression test fails with the dispatcher fusing reverted. Verified end-to-end: cartpole training via `train --rl_library rsl_rl ... --kit_args "--ext-folder=..."` (previously exit 2) now trains to completion, and the same command without `--kit_args` behaves identically to before. ## 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 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
…onfig (isaac-sim#6429) ## Summary Cherry-pick of isaac-sim#6428 onto `develop`. - Removes the duplicated `L_thumb_distal_joint` entry in `fourier_hand_left_dexpilot.yml`'s `target_joint_names` list (reported in isaac-sim#6325) - The right-hand equivalent (`fourier_hand_right_dexpilot.yml`) is unaffected ## Test plan - [ ] Verify `fourier_hand_left_dexpilot.yml` has exactly one `L_thumb_distal_joint` entry - [ ] Confirm OpenXR Fourier left-hand retargeting initializes without duplicate joint warnings Fixes isaac-sim#6325
…6431) # Description `test_rendering_shadow_hand.py` builds and tears down a full RTX env once per parametrized AOV (data type). It had no entry in `PER_TEST_TIMEOUTS`, so it fell back to `DEFAULT_TIMEOUT` (1000s). That budget never scaled as data types were added to `_DEFAULT_SENSOR_DATA_TYPES` (the list grew from 7 → 13), so the file eventually exceeded 1000s and timed out on CI (retry-masked). This gives the file an explicit **1500s** budget (~45s per AOV) and adds a reminder comment to bump it when renderer cases are added. Fixes nvbug 6299039. ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Screenshots N/A ## Checklist - [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 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 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
# Description Continues isaac-sim#6305 (includes @pbarejko's `Remove quality settings` commit) and supersedes the now-closed isaac-sim#6278. Branched on top of the post-isaac-sim#6279 changes. Removes the three RTX rendering-mode presets (`performance`, `balanced`, `quality`) and the machinery that loaded them. With the RTX Minimal renderer now serving the high-performance path, the presets added little value. The former `quality` settings are retained as high-fidelity defaults baked into the camera rendering Kit experiences, applied automatically when RGB camera rendering is enabled. Updated 18 rgb/rgba golden images (isaacsim_rtx renderer, both physx/newton) from the CI-rendered output, since baking the high-fidelity RTX defaults into kit changes the composited color: confirmed the shift is color-only, so no geometry/segmentation goldens were touched. ## Breaking change - Removed the `--rendering_mode` launcher argument and `IsaacRtxRendererGlobalSettingsCfg.rendering_mode`, plus the `apps/rendering_modes/` presets. - Baked high-fidelity RTX defaults into `apps/isaaclab.python.rendering.kit` and the headless variant. ## Type of change - Breaking change (existing functionality will not work without user modification) ## 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: Piotr Barejko <pbarejko@nvidia.com>
…undle deletion, pin-pink) (isaac-sim#6329) # Description Fixes the Docker-only error flood in nvbugs 6343978 (follow-up to isaac-sim#6288): streaming starts, but the log carries 438 `[Error]` lines and 14 Isaac Sim extensions fail to load. uv installs are unaffected. Two independent causes, both Isaac Lab's install mutating packages that Isaac Sim's extensions rely on. ## Summary - **`packaging` deleted from a shared prebundle.** The vestigial `packaging<24` bound in `isaaclab_rl` forced a downgrade; pip (which sees prebundle paths through `python.sh`'s environment) uninstalled `packaging-26.0` from the `omni.isaac.core_archive` prebundle. `omni.services.pip_archive` shares that package as per-file symlinks, so the deletion dangled the farm and cascaded into 13 extension startup failures. Fixed by relaxing the bound (no consumer requires it; now in the root `pyproject.toml` after the isaac-sim#6009 centralization), plus a **fail-loud invariant**: the install aborts if pip leaves a prebundled package with a dangling `__init__.py`. - **`pin-pink==3.1.0` too old for Isaac Sim 6.x.** `isaacsim.robot_motion.pink` needs `pink.exceptions.NoSolutionFound` (pink ≥ 3.3.0). Isaac Sim bundles pink 4.2.0, but the install replaces it with the kit-site-packages copy, pinned to 3.1.0 since pink 3.4+ broke the `pink_ik` task API (isaac-sim#5846). Bumped to **3.3.0**, which satisfies both consumers (`DampingTask.set_target_from_configuration` verified present on both wheels). The pin lives once in the root `pyproject.toml`; the install CLI now derives its force-install stack from those entries instead of a hardcoded copy. - **Impact**: an image rebuilt with this PR runs the exact reported command with **0 errors / 0 tracebacks / 0 extension failures** (broken image and the customer's attached log: 438 / 34 / 14). ## 1. Design notes 1. **Invariant scoping (empirical).** Every docker build routinely replaces prebundled dists (numpy, the cmeel/pinocchio stack, scipy, …) and leaves ~42 dangling links to files Python never imports at startup (test modules, `WHEEL`/license files, cmake hooks) — none of them `__init__.py`. The harmful class (this bug) dangles package `__init__.py` files, making the package unimportable for every extension that loads it. The install therefore fails only on a new dangling `__init__.py` and warns on other new dangling links. 2. **Considered and rejected: hiding prebundles from pip.** Routing pip to the concrete kit interpreter also prevents deletions, but changes dependency resolution build-wide: deps previously satisfied by prebundled copies get freshly resolved into kit site-packages, and the `isaacteleop` step then downgraded numpy to 2.3.5 and pin to 3.9.0 — CI measured the `rsl_rl` export flow at ~4.4× baseline (600s timeouts vs 168s). Prebundle-visible resolution is kept as-is, with the invariant as the guard. ## 2. Validation - **End-to-end on a fresh image built from this PR** (Isaac Sim base digest `99e4e4cfae17…`): `isaac-sim.streaming.sh --allow-root` reaches streaming at ~34 s, stays alive to timeout, with 0 Kit errors, 0 tracebacks, 0 extension-startup failures. Baked state: `packaging` 26.0 resolves from the prebundle, pink 3.3.0 imports from kit site-packages, 0 dangling `__init__.py` anywhere in the prebundles. - **Customer log cross-check**: the attached `isaaclab_streaming_20260702.log` has the identical 438-error class set as the local broken reproduction — both roots, no third issue. - **Invariant**: catches the packaging cascade in-container (RuntimeError naming the broken `omni.services.pip_archive` links) and passes the routine-residue case. - **Tests**: install CLI suites 148 passed / 1 skipped (invariant + derived-stack tests); `test_pink_ik_components.py` with pink 3.3.0 — 21 passed. CI fully green; the export flow runs at its 168 s baseline. Fixes nvbugs 6343978.
Move the resolution and application of the Python logging level out of the Kit-based AppLauncher into a backend-agnostic module so kitless backends can honor it too. Previously AppLauncher owned _resolve_python_logging_level and _apply_python_logging_level, so the --verbose / --info CLI arguments only took effect for Kit-based runs. Kitless backends (Newton, OvPhysX) launched via launch_simulation never constructed AppLauncher and silently ignored them. Extract those two helpers into isaaclab.app.logging_utils and apply the resolved level in the kitless branch of launch_simulation. The Kit-specific info-stream handler workaround stays in AppLauncher. # 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. --> Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. Fixes # (issue) <!-- 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) - New feature (non-breaking change which adds functionality) - Breaking change (existing functionality will not work without user modification) - 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 - [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 <!-- 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 -->
## Summary - Add backend-neutral cart-pole and articulation/rigid-object scene configurations for core integration tests using direct USD paths and core schema configs. - Consume the config-only fixtures introduced by isaac-sim#6557 to decouple recorder, color, texture, and curriculum integration hosts from task configuration imports while retaining their integration markers and assertions. - Uses `make_empty_manager_based_env_cfg` and `EmptyManagerCfg` from the merged foundation. This is PR 2 of the focused replacement series for isaac-sim#6526. ## Type of change - Test refactor (no production behavior change) ## 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 - [ ] 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
…#6538) # Description `usd_replicate` copies source prims to per-environment destination paths with `Sdf.CreatePrimInLayer` + `Sdf.CopySpec`. When the destination is nested under a scope that does not yet exist in the target environment (e.g. the `Groceries` scope in `/World/envs/env_{}/Groceries/Object`), `CreatePrimInLayer` authors the missing intermediate ancestors as `over` prim specs. A `def` copied below an `over` ancestor never composes as defined, so the copied prims' references stay unexpanded and Hydra skips them — the objects render only in the source environment and silently disappear from every cloned one. This PR promotes such freshly-authored `over` ancestors to `def` right after `CreatePrimInLayer`. The walk stops at the first ancestor that is already a `def` (or authored elsewhere), so pre-existing scene structure is left untouched. A regression test covers both the nested-destination case and the already-defined-ancestor case. ## 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` - [ ] 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 Co-authored-by: ooctipus <zhengyuz@nvidia.com>
# Description This PR moves the reinforcement-learning training and playback logic out of the `scripts/reinforcement_learning/` launcher scripts and into a reusable `isaaclab_rl.entrypoints` subpackage. The per-library launcher scripts (`rl_games/`, `rlinf/`, `rsl_rl/`, `sb3/`, `skrl/`) were thin wrappers that couldn't be imported or reused by downstream applications; the actual backend logic now lives in the `isaaclab_rl` package and is exercised through a single dispatcher. **What changed** - Added an `isaaclab_rl.entrypoints` subpackage that owns the backend implementations (`entrypoints/backends/train_*.py`, `play_*.py`), the shared `common.py` helpers, and a `dispatch.py` that selects a backend from `--rl_library` and forwards the remaining arguments. - Added a typed **programmatic API** so downstream code can launch training and playback without building an `argparse.Namespace`: ```python from isaaclab_rl import TrainingRequest, train train(TrainingRequest(backend="rsl_rl", task="Isaac-Cartpole", max_iterations=100)) ``` `PlaybackRequest` / `play` provide the same for playback. Backend-specific options go through `backend_args`, and Hydra / preset selectors through `hydra_args`. - Reduced the top-level `scripts/reinforcement_learning/train.py` and `play.py` to thin executables that call `run_train_cli` / `run_play_cli`. - Removed the deprecated per-library scripts under `scripts/reinforcement_learning/<library>/` (`train.py`, `play.py`, `cli_args.py`). Use the unified `train.py`/`play.py` with `--rl_library`, or the programmatic API instead. - Updated all internal callers — benchmarks, demos, Ray runners, AutoMate contrib launchers, the project template generator, and CI workflows — to use the unified entrypoints. - Fixed `--deterministic` not configuring PyTorch deterministic operations in the RL-Games, RSL-RL, SB3, and skrl backends. - Removed the `--use_last_checkpoint` flag from the RL-Games `play` entrypoint; use `--checkpoint latest` instead. Fixes # (issue) ## Type of change - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) - Breaking change (existing functionality will not work without user modification) - Documentation update **Breaking:** The per-library scripts under `scripts/reinforcement_learning/<library>/` and the RL-Games `--use_last_checkpoint` flag have been removed. Migrate to the unified `train.py`/`play.py` with `--rl_library <library>` (and `--checkpoint latest`). ## Screenshots N/A — no user-facing visual changes. ## 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 --------- Signed-off-by: Mustafa H <34825877+StafaH@users.noreply.github.com> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
…isaac-sim#6386) # Description When doing a hard reset, the Newton model is re-created but the collision pipeline still holds references to the old model. Once the old model's device buffers are freed (which happens under GPU memory pressure between resets), those dangling references cause illegal CUDA memory access violations (CUDA 700) on the first `step()` after the reset — typically surfacing in `compute_shape_aabbs` or `narrow_phase_kernel_gjk_mpr`. **Fix:** On a hard reset, clear the cached collision state (`_collision_pipeline` and `_contacts`) so `initialize_solver()` rebuilds a fresh pipeline bound to the re-finalized model. Any captured CUDA graph is also invalidated and re-captured by `initialize_solver()` exactly as on first initialization, so CUDA graph capture keeps working correctly. No special post-reset deferral is needed once the stale pipeline is rebuilt. **Tests:** Adds a regression test `test_hard_reset_then_step_runs` (run with CUDA graph capture off and on). It drives reset → step → hard reset, frees the old model's collide arrays, churns the allocator to mimic real GPU memory pressure, then steps and syncs. On the pre-fix code this reproduces the CUDA 700; with the fix it passes. Fixes isaac-sim#6483 ## 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 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 Co-authored-by: pv-nvidia <pv-nvidia@nvidia.com>
…im#6583) # Description Update omniverseclient dependency from 2.71.1.7015 to 2.72.1 for compatibility with newer versions of ovrtx (0.4+) ## 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
# Description Wires ordering into the PhysX backend read/write paths using the shared kernels: fused user-and-backend target writes, lazily refreshed timestamped `body_mass`/`body_inertia` (see the changelog `Changed` entry for the semantics change vs develop), and ordering maps resolved at initialization. Part 4/8 of the series splitting isaac-sim#6248 into independently reviewable units. isaac-sim#6248 remains open, untouched, as the reference implementation; this stack was cut from its final tree after a `develop` sync (Kamino Core, Newton bump, OVPhysX 0.5.1). ## Stack - Part 1/8: isaac-sim#6334 — Extract rigid object interface test utilities - Part 2/8: isaac-sim#6335 — Core ordering foundation - Part 3/8: isaac-sim#6336 — Newton backend - **Part 4/8 (this PR)**: isaac-sim#6337 — PhysX backend - Part 5/8: isaac-sim#6338 — Extract articulation interface test utilities - Part 6/8: isaac-sim#6339 — OVPhysX backend - Part 7/8: isaac-sim#6340 — Cross-backend ordering interface tests - Part 8/8: isaac-sim#6341 — Events, consumers, and documentation > [!NOTE] > All parts target `develop`, so until the preceding parts merge this PR's diff includes them. The true delta of this part is [this compare](AntoineRichard/IsaacLab@antoiner/articulation-reordering-p3...antoiner/articulation-reordering-p4). ## Type of change - New feature (non-breaking change which adds functionality) ## 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 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 - [x] My name exists in `CONTRIBUTORS.md` ## Test Plan - [x] `./isaaclab.sh -p -m pytest source/isaaclab_physx/test/assets/test_articulation.py` -> 239 passed - [x] `./isaaclab.sh -p -m pytest source/isaaclab_physx/test/assets/test_newton_actuators_physx.py` -> 44 passed - [x] `./isaaclab.sh -f` -> all hooks pass
…erarchy assets (isaac-sim#6377) # Description Spawning an asset whose rigid bodies are nested (child link prims authored under their parent link prim, as produced by the URDF importer in Isaac Sim 6.0 and later) only applied `rigid_props` and `mass_props` to the first link: the `apply_nested` decorator stops descending into a prim's children once the wrapped function succeeds, assuming physics schemas cannot nest. On a 29-link arm, `disable_gravity=True` reached 1/29 bodies with no warning. This completes the nested-hierarchy fix started in isaac-sim#6259 (which covered contact-sensor activation): - `apply_nested` gains a `stop_on_success` flag (default `True`; the dual-form decorator keeps every existing bare `@apply_nested` usage working unchanged). - `modify_rigid_body_properties` and `modify_mass_properties` opt out of the early stop, since their anchor prims are exactly the link prims that nest. - Regression test with a 3-deep nested rigid-body chain verifying both properties land on every body (mirrors the isaac-sim#6259 test). ## Scope: why only the rigid-body and mass writers An audit of the 40 asset stages referenced by `isaaclab_assets`/`isaaclab_tasks` informed the scoping: 1. Rigid-body nesting is the only *independent-anchor* nesting in use: `ShadowHandNewton` authors 24 of its 25 links body-under-body and is spawned with `rigid_props` by the shadow-hand task — this fix is required for those values to reach every link. 2. No joint-under-joint nesting and no nested articulation roots exist in any audited asset; keeping the early stop for those writers is safe. 3. Collider-under-collider exists only as duplicated same-intent anchors in a few props (e.g. the factory gear assets author `CollisionAPI` with SDF approximation on two ancestor Xforms of the same meshes, via layer composition). Those anchors describe the *same* geometry rather than independent colliders — the USD Physics spec ties `CollisionAPI` to leaf gprims, so nested Xform-level anchors have no defined precedence. Widening the traversal there would paper over an asset-level duplication instead of fixing schema application, so the collision writers keep the early stop; the asset duplication is being followed up separately. 4. Some flat assets (e.g. Franka) author `MassAPI` on both link prims and mesh prims beneath them. With this change `mass_props` now also authors the nested `MassAPI` prims; per the [USD Physics spec](https://openusd.org/release/wp_rigid_body_physics.html), a parent's explicit mass overrides mass properties authored further down the subtree, so effective per-body mass is unchanged. ## Behavior note The Newton shadow-hand task cfg sets `disable_gravity=True` (and related rigid-body properties) that previously reached only 1 of 25 links. With this fix the cfg applies to all 25 links as intended. This is the bug being fixed, but baselines tuned against the old (partial) behavior may shift for tasks whose assets have nested links. ## Verification - End-to-end through the spawner (`UsdFileCfg` → the same property-application path `UrdfFileCfg` uses) on a nested Geometry-scoped 3-link chain: `disable_gravity` and `mass` author on 1/3 bodies before the fix and 3/3 after; contact-report API 3/3 on both (via isaac-sim#6259). - New regression test in `test_schemas.py` (nested chain, asserts both properties on every link). - Full CI green (34/34 checks). Fixes isaac-sim#5918 ## 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` - [ ] 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
…nager runtime (isaac-sim#6412) ## Summary - Fixes OVPhysX actuator joint indices to follow the common actuator indexing contract. - Fixes OVPhysX initialization alongside Kit by reusing Kit's registered PhysX schema provider. - Fixes the OVPhysX manager to support both the declared public runtime API and the current runtime API. - Regression tests included. Validated by full dexterous training runs on the OVPhysX backend; split out of the lumped validation branch isaac-sim#6324 (Part 2 of 11). ## Dependencies - None. ## Series review map Full integrated diff + training/validation evidence: the lumped validation PR isaac-sim#6324 (DO-NOT-MERGE). | Part | PR | |---|---| | Docs: regenerate the environment overview table | isaac-sim#6410 | | Part 1/11: Newton runtime fixes (cloner rows, cubric fallback, viz teardown) | isaac-sim#6411 | | **Part 2/11: OVPhysX runtime fixes (this PR)** | isaac-sim#6412 | | Part 3/11: success-rate metrics for the Direct reorientation tasks | isaac-sim#6413 | | Part 4/11: RSL-RL training for the handover Direct task | isaac-sim#6414 | | Part 5/11: success-rate support in the benchmark utilities | isaac-sim#6415 | | Part 6/11: renderer presets for the Direct camera task | isaac-sim#6416 | | Part 7/11: OVPhysX presets for the dexterous tasks | isaac-sim#6417 | | Part 8/11: Allegro manager counterpart | isaac-sim#6418 | | Part 9/11: Shadow + OpenAI manager counterparts | isaac-sim#6419 | | Part 10/11: Shadow camera manager counterpart | isaac-sim#6420 | | Part 11/11: Shadow handover manager counterpart | isaac-sim#6421 | --- ### Exact changes in this PR - OVPhysX backend changes + tests: isaac-sim@1f7a433
# Description Default enable_external_forces_every_iteration to true for PhysX and warn when users opt out with the deprecated flag. Add a deprecation warning and a breaking changelog fragment. ## 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) - Breaking change (existing functionality will not work without user modification) ## 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 --> --------- Signed-off-by: Kelly Guo <kellyg@nvidia.com> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
# Description Updates CODEOWNERS based on recent development. ## Type of change - Documentation update ## 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 -->
# Description PR isaac-sim#6505 removed the Kit extension startup that previously re-imported `isaaclab_physx` after Kit loaded. When task configuration imports the PhysX package before Kit, the compatibility hook returns early and is never retried. The original Isaac Sim `SimulationManager` STOP callback then invalidates the tensor view shared with `PhysxManager`, causing Franka and other PhysX articulation environments to fail during their first reset. This PR retries the existing idempotent compatibility takeover from `PhysxManager.initialize()`, where Kit is available and PhysX is the selected backend. It also updates the import-order contract and adds an integration regression test that imports `PhysxCfg` before launching Kit. This fix is independent of isaac-sim#6337. ## Type of change - Bug fix (non-breaking change which fixes an issue) - Documentation update ## Screenshots N/A ## Validation - Regression RED on unmodified develop: module alias remained the original Isaac Sim `SimulationManager` after `SimulationContext` initialization. - Regression GREEN: `1 passed`. - `Isaac-Reach-Franka`, 16 environments, PhysX: environment creation, reset, and first step completed with exit code 0 and without invalidated-view errors. - `./isaaclab.sh -p tools/changelog/cli.py check develop` - `./isaaclab.sh -f` ## Checklist - [x] I have read and understood the contribution guidelines - [x] I have run the pre-commit checks with `./isaaclab.sh -f` - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove the fix is effective - [x] I have added a changelog fragment for every touched package - [x] My name already exists in `CONTRIBUTORS.md`
# Description Remove the unused `flatdict` dependency from the root test extra and the two CI bootstrap commands that install test tooling. Also remove `flatdict` from the Sphinx mocked-import list. The repository no longer imports or otherwise uses `flatdict`, so retaining it adds unnecessary installation and dependency-resolution work. Dependencies required by this change: none. This change removes `flatdict`. ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Screenshots Not applicable. ## Validation - `./isaaclab.sh -p -m pytest source/isaaclab/test/cli/test_uv_run_pyproject.py` (6 passed) - `bash -n .github/actions/multi-gpu/multi_gpu_shard_runner.sh` - Parsed `pyproject.toml` and asserted the test extra contains no `flatdict` requirement - Searched the repository for remaining live `flatdict` references; only the historical changelog entry remains - `./isaaclab.sh -f` (passed before commit and again before push) ## Checklist - [x] I have read and understood the contribution guidelines - [x] I have run the pre-commit checks 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 (no new test was needed for this metadata-only removal; existing metadata tests pass) - [x] I have added a changelog fragment for every touched package (not applicable; no package under `source/` was changed) - [x] My name already exists in `CONTRIBUTORS.md`
…ss prims (isaac-sim#6501) # Description The `apply_rigid_body_properties`, `apply_collision_properties`, and `apply_mass_properties` fragment family writers force-applied their defining USD API (`RigidBodyAPI` / `CollisionAPI` / `MassAPI`) directly on the input prim. The legacy writers they replace are `@apply_nested`: they modify the prims that *already carry* the API and never author a fresh one. For bare-prim spawns (shapes, meshes) the define-fresh behavior is correct, which is why all existing tests passed. The failure needs a real USD asset: robot assets author `RigidBodyAPI` on their **link** prims and (commonly) `ArticulationRootAPI` on the **spawn** prim. Configuring `rigid_props` as a fragment list on such an asset force-anchored a new rigid body on the spawn prim, turning every link into a nested rigid body — the PhysX parser then drops the articulation's joint graph (`Articulation` initialization fails with an empty joint registry). Reproduced A/B on the cartpole asset. ## Fix Resolve targets the way the legacy nested writers do, mirroring the articulation-root writer's existing pattern: collect subtree prims already carrying the defining API (breadth-first, without descending past a match — nested applications of the same physics schema are not allowed), dispatch every fragment to each; apply a fresh API on the input prim **only** when the subtree carries none (presence-gated), preserving the bare-prim spawner behavior. Instanced prims are skipped with a warning. The shared resolution lives in one helper used by all three writers. ## Tests New `test_schema_writer_nested_targets.py` (all fail before the fix, pass after): - fragment `rigid_props`/`collision_props`/`mass_props` through the production USD spawn path on an articulated asset: attributes land on the links/colliders, the spawn prim gains no anchor; - fragment vs legacy path on the same asset: identical per-prim applied-schema sets and authored attributes; - bare-prim define-fresh preserved; traversal does not descend past an existing body. Existing suites re-run green: schema/collision/mass/mesh-collision fragments, spawn meshes, schemas (101 tests total). ## 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] 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/` - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there --------- Co-authored-by: Octi Zhang <zhengyuz@nvidia.com>
# Description Depends on isaac-sim#6481 ## 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 -->
# Conflicts: # pyproject.toml # source/isaaclab_newton/isaaclab_newton/physics/newton_manager.py # source/isaaclab_newton/pyproject.toml # source/isaaclab_tasks/isaaclab_tasks/contrib/velocity/config/go1/flat_env_cfg.py # source/isaaclab_tasks/isaaclab_tasks/core/velocity/config/g1/flat_env_cfg.py
ooctipus
requested review from
Mayankm96,
jtigue-bdai,
kellyguo11,
matthewtrepte,
pascal-roth and
xyao-nv
as code owners
July 18, 2026 06:49
Contributor
|
Too many files changed for review. ( |
ooctipus
added a commit
that referenced
this pull request
Jul 18, 2026
# Description Revert #6599. That PR incorrectly squash-merged the complete `develop` history into one oversized commit instead of rebasing the FPGS work on top of `develop`. The resulting tree is verified byte-for-byte equal to the pre-#6599 `fpgs-dev` tree at `3002557631e365bfbd889c504b15a3b2b27a2d07`. A separate corrected branch will be built from `develop` with only the intended FPGS changes replayed on top and audited before publication. ## Tests - Restored tree hash: `333af65956c460d2572f3073cf979c1f870845b2`, exactly matching the pre-#6599 tree. - Pre-commit hooks passed. The LFS hook was skipped locally only because the parent checkout has an `.git/info/attributes` override; repository attributes are unchanged.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Merge current
develop(564a0083a00) intofpgs-devwhile retaining the FeatherPGS solver integration and tuned task presets.developintroduced theSolverBase.resetAPI and a side-effect-free solver factory contract after the previous public FeatherPGS Newton pin. This sync therefore also:ooctipus/newton@186502cec5db4b80a4cc235c9a6f5e4266ee2c07revision;NewtonFeatherPGSManagerwith the current_create_solvercontract;develop.Type of change
Tests
uv run -m newton.tests -k feather_pgs: 25 passed../isaaclab.sh -p -m pytest source/isaaclab/test/cli/test_uv_run_pyproject.py -q: 6 passed.developwhose license headings contain=======. The LFS pointer hook was skipped because this parent checkout has a local.git/info/attributesoverride disabling golden-image LFS; repository.gitattributesremains unchanged and correct.Screenshots
Not applicable.
Checklist
./isaaclab.sh --format.CONTRIBUTORS.md.