Repository navigation
[pull] develop from isaac-sim:develop - #79
Merged
Merged
Conversation
…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.
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
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 : )