Skip to content

[pull] develop from isaac-sim:develop - #79

Merged
pull[bot] merged 4 commits into
mataylor-nvidia:developfrom
isaac-sim:develop
Sep 28, 2026
Merged

pull[bot] merged 4 commits into
mataylor-nvidia:developfrom
isaac-sim:develop

Conversation

@pull

@pull pull Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

yufengsjtu and others added 4 commits September 28, 2026 11:09
…on defaults (#7759)

# Description

Enable detailed contact sensing on OvPhysX and align its default TGS
external-force integration behavior with the PhysX backend.

This PR contains two separate commits to keep the sensor feature and
the default simulation behavior change independently reviewable.

### Detailed contact sensing

- Connect `ContactBinding.read_contact_data()` and
  `ContactBinding.read_friction_data()` to the ContactSensor interface.
- Populate average filtered contact positions and summed filtered
  friction forces.
- Support friction-force history and selective environment reset.
- Correct pattern-major indexing when mapping SDK detail buffers into
  environment/sensor/filter buffers.
- Require non-empty filters and a positive detailed-contact capacity.
- Bound kernel reads to the returned buffer capacity. OVPhysX warns and
truncates
oversized contact data; increase the configured capacity to retain all
contacts.

Existing normal-only force aliases retain their behavior. Aggregate
friction reporting remains unsupported on OvPhysX, and existing pose
tracking limitations are unchanged.

### TGS default alignment

Change `OvPhysxCfg.enable_external_forces_every_iteration` from `False`
to `True`, matching the PhysX backend default.

Matched-state ANYmal diagnostics showed that this configuration
difference affected both normal and friction forces. With the flag
aligned, the two backends agreed to approximately `1e-4 N` in the tested
single-state, 5 ms probe. This is a targeted consistency check, not a
general accuracy ranking.

### Breaking behavior change and migration

Simulations relying on the previous OvPhysX default may produce
different
velocities, contact forces, and trajectories.

To retain the previous integration behavior, configure:

```python
OvPhysxCfg(enable_external_forces_every_iteration=False)
```

Explicit `True` and `False` overrides remain supported and are tested
through USD scene-attribute propagation.

### Scope and dependencies

- No dependency additions, version upgrades, or lockfile changes.
- Validation used develop's pinned OvPhysX 0.6.3.
- Experimental comparison scripts and generated reports are not included
  in the repository changes.
- This PR does not change built-in `ContactSensor.debug_vis` behavior.
- Minor and major changelog fragments cover the feature and the default
  behavior change respectively.

Related issue: None linked.

### Validation

- Physics-manager lifecycle and CPU/GPU Warp kernel tests: 51 passed.
- CPU rigid-object and contact-sensor tests: 37 passed, 1 expected
failure.
- GPU 0 rigid-object and contact-sensor tests: 30 passed, 1 expected
failure.
- Full repository formatting/pre-commit checks: passed.
- Changelog validation: passed.

Coverage includes raw SDK agreement, contact-position geometry checks,
optional tracking modes, no-contact values, history, selective reset,
multi-environment/multi-sensor indexing, invalid configuration, capacity
truncation, and default/explicit TGS configuration propagation.

The frictionless-sliding test checks tangential velocity, matching
PhysX; its
vertical contact-solver velocity is not a friction invariant. The
original CPU
failure was reproduced before correcting the assertion. Truncated-buffer
kernel
cases also failed before bounding reads and passed afterward.

Existing runtime deprecation warnings remain. Full-file Pyright is not
claimed clean; existing configuration-sentinel and USD-stub diagnostics
were kept outside this change.

## Type of change

- New feature (non-breaking change which adds functionality)
- Breaking change (default simulation behavior changes unless explicitly
overridden)
- Documentation update

## Release backport

- [x] <!-- backport-active-release --> Backport this pull request to the
active release branch after it merges into `develop`

## Screenshots

<img width="2080" height="896" alt="image"
src="https://github.com/user-attachments/assets/c9a118a4-5e41-4a5f-af4b-ca20be26523d"
/>
The first image contrasts the previous rejection of detailed tracking
options with the newly available filtered force data. The before panel
shows the runtime error as text; the after panel is an actual simulation
capture using Newton GL markers.

<img width="2560" height="2080" alt="image"
src="https://github.com/user-attachments/assets/50e6ff31-9464-4621-8d4c-5d9b54334d04"
/>

The second image compares:
- PhysX with external forces every iteration enabled and disabled.
- OvPhysX with the same option disabled and enabled.

All four cases use the same mechanical input state, joint torques, and
timestep. The displayed posture is the shared input state; force labels
come from the following physics step.

These images are validation artifacts, not changes to built-in sensor
debug visualization.

## Checklist

Docker and GPU tests run on demand. Push the commits you want tested,
then comment `run-ci` on the pull request.

- [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
`uv run isaaclab -f`, the uv-managed equivalent of `./isaaclab.sh
--format`
- [x] I have made corresponding changes to the documentation
- [ ] 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 changelog fragments under `source/<pkg>/changelog.d/`
for every touched package
- [ ] I have added my name to `CONTRIBUTORS.md` or my name already
exists there

---------

Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Octi Zhang <zhengyuz@nvidia.com>
## Summary

Adds volume and surface deformable schema fragments to the existing
fragment API.

```python
spawn = sim_utils.MeshRectangleCfg(
    size=(0.5, 0.5),
    surface_deformable_props=sim_utils.OmniPhysicsDeformableBodyCfg(mass=0.2),
    collision_props=sim_utils.UsdPhysicsCollisionCfg(collision_enabled=True),
    physics_material=sim_utils.OmniPhysicsSurfaceDeformableMaterialCfg(surface_thickness=0.01),
)
```

- `volume_deformable_props` and `surface_deformable_props` accept a
fragment, list, or explicit path mapping. A bare fragment targets only
the spawn prim, not every mesh below it. Only one deformable slot may be
set.
- Creation prepares the simulation mesh, applies the active backend's
body/simulation schemas, then authors the fragments. Existing bodies are
tuned without rebuilding their meshes. A supplied TetMesh is reused.
- PhysX and Newton implement the setup hook. PhysX supplies rest/bind
poses; Newton supplies its native schema tokens and visual mesh setup.
- Physics materials accept deformable fragments and mixed
rigid/deformable lists. The generalized writer is
`spawn_physics_material_from_fragments`; its former rigid-only name
remains a deprecated forwarder.
- Legacy deformable configs and entry points remain available.

OVPhysX's new fragment-slot setup is not implemented in this PR; its
existing `deformable_props` path remains supported.

## Rebase and cleanup

Rebased onto develop `5e6b21bf3`.

Removed the empty Newton body placeholder, a material-warning subtree
walk and its suppression flag, two one-use spawner helpers, redundant
callable resolution, an unused backend-hook argument, and the unused
tetrahedralization argument on the surface writer. Removed stale
changelog fragments from the already-merged dependency.

Consolidated five new test files into the remaining deformable and
existing schema suites. Tests exercise authored USD results, including
nested-body ownership, rather than a stub manager or metadata-only
assertions.

Fixed two authoring errors:
- Bare collision fragments now tune the deformable simulation mesh, not
the inert body root.
- Mesh preparation uses the explicitly supplied stage rather than
searching the current stage.

The net PR addition decreased from 2,007 to 1,280 lines, including
production code from +964 to +766 and tests from +730 to +281. These
counts compare each branch against its respective develop merge base.

## Validation

- **187 tests passed** across deformable fragments, material fragments,
mesh spawning, Newton schemas, core schemas, backend separation, schema
fragments, and deprecation coverage.
- Ran against Isaac Sim 6.1, including both PhysX and Newton schema
setup. Two unrelated asset-dependent articulation tests were excluded
from this focused run.
- Verified the collision-target and explicit-stage regression cases fail
with the previous behavior restored.
- `uv run isaaclab -f` and changelog checks passed.
- Documentation builds and the broader test matrix are left to CI.

## Type of change

New feature. Existing public entry points are retained.

## Release backport

- [x] <!-- backport-active-release --> Backport this pull request to the
active release branch after it merges into `develop`
…#7449)

## Summary

Newton 1.6 stores position targets in joint-coordinate layout: a
floating root uses seven coordinates but six DOFs, and a ball joint uses
four quaternion components but three DOFs. Reusing DOF indices for these
targets can address the wrong entries.

Isaac Lab already supports the coordinate layout through #7520. This PR
therefore no longer pins `newton.use_coord_layout_targets = False` or
changes Newton's process-wide settings. There are **no production
changes relative to develop**.

The existing coordinate test now uses a real Newton model instead of a
mocked articulation view. Across two worlds, it checks that public joint
positions remain DOF-shaped and command submission writes the correct
coordinate targets, including ball-joint quaternions, without modifying
floating-root targets. The separate pin-only test is removed.

Net diff: **45 additions, 53 deletions**, plus a test-only changelog
marker.

## Validation

With Newton 1.6's default layout and neither package applying a pin:

- 22 coordinate and shared actuator-adapter tests passed.
- 15 Newton rollout checks passed: DC motors, mixed implicit/explicit
actuators, delayed PD, and reversed joint ordering.
- 13 PhysX rollout checks passed with Newton-native DC motor, delayed
PD, and mixed actuators.
- The regression fails when the legacy layout is forced. Bypassing
command-side quaternion conversion also fails the ball-joint case.
- `uv run isaaclab -f` passed.

Rollouts used GPU 0 and Isaac Sim 6.1.

## Release backport

- [x] <!-- backport-active-release --> Backport this pull request to the
active release branch after it merges into `develop`

---------

Co-authored-by: Kelly Guo <kellyg@nvidia.com>
Co-authored-by: Octi Zhang <zhengyuz@nvidia.com>
# Description

`scripts/benchmarks/nsys_trace.json` referenced six `OVRTXRenderer`
methods that were renamed or consolidated away, so `test_nsys_trace.py`
failed to resolve them. The test skips when `isaaclab_ov` is not
importable, which is why this only surfaces on PRs that install the `ov`
extra — for example #7137, where it fails the required `isaaclab (core)
[1/3]` check.

Each rename was verified against the commit that made it:

| Removed | Replaced by | Commit |
|---|---|---|
| `_clone_sources_in_ovrtx`, `_clone_sources_ovstage` | `_clone_sources`
| #8045 |
| `_update_scene_partitions_after_clone_ovstage` |
`_update_scene_partitions_after_clone` (already listed) | #8045 |
| `_setup_xform_bindings` | `_setup_xform_bindings_legacy`,
`_setup_xform_bindings_ovstage` | #6602 |
| `_setup_deformable_bindings`, `_setup_particle_bindings` |
`_setup_geometry_bindings_legacy`, `_setup_geometry_bindings_ovstage` |
#7995 |

Both the `legacy` and `ovstage` variants are listed because
`ISAAC_LAB_OVRTX_USE_OVSTAGE` selects the path at runtime, so the config
has to resolve under either setting.

Net 17 traced functions to 16. No code or behaviour change — this only
brings the NVTX trace definitions back in line with the functions that
exist.

## 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
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

Notes on the checklist: no changelog fragment is required —
`tools/changelog/cli.py` scopes to `source/`, and this change is under
`scripts/`. No new test is added because `test_nsys_trace.py` already
covers this exactly; it is the test that currently fails and will pass
with this change. No documentation change is needed as no public API or
behaviour changes.
@pull pull Bot locked and limited conversation to collaborators Sep 28, 2026
@pull pull Bot added the ⤵️ pull label Sep 28, 2026
@pull
pull Bot merged commit 9485e4b into mataylor-nvidia:develop Sep 28, 2026
2 of 3 checks passed
@github-actions github-actions Bot added documentation Improvements or additions to documentation isaac-lab labels Sep 28, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

⤵️ pull documentation Improvements or additions to documentation isaac-lab

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants