feat(schemas): joint-drive schema-fragment API (additive) - #8
Draft
vidurv-nvidia wants to merge 45 commits into
Draft
feat(schemas): joint-drive schema-fragment API (additive)#8vidurv-nvidia wants to merge 45 commits into
vidurv-nvidia wants to merge 45 commits into
Conversation
…`` (isaac-sim#6242) # Description Fixed the `newton[sim]` dependency pin to use Newton commit `79e95bf5571d70a0a46c8eaedc80644531d27368`, including the `RenderContext` triangle-mesh construction fix from [newton-physics/newton#3199](newton-physics/newton#3199). ## 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 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
Bumped packages: - isaaclab: 7.0.5 → 7.1.0 - isaaclab_newton: 1.0.4 → 1.1.0 - isaaclab_ov: 0.4.6 → 0.5.0 - isaaclab_physx: 2.0.2 → 2.1.0 - isaaclab_tasks: 8.0.4 → 8.0.5 - isaaclab_visualizers: 1.0.1 → 1.0.2
…cartpole, dexsuite_kuka, and shadow_hand with test coverage (isaac-sim#6101) # Description Add distance_to_camera and distance_to_image_plane camera presets to cartpole, dexsuite_kuka, and shadow_hand with test coverage. ## 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
…isaac-sim#6238) # Description Add ISAAC_LAB_ENABLE_ISAAC_RTX_PER_ENV_SCENE_PARTITION environment variable to opt in to authoring primvars:omni:scenePartition and omni:scenePartition on the USD stage. Previously this was always on; now it is off by default. This is to address an OOM in one of our IsaacSim RTX benchmark suites related to primvar inheritance of the scene partition attributes while the root cause/fix is under investigation. ## Testing We have a separate issue which only visualizes env_0 in kit when scene partitioning is enabled... so I tested with: ```bash ./isaaclab.sh train --rl_library rsl_rl \ --task Isaac-Lift-KukaAllegro-Camera \ presets=newton_mjwarp,isaacsim_rtx_renderer,rgb64,single_camera \ --seed 42 \ --num_envs 4 \ --max_iterations 1000 \ --visualizer kit ``` ... and it shows all the envs - checked all the env Xforms and camera and they don't have the scenePartition attribute/primvars: <img width="3813" height="2072" alt="image" src="https://github.com/user-attachments/assets/ea22b566-db95-498b-aa5d-445c1c2b0c8b" /> Conversely, tested with the environment variable enabled: ```bash ISAAC_LAB_ENABLE_ISAAC_RTX_PER_ENV_SCENE_PARTITION=1 ./isaaclab.sh train --rl_library rsl_rl \ --task Isaac-Lift-KukaAllegro-Camera \ presets=newton_mjwarp,isaacsim_rtx_renderer,rgb64,single_camera \ --seed 42 \ --num_envs 4 \ --max_iterations 1000 \ --visualizer kit ``` And we get the old behavior of only env_0 showing. @fatimaanes keen to hear if this helps mitigate the benchmark OOM you are seeing. ## 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 ## Summary (PR 1 of 2 — additive, no behavior change) Introduces single-namespace schema **fragments** so a prim can carry rigid-body properties from multiple USD namespaces at once (`physics:`, `physxRigidBody:`, `mjc:`), with core naming no backend. **Purely additive** — existing cfgs and the deprecated `RigidBodyPropertiesCfg` class are untouched. - **core:** `SchemaFragment`, `RigidBodyFragment`, `UsdPhysicsRigidBodyCfg`; `apply_namespaced` (generic per-fragment writer) and `apply_rigid_body_properties` (applies a fragment list with `UsdPhysics.RigidBodyAPI` as the implicit anchor). - **spawner:** `rigid_props` accepts a fragment list; legacy single cfgs keep working via a transition bridge (shapes/meshes/from_files/mesh_converter). - **backends:** `PhysxRigidBodyCfg` (physx), `MujocoRigidBodyCfg` (newton). - new `test_schema_fragments.py` + exports. **PR 2** (stacked) flips `RigidBodyPropertiesCfg` to a deprecation factory and migrates all call sites: #4 (review after this lands). ## Test Plan - [x] `test_schema_fragments.py` — 7 passed - [x] pre-commit clean · `./isaaclab.sh -d` docs build clean - [ ] CI First slice of the staged physics schema-cfg refactor (collision / mass / joint-drive / … follow later). Draft for review of the fragment API shape. ## Type of change - New feature (non-breaking change which adds functionality) ## 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 (`ruff` + `ruff-format`) on the changed files - [ ] I have made corresponding changes to the documentation (the public API reference is auto-generated via `./isaaclab.sh -d`; not separately authored) - [x] My changes generate no new warnings - [x] I have added tests that prove my feature works - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package - [ ] I have added my name to `CONTRIBUTORS.md` --------- Co-authored-by: ooctipus <zhengyuz@nvidia.com>
…ttp:// asset URLs in saved USDs (isaac-sim#6255) # Description Preserve URI asset paths in save_stage Avoid resolving asset paths with explicit URI schemes as filesystem paths during stage save path remapping. This keeps remote assets such as DomeLight texture URLs from being rewritten into invalid relative paths. Fixes # ([OMPE-96696](https://jirasw.nvidia.com/browse/OMPE-96696)) ## Type of change - Bug fix (non-breaking change which fixes an issue) ## Screenshots Please attach before and after screenshots of the change if applicable. ## 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 -->
# 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 - [ ] 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 -->
Bumped packages: - isaaclab: 7.1.0 → 7.2.0 - isaaclab_newton: 1.1.0 → 1.2.0 - isaaclab_ov: 0.5.0 → 0.5.1 - isaaclab_physx: 2.1.0 → 2.2.0 - isaaclab_tasks: 8.0.5 → 8.0.6 - isaaclab_visualizers: 1.0.2 → 1.0.3
…ndings (view series, part 1) (isaac-sim#6224) > **📦 Part 1 of a 5-part series** adding an OvPhysX binding view and migrating the assets onto it: > 1. **This PR** — add `OvPhysxView` (the API) + tests. > 2. Migrate the OvPhysX **Articulation** to `root_view`. > 3. Migrate the **RigidObject**. > 4. Migrate the **RigidObjectCollection** (uses the fused `prim_paths`+`key_aliases` path). > 5. Migrate the **sensors** (pose tracking; contact forces use a separate `ContactBinding` API and may not fully adopt the view). > > Parts 2–5 each depend only on this PR and can be reviewed independently. --- # Description Adds **`OvPhysxView`**, a string-keyed binding-management layer over the OVPhysX tensor bindings, in `isaaclab_ovphysx`. **Why.** OVPhysX is the odd backend out: it exposes physics attributes as a loose `dict[TensorType, TensorBinding]` with **no view object**, whereas Newton has `selection.ArticulationView` and PhysX has typed tensor views. Today callers must hold the right `TensorType` enum member, manage a destination buffer, and create bindings against a USD glob — and the `create_tensor_binding` calls are scattered across the asset classes behind a private `_get_binding`. `OvPhysxView` gives OVPhysX a single, discoverable surface as pleasant as Newton's selection API, and one owner of binding creation/caching that the asset/data classes can delegate to. It is the narrow, independently-useful slice carved out of the (shelved) cross-backend `get_property`/`set_property` effort; the full rationale and decision log live in `docs/superpowers/specs/2026-06-17-ovphysx-view-design.md`. **What it provides** - String-keyed access by lowercased `TensorType` name (auto-derived from the wheel enum — no hand-maintained table); a `TensorType` member is also accepted. - `get_attribute(name, out=)` — fresh-allocates a **typed** array (`wp.transformf` for poses, `wp.spatial_vectorf` for velocities, flat `float32` otherwise; via a maintained `_ATTR_DTYPE` map), no aliasing; **`read_into(name, dst)`** — zero-copy fill of a caller-owned, possibly structured-dtype buffer (`wp.transformf`, …) via a `float32` reinterpret view that is **cached per destination buffer** so the wheel's object-identity read cache stays warm even when callers hand a structured buffer each step; `set_attribute(name, values, indices=/mask=)` (structured sources reinterpreted); and a raw `binding_for(name)` accessor for adoption. - The fused multi-prim form (`prim_paths=[...]` + `key_aliases`) so `RigidObjectCollection` can use it. - Discoverability (`attribute_names`, `available_attributes`, `has_attribute`), metadata passthrough, and a nested error hierarchy (`UnknownAttribute` / `ReadOnlyAttribute` / `AttributeUnavailable` / `ShapeMismatch` / `DeviceMismatch`). **Device policy:** no implicit CPU↔GPU conversion — CPU-resident property types are read/written on CPU, and a buffer on the wrong device raises `DeviceMismatch` rather than being staged. **Scope / status:** this PR adds the view plus 48 mock-based unit tests (no live sim). The asset adoption that replaces `_get_binding`/`_binding_read`/`_binding_write` lives in the follow-up PRs (Articulation isaac-sim#6225, RigidObject isaac-sim#6226), which dogfood the view against a live sim on CPU and GPU and have fed fixes back here (e.g. `try_binding_for`, the read-view cache, typed `get_attribute`). Fixes # — N/A (internal design tracking; surviving slice of the shelved cross-backend view effort). ## Type of change - New feature (non-breaking change which adds functionality) ## Screenshots N/A — no user-facing visual 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 <!-- design note updated separately (docs/superpowers/specs/2026-06-17-ovphysx-view-design.md); no rendered API-doc change in this PR yet --> - [x] My changes generate no new warnings - [x] I have added tests that prove my feature works (`test/sim/test_ovphysx_view.py`, 48 tests) - [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
…for normals for all renderers (isaac-sim#6261) # Description - Added support for the "normals" data type in the ovrtx renderer integration - Added render correctness test coverage for "normals" across applicable physics/renderer combinations ## Screenshots See new golden images ## 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 - [] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
…sim#6246) # Description Introduce a new general "RTX" preset, where a user does not need to understand the differences and caveats between Isaac Sim RTX vs. ovrtx. As a user, they can specify presets=rtx, and we will have logic to determine whether Isaac Sim RTX or ovrtx should be used. Users can still explicitly specify presets=ovrtx or presets=isaacsim_rtx, and we will produce an error if any invalid combinations are provided (e.g. ovrtx + isaac sim). If a user specifies presets=rtx, runs physx from isaac sim or uses the kit visualizer, we will use isaac sim RTX. If a user specifies presets=rtx, does not launch any isaac sim instances (e.g. no kit visualizer and no isaac sim physx), then we can use ovrtx (or whichever option is more performant) Fixes OMPE-92354 <!-- 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 - New feature (non-breaking change which adds functionality) - Documentation update ## Checklist - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format` - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [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> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
# Description Adds the **mass** schema-fragment API. Unlike the other families, mass has **no backend split** — it is a single core fragment. - `MassFragment` marker + `MassCfg` (`physics:mass` / `physics:density`; `UsdPhysics.MassAPI` anchor) in `isaaclab`. - `apply_mass_properties` family writer (applies the `MassAPI` anchor, then dispatches each fragment via its `func`). - The spawner `mass_props` slot now also accepts a `MassCfg` / `list[MassCfg]`. This PR is purely **additive** and self-contained: it builds only on the single-namespace schema-fragment base (`SchemaFragment` + `apply_namespaced`) already in `develop`, existing call sites are untouched (a transition bridge routes legacy single cfgs to the existing `define_`/`modify_` writers), and it does **not** depend on any other open PR. ## Type of change - New feature (non-breaking change which adds functionality) ## Screenshots N/A — non-visual API 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 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
# Description Adds the **collision** schema-fragment API: a prim can carry collision properties from multiple USD namespaces (`UsdPhysics` + PhysX + Newton) at once, and core names no backend. - `CollisionFragment` marker + `UsdPhysicsCollisionCfg` (`physics:collisionEnabled`; `UsdPhysics.CollisionAPI` anchor) in `isaaclab`. - `PhysxCollisionCfg` (`physxCollision:*` — `contact_offset`, `rest_offset`, `torsional_patch_radius`, `min_torsional_patch_radius`) in `isaaclab_physx`. - `NewtonCollisionCfg` (`newton:*`) in `isaaclab_newton`. - `apply_collision_properties` family writer (applies the anchor, then dispatches each fragment via its `func`; core imports no backend). - The spawner `collision_props` slot now also accepts a `CollisionFragment` / `list[CollisionFragment]`. This PR is purely **additive** and self-contained: it builds only on the single-namespace schema-fragment base (`SchemaFragment` + `apply_namespaced`) already in `develop`, existing call sites are untouched (a transition bridge routes legacy single cfgs to the existing `define_`/`modify_` writers), and it does **not** depend on any other open PR. ## Type of change - New feature (non-breaking change which adds functionality) ## Screenshots N/A — non-visual API 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 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
Bumped packages: - isaaclab: 7.2.0 → 7.3.0 - isaaclab_newton: 1.2.0 → 1.3.0 - isaaclab_ov: 0.5.1 → 0.5.2 - isaaclab_ovphysx: 3.2.0 → 4.0.0 - isaaclab_physx: 2.2.0 → 2.3.0 - isaaclab_tasks: 8.0.6 → 8.0.7
# Description Adds so101 stack env for teleop + imitation learning Fixes # (issue) ## 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 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: Rafael Wiltz <rwiltz@nvidia.com>
Add the additive joint-drive schema-fragment framework, mirroring the rigid-body pilot. This is the override-func family: UsdPhysicsDriveCfg overrides func with apply_drive instead of the generic applier. Core: - JointDriveFragment marker and UsdPhysicsDriveCfg (typed multi-instance UsdPhysics.DriveAPI; max_effort -> max_force alias). - apply_drive: per-joint writer reproducing modify_joint_drive_properties (angular/linear instance pick, tendon-child guard, rad->deg conversion for angular stiffness/damping, drive_type -> type carve-out). - apply_joint_drive_properties: recursive family writer; DriveAPI is presence-gated (applied only when a UsdPhysicsDriveCfg is present). ensure_drives_exist is a writer kwarg, not a fragment field. Backends: - PhysxJointCfg (physxJoint:* / PhysxJointAPI, max_joint_velocity with max_velocity alias). - MujocoJointCfg (mjc:* / MjcJointAPI, actuatorgravcomp). Spawner: - Widen joint_drive_props slot to accept a fragment list; add the spawner-level ensure_drives_exist flag. Bridge the from-files spawn site while keeping the gravcomp auto-enable logic working for fragments. Add exports, test_joint_drive_fragments.py, and changelog fragments.
…t rad->deg conversion
The tendon-child guard (PhysxTendonAxisAPI without PhysxTendonAxisRootAPI) lived only inside apply_drive. The dispatch loop in apply_joint_drive_properties runs every fragment's func per joint prim, so PhysxJointCfg / MujocoJointCfg authored physxJoint:* / mjc:* attributes on tendon-child joints that the legacy modify_joint_drive_properties skipped wholesale (it returns False, so @apply_nested writes nothing and descends). Hoist the guard into the dispatch loop so a tendon-child joint is skipped for all fragments (and its children are descended into, matching the legacy writer). apply_drive keeps its own guard defensively. Add a regression test (verified to fail before the fix).
vidurv-nvidia
force-pushed
the
vidurv/schema-frag-jointdrive
branch
from
June 26, 2026 07:42
cf63878 to
89f743c
Compare
…saac-sim#6225) > ### 🔗 Stacked on top of isaac-sim#6224 (Part 1 — `OvPhysxView`) > This PR depends on **isaac-sim#6224** and is stacked on top of it. It targets > `develop`, but because isaac-sim#6224 has not merged yet, the diff below includes the > Part 1 `OvPhysxView` commits **as well as** the Part 2 migration. **Please > review isaac-sim#6224 first.** Once isaac-sim#6224 merges, this branch will be rebased onto > `develop` and the diff will shrink to the articulation migration only. # Description Part 2 of the OVPhysX view-migration series. It migrates the OVPhysX **`Articulation`** onto the new `OvPhysxView` binding manager introduced in **isaac-sim#6224 (Part 1)**. The goal of the series is to *dogfood* `OvPhysxView` on the real asset classes to surface weaknesses before the rigid-object/collection/sensor migrations, and to consolidate the scattered `create_tensor_binding` / `binding.read` / `binding.write` calls behind one managed surface. ### What changed * `Articulation._initialize_impl` now builds a single `OvPhysxView(physx, pattern, device)` and populates it via `try_binding_for` (best-effort: tensor types that do not apply to these prims are skipped, the asset still raises if *no* binding could be created). All binding creation, caching, and the CPU/GPU device policy now live in the view. * `ArticulationData` is constructed from the view; its counts come from the view metadata, and both `_get_binding` helpers (asset + data container) delegate to `OvPhysxView.try_binding_for`. * **Every write now goes through `root_view.set_attribute(...)`** instead of calling `binding.write` on a binding obtained from the view — the ~70 property / state / target / wrench / tendon writes, including the per-step actuation path. This brings the view's read-only, device, dtype, and contiguity guards to the asset write path, which previously bypassed them. * **Every read now goes through `root_view.read_into(...)`.** `ArticulationData` drops its bespoke `_get_read_view` reinterpret cache; the view now caches the `float32` reinterpret per destination buffer (keeping the wheel's read cache warm) and derives the structured layout from the binding shape, so the transform / spatial-vector / scalar read helpers collapse to one implementation. CPU-only reads keep their pinned-host staging. * `Articulation.root_view` now returns the `OvPhysxView` instead of a raw `dict[TensorType, TensorBinding]` (**breaking** — see migration note below). * The articulation tests route through the new API (`root_view.get_attribute(...)`, `root_view.try_binding_for(...)`). ### Breaking change / migration `Articulation.root_view` returns an `OvPhysxView`, not a dict: * `root_view[tensor_type]` → `root_view.try_binding_for(tensor_type)` * `tensor_type in root_view` (availability) → `root_view.try_binding_for(tensor_type) is not None` * full-tensor read → `root_view.get_attribute(tensor_type)` ### Findings surfaced (the point of the exercise) * **CPU-only property writes work through `set_attribute`.** mass/COM/inertia/DOF limits/stiffness/… are CPU-resident even on a GPU sim, and `set_attribute` refuses to stage CPU↔GPU. This is fine because the asset *already* pre-stages those to pinned CPU buffers, so the source is on the binding's native (CPU) device and the no-stage policy is satisfied with no change. (An initial assumption that the device policy would block these turned out to be wrong — verified by the green `cuda:0` run.) * `read_into` allocates a fresh `float32` reinterpret view per call, which would defeat the wheel binding's internal read cache that the data container caches by `(tensor_type, ptr)`; hot-path reads were kept on the cached-view path. * Per-step writes re-resolve the binding through `set_attribute` (a dict lookup + cheap guards) rather than the previously cached binding handle; the cost is negligible because the pre-built `float32` write-view passes through the reinterpret unchanged. A "bound writer" handle on the view would remove even that lookup — a possible Part 1 follow-up. * The view rejects 0-count bindings (stricter than the old loop, which could store a phantom binding) — a correctness improvement. ## Type of change - [x] New feature (non-breaking change which adds functionality) - [x] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] This change requires a documentation update ## Checklist - [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 (articulation tests route through the new API) - [x] I have updated the changelog (`source/isaaclab_ovphysx/changelog.d/`) - [ ] I have updated the documentation accordingly - [x] I have added my changes to the right `changelog.d` fragment(s) ### Testing Run kitless; cpu and cuda must be separate invocations (process-global device lock): ``` 101 passed, 4 xfailed # -k cpu 101 passed, 4 xfailed # -k cuda ```
Deduplicate the drive-instance resolution (revolute->angular, prismatic->linear) and the angular rad->deg branching shared by apply_drive and _ensure_drive_exists into a single helper, so the mapping has one source of truth.
The joint-level actuatorgravcomp <-> body-level gravcomp coupling lived in the core spawner, which had to import isaaclab_newton to detect the fragment types. Move it into a custom func, apply_mujoco_joint, that MujocoJointCfg now points to: it writes the mjc:* joint attrs and, when actuatorgravcomp is requested, enables mjc:gravcomp on the joint's child body (physics:body1) if unset. Per-joint dispatch covers every actuated body in the articulation. Core no longer adds backend coupling for the fragment path; the pre-existing legacy coupling is left untouched.
## Summary - cache PhysX body-frame COM offsets as model properties instead of re-reading them every sim timestamp - invalidate all PhysX COM-offset-dependent cached buffers after set_coms_index writes - apply the same model-property cache policy and dependent invalidation to OVPhysX articulation COM offsets - add PhysX and OVPhysX regression tests for timestamp reuse, setter cache updates, joint writes, partial writes, and dependent invalidation - add changelog fragments for the touched packages This intentionally keeps the scope to the cached-property fix; it does not include PR isaac-sim#6260's local-only composition fast path. ## Profiling - G1 PhysX, 4096 env quick profile before the dependent-invalidation follow-up: compose_to_body_frame dropped from ~7.25 ms to ~0.24 ms - after the cache fix, normal step time was 69.20 ms vs 68.76 ms with compose skipped in the same quick profile - full-run wall timings were noisy on the laptop/GPU, likely thermal throttling, but no longer showed the pre-fix COM-read cliff ## Test Plan - python3 tools/changelog/cli.py check develop - pre-commit run --from-ref origin/develop --to-ref HEAD - git diff --check origin/develop...HEAD - ./isaaclab.sh -p -m py_compile source/isaaclab_physx/isaaclab_physx/assets/articulation/articulation_data.py source/isaaclab_physx/isaaclab_physx/assets/articulation/articulation.py source/isaaclab_ovphysx/isaaclab_ovphysx/assets/articulation/articulation_data.py source/isaaclab_ovphysx/isaaclab_ovphysx/assets/articulation/articulation.py source/isaaclab/test/assets/test_articulation_iface.py source/isaaclab_ovphysx/test/assets/test_articulation.py - ./isaaclab.sh -p -m pytest source/isaaclab/test/assets/test_articulation_iface.py -k 'physx_set_coms_index_invalidates_body_com_pose_b_dependents or physx_body_com_pose_b_is_cached_across_sim_timestamps or physx_set_coms_index_updates_body_com_pose_b_cache or physx_joint_position_write_preserves_body_com_pose_b_cache or physx_partial_set_coms_index_initializes_cold_body_com_pose_b_cache' -q - ./isaaclab.sh -p -m pytest source/isaaclab_ovphysx/test/assets/test_articulation.py -k 'body_com_pose_b_cache_and_set_coms_invalidation' -q
…m#6247) # Description All other tests are treated as a part of the full suite and do not get run on push only the following: [rendering-correctness](https://github.com/isaac-sim/IsaacLab/actions/runs/27923944023/job/82630331274#logs) (~20m) [rendering-correctness-kitless](https://github.com/isaac-sim/IsaacLab/actions/runs/27923944023/job/82630331226#logs) (~20m) <!-- 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 - 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 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 -->
Restructure the joint-drive spawn block so the fragment path is a clean dispatch to apply_joint_drive_properties (no isaaclab_newton import, no gravcomp coupling) and the pre-existing legacy gravcomp auto-enable lives verbatim in the legacy else-branch. Previously the Newton import and the gravcomp detection ran for both paths; now no backend coupling is added in core for the fragment path.
Cover the cases the two happy-path tests missed: actuatorgravcomp unset must leave the child body's gravcomp untouched (guards against an always-writes regression), and per-joint dispatch must enable gravcomp on every joint's own child body across the articulation (revolute and prismatic).
The legacy test_newton_schemas covers gravcomp/actuatorgravcomp written + not-written-when-none via the define_/modify_ writers; the fragment path only had the written cases. Add the two missing not-written-when-none equivalents: actuatorgravcomp via apply_mujoco_joint (asserts not authored to True — the fragment applies MjcJointAPI so the attr resolves to the schema default False) and gravcomp via apply_namespaced (MujocoRigidBodyCfg applies no schema, so the attr stays unauthored).
# Description Adds the **tendons** schema-fragment API. - `FixedTendonFragment` / `SpatialTendonFragment` markers + `PhysxFixedTendonCfg` / `PhysxSpatialTendonCfg` in `isaaclab_physx`. These are data carriers that override `func` to the existing multi-instance `modify_fixed_tendon_properties` / `modify_spatial_tendon_properties` writers (tune-not-apply), since tendon attributes live under multi-instance `PhysxTendonAxisRootAPI:*` schemas that the generic `apply_namespaced` writer cannot handle. - The spawner `fixed_tendons_props` / `spatial_tendons_props` slots now also accept fragment lists. This PR is purely **additive** and self-contained: it builds only on the single-namespace schema-fragment base (`SchemaFragment` + `apply_namespaced`) already in `develop`, existing call sites are untouched (a transition bridge routes legacy single cfgs to the existing `define_`/`modify_` writers), and it does **not** depend on any other open PR. ## Type of change - New feature (non-breaking change which adds functionality) ## Screenshots N/A — non-visual API 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 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
…-jointdrive # Conflicts: # source/isaaclab/isaaclab/sim/schemas/schemas_cfg.py # source/isaaclab_newton/isaaclab_newton/sim/schemas/__init__.pyi # source/isaaclab_newton/isaaclab_newton/sim/schemas/schemas.py # source/isaaclab_physx/isaaclab_physx/sim/schemas/__init__.pyi # source/isaaclab_physx/isaaclab_physx/sim/schemas/schemas.py # source/isaaclab_physx/isaaclab_physx/sim/schemas/schemas_cfg.py
Address greptile: the fragile str()-based PhysxTendonAxisAPI substring check was duplicated across apply_drive and apply_joint_drive_properties. Replace both with a backend-agnostic hook: core exposes register_joint_drive_skip_predicate + _skip_joint_drive, and the PhysX package registers a robust set-based _is_physx_tendon_child detector on import. Core no longer carries any PhysX schema name in the joint-drive writers; the skip behavior is preserved (the predicate is registered whenever PhysX schema fragments are used).
Cover the registry mechanism independent of PhysX: a registered predicate excludes a joint, and the empty default skips nothing. Uses monkeypatch to isolate the module-global predicate list from the session-wide PhysX registration.
…ac-sim#6262) # Description Cherry picks commits from the release branch that fixed some docker setup and version updates: - isaac-sim#6169 - isaac-sim#6192 - isaac-sim#6195 - isaac-sim#6209 - isaac-sim#6211 ## Type of change <!-- As you go through the list, delete the ones that are not applicable. --> - Bug fix (non-breaking change which fixes an issue) ## Checklist - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format` - [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 --> --------- Co-authored-by: Sheikh Dawood <7774242+sheikh-nv@users.noreply.github.com>
…saac-sim#6226) > ### 🔗 Stacked on top of isaac-sim#6224 (Part 1 — `OvPhysxView`) > This PR depends on **isaac-sim#6224** and is branched off it (a *sibling* of the Articulation > migration isaac-sim#6225, not stacked on it). It targets `develop`, but because isaac-sim#6224 has not > merged yet, the diff below includes the Part 1 `OvPhysxView` commits **as well as** the > Part 3 migration. **Please review isaac-sim#6224 first.** Once isaac-sim#6224 merges, this branch will be > rebased onto `develop` and the diff will shrink to the rigid-object migration only. # Description Part 3 of the OVPhysX view-migration series. It migrates the OVPhysX **`RigidObject`** onto the `OvPhysxView` binding manager introduced in **isaac-sim#6224 (Part 1)**, mirroring the Articulation migration in **isaac-sim#6225 (Part 2)**. The series dogfoods `OvPhysxView` on the real asset classes to surface weaknesses and to consolidate the scattered `create_tensor_binding` / `binding.read` / `binding.write` calls behind one managed surface. ### What changed * `RigidObject._initialize_impl` builds a single `OvPhysxView(physx, pattern, device)` and eagerly creates the rigid-body bindings through it. RigidObject keeps its **fail-loud** contract (a missing core type raises a helpful `RuntimeError`) by creating each via `binding_for` rather than the best-effort `try_binding_for` the articulation uses. * `RigidObjectData` is constructed from the view; counts come from the view's bindings, and both `_get_binding` helpers delegate to `OvPhysxView.try_binding_for`. * **Every write goes through `root_view.set_attribute(...)`** — pose/velocity/wrench plus the CPU-only mass/COM/inertia properties (which the asset pre-stages to pinned CPU buffers, so the source is already on the binding's native device and the view's no-implicit-staging policy is satisfied). Writes now get the view's read-only/device/ dtype/contiguity guards. * **Every read goes through `root_view.read_into(...)`.** `RigidObjectData._read_binding_into` routes through the view, which caches the `float32` reinterpret per destination buffer and derives the structured layout from the binding shape — this path previously rebuilt the reinterpret on every read, so it is a strict read-cache improvement. CPU-only reads keep their pinned-host staging. * `RigidObject.root_view` now returns the `OvPhysxView` instead of a raw `dict[TensorType, TensorBinding]` (**breaking** — see migration note). ### Breaking change / migration `RigidObject.root_view` returns an `OvPhysxView`, not a dict: * `root_view[tensor_type]` → `root_view.try_binding_for(tensor_type)` * full-tensor read → `root_view.get_attribute(tensor_type)` ## Type of change - [x] New feature (non-breaking change which adds functionality) - [x] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] This change requires a documentation update ## Checklist - [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 (rigid-object tests exercise the migrated read/write paths) - [x] I have updated the changelog (`source/isaaclab_ovphysx/changelog.d/`) - [ ] I have updated the documentation accordingly - [x] I have added my changes to the right `changelog.d` fragment(s) ### Testing Run kitless; cpu and cuda must be separate invocations (process-global device lock): ``` 42 passed, 10 xfailed # test_rigid_object.py -k cpu 41 passed, 2 skipped, 8 xfailed # test_rigid_object.py -k cuda 1 passed # test_rigid_object_helpers.py ```
…aac-sim#6228) > ### 🔗 Stacked on top of isaac-sim#6224 (Part 1 — `OvPhysxView`) > Branched off isaac-sim#6224 as a sibling of the asset migrations (isaac-sim#6225/isaac-sim#6226/isaac-sim#6227). Targets `develop`; until isaac-sim#6224 merges, the diff below includes the Part 1 `OvPhysxView` commits. **Please review isaac-sim#6224 first.** # Description Part 5 of the OVPhysX view-migration series — route the **IMU** sensor's tensor-binding management through `OvPhysxView`. Internal refactor; **no public API change** (sensors do not expose a `root_view`). * `_initialize_impl` builds one `OvPhysxView` instead of separate `create_tensor_binding` calls; binding handles come from `binding_for`. * Pose/state reads route through `read_into` (cached `float32` reinterpret, typed off the binding shape), replacing the manual `wp.array(ptr=...)` reinterpret views. * The CPU-only `RIGID_BODY_COM_POSE` keeps its pinned-host staging + `wp.copy` to the sim device. * Numeric behavior unchanged. ## Type of change - [x] This change requires no public API change (internal refactor) ## Checklist - [x] I have run the `pre-commit` checks with `./isaaclab.sh --format` - [x] My changes generate no new warnings - [x] I have added a changelog fragment (`.skip` — internal refactor, no user-facing change / no bump) ## Testing `test_imu.py` — cpu: **12 passed**, cuda: **12 passed**.
…aac-sim#6229) > ### 🔗 Stacked on top of isaac-sim#6224 (Part 1 — `OvPhysxView`) > Branched off isaac-sim#6224 as a sibling of the asset migrations (isaac-sim#6225/isaac-sim#6226/isaac-sim#6227). Targets `develop`; until isaac-sim#6224 merges, the diff below includes the Part 1 `OvPhysxView` commits. **Please review isaac-sim#6224 first.** # Description Part 5 of the OVPhysX view-migration series — route the **PVA** sensor's tensor-binding management through `OvPhysxView`. Internal refactor; **no public API change** (sensors do not expose a `root_view`). * `_initialize_impl` builds one `OvPhysxView` instead of separate `create_tensor_binding` calls; binding handles come from `binding_for`. * Pose/state reads route through `read_into` (cached `float32` reinterpret, typed off the binding shape), replacing the manual `wp.array(ptr=...)` reinterpret views. * The CPU-only `RIGID_BODY_COM_POSE` keeps its pinned-host staging + `wp.copy` to the sim device. * Numeric behavior unchanged. ## Type of change - [x] This change requires no public API change (internal refactor) ## Checklist - [x] I have run the `pre-commit` checks with `./isaaclab.sh --format` - [x] My changes generate no new warnings - [x] I have added a changelog fragment (`.skip` — internal refactor, no user-facing change / no bump) ## Testing `test_pva.py` — cpu: **13 passed**, cuda: **13 passed**.
…rt 5) (isaac-sim#6230) > ### 🔗 Stacked on top of isaac-sim#6224 (Part 1 — `OvPhysxView`) > Branched off isaac-sim#6224 as a sibling of the asset migrations (isaac-sim#6225/isaac-sim#6226/isaac-sim#6227). Targets `develop`; until isaac-sim#6224 merges, the diff below includes the Part 1 `OvPhysxView` commits. **Please review isaac-sim#6224 first.** # Description Part 5 of the OVPhysX view-migration series — route the **joint-wrench** sensor's tensor-binding management through `OvPhysxView`. Internal refactor; **no public API change** (sensors do not expose a `root_view`). * `_initialize_impl` builds one `OvPhysxView` instead of separate `create_tensor_binding` calls; binding handles come from `binding_for`. * Pose/state reads route through `read_into` (cached `float32` reinterpret, typed off the binding shape), replacing the manual `wp.array(ptr=...)` reinterpret views. * All bindings are GPU-resident state (`ARTICULATION_LINK_INCOMING_JOINT_FORCE`); no CPU staging needed. * Numeric behavior unchanged. ## Type of change - [x] This change requires no public API change (internal refactor) ## Checklist - [x] I have run the `pre-commit` checks with `./isaaclab.sh --format` - [x] My changes generate no new warnings - [x] I have added a changelog fragment (`.skip` — internal refactor, no user-facing change / no bump) ## Testing `test_joint_wrench_sensor.py` — cpu: **11 passed**, cuda: **11 passed**.
…ries, part 5) (isaac-sim#6232) > ### 🔗 Stacked on top of isaac-sim#6224 (Part 1 — `OvPhysxView`) > Branched off isaac-sim#6224 as a sibling of the other migrations. Targets `develop`; until isaac-sim#6224 merges the diff includes the Part 1 `OvPhysxView` commits. **Please review isaac-sim#6224 first.** # Description Part 5 of the OVPhysX view-migration series — the **contact sensor**. This is the *partial* one: only the `RIGID_BODY_POSE` pose binding (the `track_pose` path) is a `TensorBinding` the view can manage, so only it is migrated. The **`ContactBinding`** (net forces via `read_net_forces`, force matrix via `read_force_matrix`) is a separate ovphysx wheel API that `OvPhysxView` does not wrap — it is left exactly as-is. * `_initialize_impl` builds an `OvPhysxView` for the pose binding (when `track_pose`) and obtains it via `binding_for(TT.RIGID_BODY_POSE)`; the count-mismatch check and the `pose_binding` accessor are unchanged. * The per-step pose read goes through `read_into(TT.RIGID_BODY_POSE, ...)` (cached reinterpret). * The `ContactBinding` create/read/destroy paths are untouched. * Internal refactor; no public API change. ## Type of change - [x] Internal refactor (non-breaking) ## Checklist - [x] I have run the `pre-commit` checks with `./isaaclab.sh --format` - [x] My changes generate no new warnings - [x] Changelog fragment (`.skip` — internal refactor, no bump) ## Testing `test_contact_sensor.py` — cpu: **9 passed, 4 skipped**; cuda: **9 passed, 4 skipped** (exercises both the ContactBinding force path and the migrated pose-tracking path).
…sxView (view series) (isaac-sim#6233) > ### 🔗 Stacked on top of isaac-sim#6224 (Part 1 — `OvPhysxView`) > Branched off isaac-sim#6224 as a sibling of the asset/sensor migrations. Targets `develop`; until isaac-sim#6224 merges the diff includes the Part 1 `OvPhysxView` commits. **Please review isaac-sim#6224 first.** # Description Two more `RIGID_BODY_POSE` binding consumers the asset (isaac-sim#6225-6227) and sensor (isaac-sim#6228-6232) passes didn't cover, migrated together in one PR: * **`OvPhysxFrameView`** (`sim/views/ovphysx_frame_view.py`) — the frame view that cameras / `XformPrim` use. Builds one `OvPhysxView` + `try_binding_for(RIGID_BODY_POSE)` (preserving its explicit "matched zero bodies" error, since the view rejects a 0-count binding), and reads via `read_into`. * **`OvPhysxSceneDataBackend`** (`physics/ovphysx_manager.py`) — the scene-data provider. Builds one `OvPhysxView` per distinct rigid-body pattern, stores it on the per-pattern entry, and reads via `read_into`; the per-entry merge into the transform buffer is unchanged. Both are internal refactors — **no public API change** (neither exposes a `root_view`). The `ContactBinding` is unrelated (separate wheel API; see isaac-sim#6232). The scene-data backend's bypass-init unit test hand-seeds the internal entry dict, so it now seeds a matching `view` stub with `read_into`. ## Type of change - [x] Internal refactor (non-breaking) ## Checklist - [x] I have run the `pre-commit` checks with `./isaaclab.sh --format` - [x] Changelog fragment (`.skip` — internal refactor, no bump) ## Testing * `test_views_xform_prim_ovphysx.py` — cpu: **18 passed**, cuda: **18 passed**. * `test_ovphysx_scene_data_backend.py` — **11 passed**.
…saac-sim#6234) # Description - Add `upload-omni-github-test-results` composite action to convert JUnit XML into the omni-github test-result artifact contract. - Wire the upload step into install-ci, package test, and Docker test composite actions. - Use IsaacLab upstream repository ID `567038244` in artifact identities for omni-github registration. - [x] Installation Tests workflow uploads `pytest-results-*--v1-567038244-*` artifacts - [x] omni-github registration PR can reference real sample artifact names from this run link to slack discussion: https://nvidia.slack.com/archives/C0B16FFDDBP/p1782216333267729 link to artifact schema: https://github.com/NVIDIA-Omniverse/omni-github/blob/main/docs/test-results/clients/artifact-upload/artifact-schema.md reference to junit format: https://github.com/testmoapp/junitxml#structure link to test results dashboard: https://omni-github-stg.horde-aks.nvidia.com/test-results/repository-test-summary?repository=isaac-sim%2FIsaacLab&days=30&prMode=include&groupBy=job_name&groupValue=isaaclab+%28core%29+%5B3%2F3%5D example artifact from most recent pipeline run: - rendering correctness test: [test_results.json](https://github.com/user-attachments/files/29359914/test_results.json) - asset test: https://github.com/isaac-sim/IsaacLab/actions/runs/28196987278/artifacts/7890469555 corresponding golden images are uploaded with Fixes # ([OMPE-98494](https://jirasw.nvidia.com/browse/OMPE-98494)) <!-- 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 - 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 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 -->
Bumped packages: - isaaclab: 7.3.0 → 7.4.0 - isaaclab_assets: 0.3.4 → 0.4.0 - isaaclab_newton: 1.3.0 → 1.4.0 - isaaclab_ovphysx: 4.0.0 → 5.0.0 - isaaclab_physx: 2.3.0 → 2.4.0 - isaaclab_tasks: 8.0.7 → 8.1.0
The PhysX schema package registered its joint-drive skip predicate by importing the register function from the core schemas module at package import time. That core module imports pxr at module top, so importing the backend package eagerly pulled USD libraries into otherwise USD-free import paths (e.g. resolving a robot config), failing the omni/pxr-free import guard. Move the registry and registration API into a dedicated USD-free hooks module so a backend can register its hook at import time without dragging in pxr.
# Description Adds the **mesh-collision** schema-fragment API (collision-mesh cooking approximations). - `MeshCollisionFragment` marker + `UsdPhysicsMeshCollisionCfg` (`physics:approximation` token; `UsdPhysics.MeshCollisionAPI` anchor) in `isaaclab`. - PhysX cooking fragments in `isaaclab_physx` — `PhysxConvexHullCfg`, `PhysxConvexDecompositionCfg`, `PhysxTriangleMeshCfg`, `PhysxSDFMeshCfg` (each its own `physx*Collision:*` namespace + applied schema). - `NewtonMeshCollisionCfg` / `NewtonSDFCollisionCfg` in `isaaclab_newton`. - `apply_mesh_collision` — the default `func` every `MeshCollisionFragment` carries. It writes the fragment's backend cooking namespace (via `apply_namespaced`) **and** the shared `physics:approximation` token its `mesh_approximation_name` implies (skipping `"none"` so it does not clobber). This keeps the approximation-token coupling with the fragment, matching the tendon fragments where the backend application logic lives in a `func` rather than being special-cased by the caller. - `apply_mesh_collision_properties` family writer — applies the `MeshCollisionAPI` anchor, then dispatches each fragment via its `func` and aggregates the results. It is the same generic shape as the sibling family writers (`apply_collision_properties`, `apply_rigid_body_properties`); the shared-token "last non-`none` wins" behavior emerges from dispatch order rather than a special reduction pass in the writer body. Core imports no backend. - The spawner `mesh_collision_props` slot now also accepts a fragment list. This PR is purely **additive** and self-contained: it builds only on the single-namespace schema-fragment base (`SchemaFragment` + `apply_namespaced`) already in `develop`, existing call sites are untouched (a transition bridge routes legacy single cfgs to the existing `define_`/`modify_` writers), and it does **not** depend on any other open PR. ## Type of change - New feature (non-breaking change which adds functionality) ## Screenshots N/A — non-visual API 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 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
…-jointdrive # Conflicts: # source/isaaclab/isaaclab/sim/__init__.pyi # source/isaaclab/isaaclab/sim/schemas/__init__.pyi # source/isaaclab/isaaclab/sim/schemas/schemas_cfg.py
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
Additive joint-drive fragment family (custom func)
UsdPhysicsDriveCfgoverridingfunc→apply_drive(multi-instanceDriveAPI, rad→deg for angular,drive_type→type, tendon-child guard)PhysxJointCfg(physxJoint:maxJointVelocity); newton:MujocoJointCfg(mjc:actuatorgravcomp)apply_joint_drive_properties(...):DriveAPIpresence-gated;ensure_drives_existis a spawner-level flag.max_joint_velocityrad→deg conversion is NOT reproduced (it now lives onPhysxJointCfgwritten by the generic applier, which has no joint-type awareness). For angular-joint parity,PhysxJointCfgneeds its own override func. Status: authored, ruff clean, sim verification pending.Fixes # (N/A — part of the staged physics schema-fragment refactor; no tracked public issue)
Type of change
Screenshots
N/A — no user-facing visual changes.
Checklist
ruff+ruff-format) on the changed files./isaaclab.sh -d; not separately authored)source/<pkg>/changelog.d/for every touched packageCONTRIBUTORS.md