Skip to content

Commit a9eb1ff

Browse files
[FEAT] Add OVPhysX support to Franka deformable lift tasks (#7077)
# Description Adds `ovphysx` physics presets to the Franka soft-body and cloth lift tasks, including their camera variants. The presets reuse the existing PhysX deformable schemas and materials, enable scene replication for OVPhysX, and leave the existing Isaac Sim PhysX and Newton presets unchanged. OVPhysX does not currently expose a runtime gravity setter, so its preset disables the variable-gravity event and gravity curriculum and trains at the configured fixed gravity. The Isaac Sim PhysX preset retains the existing gravity curriculum. Short RSL-RL smoke runs completed for 10 iterations with 16 environments and seed 42. To account for the gravity limitation, OVPhysX was compared with Isaac Sim PhysX using the same fixed gravity: | Task | OVPhysX mean reward | Isaac Sim PhysX mean reward | OVPhysX throughput | Isaac Sim PhysX throughput | |---|---:|---:|---:|---:| | Cloth lift | 3.90 | 4.08 | 259 steps/s | 324 steps/s | | Soft lift | 1.97 | 2.03 | 296 steps/s | 339 steps/s | All runs completed 3,840 steps without NaNs, out-of-bounds terminations, or joint-velocity-limit terminations. These short runs validate configuration and training stability, not converged training parity. No new external dependencies are required. ## Type of change - New feature (non-breaking change which adds functionality) ## Screenshots Not applicable. ## Validation - 10-iteration RSL-RL smoke runs for soft-body and cloth lift with OVPhysX and fixed-gravity Isaac Sim PhysX - Python syntax checks for the changed modules - `uv run python tools/changelog/cli.py check develop` - `uv run isaaclab -f` - `git diff --check` ## 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 `uv run isaaclab -f` - [x] Documentation changes are not required for this preset-only change - [x] My changes generate no new warnings - [ ] 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 - [x] My name already exists in `CONTRIBUTORS.md` --------- Co-authored-by: Kelly Guo <kellyg@nvidia.com>
1 parent 965c091 commit a9eb1ff

3 files changed

Lines changed: 43 additions & 5 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Added
2+
^^^^^
3+
4+
* Added OVPhysX presets for the Franka soft-body and cloth lift tasks, including their camera
5+
variants.

source/isaaclab_tasks/isaaclab_tasks/core/lift/config/franka_soft/franka_cloth_env_cfg.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
)
1717
from isaaclab_newton.sim.schemas import NewtonDeformableBodyPropertiesCfg
1818
from isaaclab_newton.sim.spawners.materials import NewtonSurfaceDeformableBodyMaterialCfg
19+
from isaaclab_ov.physics import OvPhysxCfg
1920
from isaaclab_physx.physics import PhysxCfg
2021
from isaaclab_physx.sim.schemas import PhysxCollisionCfg, PhysxDeformableBodyPropertiesCfg
2122
from isaaclab_physx.sim.spawners.materials import PhysxSurfaceDeformableBodyMaterialCfg
@@ -100,8 +101,9 @@ class PhysicsCfg(PresetCfg):
100101
)
101102

102103
isaacsim_physx: PhysxCfg = PhysxCfg(gpu_found_lost_pairs_capacity=2**22)
104+
ovphysx: OvPhysxCfg = OvPhysxCfg(gpu_found_lost_pairs_capacity=2**22)
103105

104-
physx: PhysxAutoCfg = PhysxAutoCfg(isaacsim_physx=isaacsim_physx)
106+
physx: PhysxAutoCfg = PhysxAutoCfg(isaacsim_physx=isaacsim_physx, ovphysx=ovphysx)
105107

106108
default = newton_mjwarp_vbd_proxy
107109

@@ -163,6 +165,7 @@ class DeformableCfg(PresetCfg):
163165
),
164166
)
165167
isaacsim_physx = physx
168+
ovphysx = physx
166169

167170
default = newton_mjwarp_vbd_proxy
168171

@@ -201,9 +204,10 @@ class FrankaClothScenePresetCfg(PresetCfg):
201204
num_envs=2048, env_spacing=2.0, replicate_physics=True
202205
)
203206

204-
# PhysX does not support replicating physics for deformable objects
207+
# Isaac Sim PhysX does not support replicating physics for deformable objects
205208
physx: FrankaClothSceneCfg = FrankaClothSceneCfg(num_envs=2048, env_spacing=2.0, replicate_physics=False)
206209
isaacsim_physx = physx
210+
ovphysx: FrankaClothSceneCfg = FrankaClothSceneCfg(num_envs=2048, env_spacing=2.0, replicate_physics=True)
207211

208212
default = newton_mjwarp_vbd_proxy
209213

