Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
8f4d34c
Add core deformable object infrastructure (base classes, materials, s…
xiangdonglai Apr 22, 2026
c200d0a
Add Newton manager hooks for experimental deformable support
xiangdonglai Apr 22, 2026
614c273
Add experimental Newton deformable module with solver factories and p…
xiangdonglai Apr 22, 2026
3b99985
Add experimental deformable object tests
xiangdonglai Apr 22, 2026
a81c9e2
Add experimental pick_cloth and pick_vbd_cube tasks
xiangdonglai Apr 22, 2026
151d209
Add physx/newton backend support to deformable object tutorial
xiangdonglai Apr 22, 2026
0fce03c
Add deformable ignore paths and rebuild_bvh to Newton manager
xiangdonglai Apr 22, 2026
bc4ed99
Handle deformable-only scenes and add Fabric particle sync setup
xiangdonglai Apr 22, 2026
c93ffe1
Fix deformable module initialization and surface cloth spawning
xiangdonglai Apr 23, 2026
f4a75f6
Use explicit register_hooks() in task and tutorial modules
xiangdonglai Apr 23, 2026
45dd736
Move deformable module from isaaclab_experimental to isaaclab_contrib
xiangdonglai Apr 23, 2026
7db7e31
Move pick_cloth and pick_vbd_cube tasks to isaaclab_tasks
xiangdonglai Apr 23, 2026
e995a76
Clean up deformable tutorial: reinstate dt, fix comment, remove stale…
xiangdonglai Apr 23, 2026
482cad3
Remove unused tet-mesh and mesh-from-file spawners
xiangdonglai Apr 24, 2026
cbf5363
Remove Newton deformable re-export stub
xiangdonglai Apr 24, 2026
d2614a4
Move Fabric particle sync setup from newton_manager to contrib
xiangdonglai Apr 24, 2026
9596a2d
Port vis mesh overwrite and per-body particle count from PR #4
xiangdonglai Apr 24, 2026
28f4b25
Address PR review feedback: vectorize kinematic target writes, improv…
xiangdonglai Apr 24, 2026
71b618f
Merge remote-tracking branch 'origin/develop' into donglaix/deformabl…
xiangdonglai Apr 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 21 additions & 13 deletions scripts/tutorials/01_assets/run_deformable_object.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

# add argparse arguments
parser = argparse.ArgumentParser(description="Tutorial on interacting with a deformable object.")
parser.add_argument("--backend", type=str, default="physx", choices=["physx", "newton"], help="Physics backend.")
# append AppLauncher cli args
AppLauncher.add_app_launcher_args(parser)
# demos should open Kit visualizer by default
Expand All @@ -37,14 +38,10 @@

import torch
import warp as wp
from isaaclab_physx.assets import DeformableObject, DeformableObjectCfg

# deformables supported in PhysX
from isaaclab_physx.sim import DeformableBodyMaterialCfg, DeformableBodyPropertiesCfg

import isaaclab.sim as sim_utils
import isaaclab.utils.math as math_utils
from isaaclab.sim import SimulationContext
from isaaclab.assets import DeformableObject, DeformableObjectCfg


def design_scene():
Expand All @@ -59,20 +56,22 @@ def design_scene():
# Create a dictionary for the scene entities
scene_entities = {}

# Create separate groups called "Origin0", "Origin1", ...
# Each group will have a robot in it
# Create separate groups called "env_0", "env_1", ...
# Newton's scene loader requires the "env_\d+" naming convention to
# detect per-environment Xforms and replicate them as separate worlds.
origins = [[0.25, 0.25, 0.0], [-0.25, 0.25, 0.0], [0.25, -0.25, 0.0], [-0.25, -0.25, 0.0]]
for i, origin in enumerate(origins):
sim_utils.create_prim(f"/World/Origin{i}", "Xform", translation=origin)
sim_utils.create_prim(f"/World/env_{i}", "Xform", translation=origin)

# 3D Deformable Object
cfg = DeformableObjectCfg(
prim_path="/World/Origin.*/Cube",
prim_path="/World/env_.*/Cube",
spawn=sim_utils.MeshCuboidCfg(
size=(0.2, 0.2, 0.2),
deformable_props=DeformableBodyPropertiesCfg(),
deformable_props=sim_utils.DeformableBodyPropertiesCfg(rest_offset=0.0, contact_offset=0.001),
visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.5, 0.1, 0.0)),
physics_material=DeformableBodyMaterialCfg(poissons_ratio=0.4, youngs_modulus=1e5),
physics_material=sim_utils.DeformableBodyMaterialCfg(poissons_ratio=0.4, youngs_modulus=1e5, density=500.0),
# physics_material=sim_utils.SurfaceDeformableBodyMaterialCfg(poissons_ratio=0.4, youngs_modulus=1e4, surface_thickness=0.001, surface_bend_stiffness=1e0, surface_shear_stiffness=1e0, surface_stretch_stiffness=1e0),
),
init_state=DeformableObjectCfg.InitialStateCfg(pos=(0.0, 0.0, 1.0)),
debug_vis=True,
Expand Down Expand Up @@ -158,8 +157,17 @@ def run_simulator(sim: sim_utils.SimulationContext, entities: dict, origins: tor
def main():
"""Main function."""
# Load kit helper
sim_cfg = sim_utils.SimulationCfg(dt=0.01, device=args_cli.device)
sim = SimulationContext(sim_cfg)
if args_cli.backend == "newton":
from isaaclab_contrib.deformable import register_hooks as _register_deformable_hooks
_register_deformable_hooks()
from isaaclab_contrib.deformable.newton_manager_cfg import VBDSolverCfg
from isaaclab_newton.physics import NewtonCfg
physics_cfg = NewtonCfg(solver_cfg=VBDSolverCfg(iterations=10), num_substeps=4)
else:
from isaaclab_physx.physics import PhysxCfg
physics_cfg = PhysxCfg()
sim_cfg = sim_utils.SimulationCfg(dt=0.01, device=args_cli.device, physics=physics_cfg)
sim = sim_utils.SimulationContext(sim_cfg)
# Set main camera
sim.set_camera_view(eye=[2.0, 2.0, 2.0], target=[0.0, 0.0, 0.75])
# Design scene
Expand Down
12 changes: 12 additions & 0 deletions source/isaaclab/isaaclab/assets/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ __all__ = [
"RigidObjectCollection",
"RigidObjectCollectionCfg",
"RigidObjectCollectionData",
"BaseDeformableObject",
"BaseDeformableObjectData",
"DeformableObject",
"DeformableObjectCfg",
"DeformableObjectData",
]

from .articulation import (
Expand All @@ -46,3 +51,10 @@ from .rigid_object_collection import (
RigidObjectCollectionCfg,
RigidObjectCollectionData,
)
from .deformable_object import (
BaseDeformableObject,
BaseDeformableObjectData,
DeformableObject,
DeformableObjectCfg,
DeformableObjectData,
)
10 changes: 10 additions & 0 deletions source/isaaclab/isaaclab/assets/deformable_object/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause

"""Sub-module for deformable object assets."""

from isaaclab.utils.module import lazy_export

lazy_export()
18 changes: 18 additions & 0 deletions source/isaaclab/isaaclab/assets/deformable_object/__init__.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause

from .base_deformable_object import BaseDeformableObject
from .base_deformable_object_data import BaseDeformableObjectData
from .deformable_object import DeformableObject
from .deformable_object_cfg import DeformableObjectCfg
from .deformable_object_data import DeformableObjectData

__all__ = [
"BaseDeformableObject",
"BaseDeformableObjectData",
"DeformableObject",
"DeformableObjectCfg",
"DeformableObjectData",
]
Loading