Adds surface deformable support and migrate deformable API to isaaclab_physx#5049
Conversation
Greptile SummaryThis PR migrates the deformable body subsystem to the updated Omni Physics v110 API, moving all PhysX-specific schemas, materials, and spawner configs from Key changes:
Confidence Score: 4/5
Important Files Changed
Sequence DiagramsequenceDiagram
participant User
participant SpawnFn as spawn_mesh / spawn_from_usd
participant Schemas as isaaclab_physx.sim.schemas
participant deformableUtils as omni.physx.deformableUtils
participant MatSpawn as spawn_deformable_body_material
participant USD as USD Stage
participant InitImpl as DeformableObject._initialize_impl
participant PhysX as PhysX (DeformableBodyView)
User->>SpawnFn: spawn with DeformableBodyPropertiesCfg + DeformableBodyMaterialCfg
SpawnFn->>deformableUtils: create_auto_surface/volume_deformable_hierarchy(prim_path)
deformableUtils-->>USD: add OmniPhysicsDeformableBodyAPI + sim_mesh/tetmesh
SpawnFn->>Schemas: modify_deformable_body_properties(prim_path, cfg)
Schemas-->>USD: set omniphysics:*, physxDeformableBody:*, physxCollision:* attrs
SpawnFn->>MatSpawn: spawn_deformable_body_material(material_path, cfg)
MatSpawn-->>USD: apply PhysxDeformableMaterialAPI (+ PhysxSurfaceDeformableMaterialAPI if surface)
SpawnFn-->>USD: bind_physics_material(prim_path, material_path)
Note over InitImpl: sim.reset() triggers initialization
InitImpl->>USD: find prim with OmniPhysicsDeformableBodyAPI
InitImpl->>USD: get bound material → check PhysxSurfaceDeformableMaterialAPI
alt surface deformable
InitImpl->>PhysX: create_surface_deformable_body_view(expr)
else volume deformable
InitImpl->>PhysX: create_volume_deformable_body_view(expr)
InitImpl->>InitImpl: allocate nodal_kinematic_target buffer
end
InitImpl->>PhysX: create_deformable_material_view(material_expr)
Last reviewed commit: a270443 |
|
@greptile |
5753430 to
fcc5678
Compare
|
@greptile |
4 similar comments
|
@greptile |
|
@greptile |
|
@greptile |
|
@greptile |
…eg, change timestepping
… Schemata updated for DeformableBody and DeformableMaterial, but only for volume deformable. Surface deformable WIP.
# 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. --> The ISAACSIM_VERSION was mispelled as ISAACSSIM_VERISON. Leading to failure in docker workflow and build process . Correction in variable in .env.base 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) ## 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` - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there <!-- As you go through the checklist above, you can mark something as done by putting an x character in it For example, - [x] I have done this task - [ ] I have not done this task --> --------- Signed-off-by: Kelly Guo <kellyg@nvidia.com> Signed-off-by: Dhyan Umeshkumar Thakkar <thakk100@umn.edu> Co-authored-by: Kelly Guo <kellyg@nvidia.com> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Adds the Isaac Lab release version (from the root `VERSION` file) to the benchmark output files. The `VersionInfoRecorder` currently collects package versions via `importlib.metadata` (pip) and module `__version__` attributes. These reflect what is *installed* in the current environment, but do not capture the **release version** of Isaac Lab itself (e.g. `3.0.0` from the root `VERSION` file). This makes it hard to correlate benchmark results with specific releases, especially when the installed pip version does not match the source tree (e.g. editable installs during development). - `source/isaaclab/isaaclab/test/benchmark/recorders/record_version_info.py`: - Added reading of the top-level `VERSION` file → recorded as `isaaclab_release` Before (existing fields preserved): ``` isaaclab: 4.5.25 isaaclab_tasks: 1.5.15 ``` After (new field added): ``` isaaclab_release: 3.0.0 # ← from VERSION file ``` Verified the recorder produces correct output with the expected field populated. No existing fields are modified — this is purely additive. --------- Signed-off-by: Kelly Guo <kellyg@nvidia.com> Co-authored-by: Kelly Guo <kellyguo11@users.noreply.github.com> Co-authored-by: Antoine RICHARD <antoiner@nvidia.com>
…-sim#5207) The test file added in isaac-sim#5011 was broken at collection time: it used importlib to load a nonexistent sibling file, referenced obsolete config field names, and used patch() targets that cannot resolve when the video_recording subpackages are not installed. - Replace importlib file loader with normal package import - Rename config fields to match VideoRecorderCfg (env_render_mode, camera_position, camera_target, window_width, window_height) - Use patch.dict(sys.modules) instead of patch() for optional dep ## 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
…m#5212) Mirrors the documentation changes from isaac-sim#5195 onto `develop`. ## Description Adds NCCL troubleshooting notes to the multi-GPU docs and links them from the general troubleshooting page. Refs isaac-sim#4011 Refs isaac-sim#2756 ## Type of change - Documentation update Signed-off-by: bxwang <bixiong.wang@x-humanoid.com> Signed-off-by: bixiong wang <wangbx02@126.com> Co-authored-by: bxwang <bixiong.wang@x-humanoid.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Antoine RICHARD <antoiner@nvidia.com>
## Description Sphinx 9.0 changed `Config.read()` to use keyword-only parameters (`overrides` and `tags`), breaking `sphinx-multiversion==0.2.4` which passes arguments positionally. This causes the multi-version docs CI build to fail with: ``` TypeError: Config.read() takes 2 positional arguments but 3 were given ``` The `develop` branch has `sphinx>=7.0` with no upper bound, so CI (Python 3.12) resolves to Sphinx 9.1.0 which introduced the breaking API change. ## Fix Pin `sphinx>=7.0,<9` in `docs/requirements.txt` to keep Sphinx on the 8.x line until `sphinx-multiversion` is updated or replaced with a maintained fork. ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) Co-authored-by: Kelly Guo <kellyguo11@users.noreply.github.com> Co-authored-by: Antoine RICHARD <antoiner@nvidia.com>
…isaac-sim#5161) # Description Add visualization toggles for collision meshes, inertia boxes, and visual geometries to the Newton viewer. - Add `show_collision` config option and UI checkbox to visualize collision meshes at runtime - Add `show_inertia_boxes` config option and UI checkbox to visualize body inertia boxes at runtime - Add `show_visual` config option and UI checkbox to toggle visual geometry rendering at runtime All options wire through `NewtonVisualizerCfg` to the underlying Newton `ViewerGL` attributes. ## Type of change - New feature (non-breaking change which adds functionality) ## 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` - [ ] 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 --------- Signed-off-by: vidurv-nvidia <vidurv@nvidia.com> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> Co-authored-by: isaaclab-review-bot[bot] <270793704+isaaclab-review-bot[bot]@users.noreply.github.com>
Signed-off-by: Mike Yan Michelis <46975745+mmichelis@users.noreply.github.com>
AntoineRichard
left a comment
There was a problem hiding this comment.
LGTM thanks Mike!
There was a problem hiding this comment.
🤖 Isaac Lab Review Bot — Follow-up Review
Reviewing incremental changes (1dcbc13..234eb2d). Previous critical findings on missing setup.py packages and unconditional isaaclab_physx imports have been partially addressed (the sim subpackages are now listed, and wrappers_cfg.py has a try/except guard). However, the same packaging bug recurs with the new video_recording modules.
🔴 Critical: Missing video_recording packages in setup.py
New modules isaaclab_physx/video_recording/ and isaaclab_newton/video_recording/ are added with __init__.py files, but neither package is listed in their respective setup.py packages lists.
source/isaaclab_physx/setup.py needs:
"isaaclab_physx.video_recording",source/isaaclab_newton/setup.py needs:
"isaaclab_newton.video_recording",Without these entries, from isaaclab_physx.video_recording.isaacsim_kit_perspective_video import ... and from isaaclab_newton.video_recording.newton_gl_perspective_video import ... will raise ModuleNotFoundError after pip install -e .. The VideoRecorder constructor imports these dynamically, so --video will fail at runtime.
🟡 Warnings
1. wrappers_cfg.py catches bare Exception instead of ImportError
The new try/except guard catches Exception, which will silently swallow unrelated errors (e.g. a syntax error in isaaclab_physx):
try:
from isaaclab_physx.sim.spawners.spawner_cfg import DeformableObjectSpawnerCfg
except Exception as e: # should be ImportError or ModuleNotFoundError2. Unused sim_time variable in scripts/demos/deformables.py
After the refactor to a while loop with modulo-based reset, sim_time is accumulated but never read — the reset now uses count % int(3.0 / sim_dt). Can be removed for clarity.
🟢 Improvements Noted
- Newton FK invalidation fix — Clean approach.
invalidate_fk()ensuresbody_qis fresh before collision detection after env resets. The regression test intest_body_q_consistent_after_root_writeis thorough. - VideoRecorder abstraction — Good separation of Kit vs Newton GL backends behind a common interface. The
_resolve_video_backendheuristic is reasonable. - Deformable mass_props validation — Raising
ValueErrorwhen users setMassPropertiesCfgon deformable bodies (pointing them toDeformableBodyPropertiesCfg(mass=<value>)) is a helpful guard. - Visual material binding fix in
meshes.py— Binding tomesh_prim_pathinstead ofgeom_prim_pathis correct for the USD hierarchy. - Benchmark startup profiler — Well-structured with whitelist mode, proper cProfile wrapping per phase, and fallback top-N.
- Summary backend dynamic phase rendering — Good extension to handle arbitrary benchmark phases.
- Previous finding #6 addressed — Demo reset condition is now reachable with the modulo-based approach.
Signed-off-by: Mike Yan Michelis <46975745+mmichelis@users.noreply.github.com>
Signed-off-by: Mike Yan Michelis <46975745+mmichelis@users.noreply.github.com>
There was a problem hiding this comment.
🤖 Isaac Lab Review Bot — Follow-up
New commits (7bd7ea1→570033f9): Major refactor adding PVA sensor (renamed from old IMU), new lightweight IMU sensor, Camera/TiledCamera unification, CameraData.info flattened to dict[str, Any], ensure_drives_exist schema flag, actuator gain randomization fix, and Python 3.12 / Isaac Sim 6.0 baseline.
🔴 Missing isaaclab_physx.sensors.pva in setup.py
source/isaaclab_physx/setup.py explicitly lists every subpackage but does not include the new isaaclab_physx.sensors.pva package. After pip install, from isaaclab_physx.sensors.pva import Pva will raise ModuleNotFoundError.
This is the same class of bug flagged in prior reviews (missing sim subpackages, missing video_recording packages). The video_recording packages from the prior review also remain unlisted.
Fix: Add to the packages list in source/isaaclab_physx/setup.py:
"isaaclab_physx.sensors.pva",…ss/density, and add square primitive spawner
Description
Update the deformable body implementation in the PhysX backend according to the new Omni Physics migration guide (v110.0). Main changes are:
isaaclabtoisaaclab_physx, since deformables are PhysX-specific.DeformableObjectto support both surface (cloth/triangle mesh) and volume (soft body/tetrahedral mesh) deformables via the new PhysXDeformableBodyViewAPI, replacing the deprecatedSoftBodyView.MeshSquareCfg/spawn_mesh_squarefor spawning 2D triangle mesh grids used as cloth.OmniPhysicsPropertiesCfg,PhysXDeformableBodyPropertiesCfg,PhysXCollisionPropertiesCfg) that route properties to the correct USD attribute prefixes (omniphysics:,physxDeformableBody:,physxCollision:).Fixes #4469 and addresses #2004.
Type of change
Migration guide
DeformableBodyPropertiesCfg→from isaaclab_physx.sim.schemas import DeformableBodyPropertiesCfgdefine_deformable_body_properties/modify_deformable_body_properties→from isaaclab_physx.sim.schemas import define_deformable_body_properties, modify_deformable_body_propertiesDeformableBodyMaterialCfg→from isaaclab_physx.sim.spawners.materials import DeformableBodyMaterialCfgDeformableObjectSpawnerCfg→from isaaclab_physx.sim.spawners.spawner_cfg import DeformableObjectSpawnerCfgDemos
./isaaclab.sh -p scripts/demos/deformables.py— verify mixed surface and volume deformables simulate correctly./isaaclab.sh -p scripts/tutorials/01_assets/run_deformable_object.py --visualizer kit— verify tutorial works for kinematically constrained volume deformables./isaaclab.sh -p -m pytest source/isaaclab_physx/test/assets/test_deformable_object.pyChecklist
pre-commitchecks with./isaaclab.sh --formatconfig/extension.tomlfileCONTRIBUTORS.mdor my name already exists there