@@ -224,6 +228,9 @@ class FrankaClothCameraScenePresetCfg(PresetCfg):
224228
)
225229
physx: FrankaClothCameraSceneCfg = FrankaClothCameraSceneCfg(num_envs=128, env_spacing=2.5, replicate_physics=False)
226230
isaacsim_physx = physx
231+
ovphysx: FrankaClothCameraSceneCfg = FrankaClothCameraSceneCfg(
232+
num_envs=128, env_spacing=2.5, replicate_physics=True
233+
)
227234
default = newton_mjwarp_vbd_proxy
228235

229236

source/isaaclab_tasks/isaaclab_tasks/core/lift/config/franka_soft/franka_soft_env_cfg.py

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
)
1717
from isaaclab_newton.sim.schemas import NewtonDeformableBodyPropertiesCfg
1818
from isaaclab_newton.sim.spawners.materials import NewtonDeformableBodyMaterialCfg
19+
from isaaclab_ov.physics import OvPhysxCfg
1920
from isaaclab_physx.physics import PhysxCfg
2021
from isaaclab_physx.sim.schemas import PhysxCollisionCfg, PhysxDeformableBodyPropertiesCfg
2122
from isaaclab_physx.sim.spawners.materials import PhysxDeformableBodyMaterialCfg
@@ -50,7 +51,7 @@
5051
CouplerProxyMappingCfg,
5152
)
5253

53-
from isaaclab_tasks.utils import PresetCfg
54+
from isaaclab_tasks.utils import PresetCfg, preset
5455
from isaaclab_tasks.utils.presets import MultiBackendRendererCfg
5556

5657
from ... import mdp
@@ -135,6 +136,7 @@ class DeformableCfg(PresetCfg):
135136
),
136137
)
137138
isaacsim_physx = physx
139+
ovphysx = physx
138140

139141
default = newton_mjwarp_vbd_proxy
140142

@@ -185,8 +187,9 @@ class PhysicsCfg(PresetCfg):
185187
)
186188

187189
isaacsim_physx: PhysxCfg = PhysxCfg()
190+
ovphysx: OvPhysxCfg = OvPhysxCfg()
188191

189-
physx: PhysxAutoCfg = PhysxAutoCfg(isaacsim_physx=isaacsim_physx)
192+
physx: PhysxAutoCfg = PhysxAutoCfg(isaacsim_physx=isaacsim_physx, ovphysx=ovphysx)
190193

191194
default = newton_mjwarp_vbd_proxy
192195

@@ -609,9 +612,10 @@ class FrankaSoftSceneCfg(PresetCfg):
609612
num_envs=2048, env_spacing=2.0, replicate_physics=True
610613
)
611614

612-
# PhysX does not support replicating physics for deformable objects
615+
# Isaac Sim PhysX does not support replicating physics for deformable objects
613616
physx: _FrankaSoftSceneCfg = _FrankaSoftSceneCfg(num_envs=2048, env_spacing=2.0, replicate_physics=False)
614617
isaacsim_physx = physx
618+
ovphysx: _FrankaSoftSceneCfg = _FrankaSoftSceneCfg(num_envs=2048, env_spacing=2.0, replicate_physics=True)
615619

616620
default = newton_mjwarp_vbd_proxy
617621

@@ -625,6 +629,9 @@ class FrankaSoftCameraSceneCfg(PresetCfg):
625629
)
626630
physx: _FrankaSoftCameraSceneCfg = _FrankaSoftCameraSceneCfg(num_envs=128, env_spacing=2.0, replicate_physics=False)
627631
isaacsim_physx = physx
632+
ovphysx: _FrankaSoftCameraSceneCfg = _FrankaSoftCameraSceneCfg(
633+
num_envs=128, env_spacing=2.0, replicate_physics=True
634+
)
628635
default = newton_mjwarp_vbd_proxy
629636

630637

@@ -660,6 +667,25 @@ def __post_init__(self) -> None:
660667
self.sim.render_interval = self.decimation
661668
self.sim.physics = PhysicsCfg()
662669

670+
# OVPhysX does not expose a runtime gravity setter.
671+
default_events = self.events
672+
self.events = preset(
673+
default=default_events,
674+
physx=default_events,
675+
isaacsim_physx=default_events,
676+
newton_mjwarp_vbd_proxy=default_events,
677+
ovphysx=default_events.replace(variable_gravity=None),
678+
)
679+
if self.curriculum is not None:
680+
default_curriculum = self.curriculum
681+
self.curriculum = preset(
682+
default=default_curriculum,
683+
physx=default_curriculum,
684+
isaacsim_physx=default_curriculum,
685+
newton_mjwarp_vbd_proxy=default_curriculum,
686+
ovphysx=default_curriculum.replace(gravity=None),
687+
)
688+
663689
self.viewer.eye = (0.75, 0.25, 0.65)
664690
self.viewer.lookat = (0.0, 0.75, 0.4)
665691
self.sim.default_visualizer_cfg = _FrankaSoftVisualizerCfg(

0 commit comments

Comments
 (0)