PBD deformable cloth manipulation

Hi,

I’m currently working on a simulation in Isaac Sim 4.1.0 in Windows Server 2022 where a Franka Emika robot needs to perform a pick-and-place task with a piece of fabric (plane). However, the robot is unable to grasp the fabric properly.

I would appreciate any help on how to fix this issue. I can provide a video of my current simulation for reference.

I don’t use any code, just action graph (pick & place controller) from IsaacSim 4.1 similar than this tutorial https://docs.omniverse.nvidia.com/isaacsim/latest/advanced_tutorials/tutorial_advanced_omnigraph_pickplace_controller.html


simulation.zip (18.7 KB)

Hi Isabella, Thank you for your question and welcome to the developers community! I will look into this shortly. Have you tried to grasp the cloth from its edge? It seems to be from the video that it is having trouble pinching the cloth.

Yes, I have tried grasping the cloth from its edge, but unfortunately, it has not been successful. I have attached a folder named simulation.zip to the post, where you can see what I have done so far.

Hi @isabella.herrarte,

Sorry for the delay. Technically you should be able to grasp the cloth. I am trying to reproduce the task but it will take me a bit of time. In the meantime, have you tried:

  1. Setting gravity to 0 so it is a bit easier to grasp the cloth?
my_world = World(stage_units_in_meters=1.0, backend="torch", device="cuda")
my_world.get_physics_context().set_gravity(0)
  1. Increasing friction in the ParticleMaterial?
# Create cloth mesh (10x10 grid)
tri_points, tri_indices = deformableUtils.create_triangle_mesh_square(dimx=10, dimy=10, scale=1.0)
# tri_points, tri_indices = deformableMeshUtils.createTriangleMeshCube(dim=10)

init_loc = Gf.Vec3f(0.0, 0.0, 0.5)
physicsUtils.set_or_add_translate_op(cloth_mesh, init_loc)
# physicsUtils.set_or_add_orient_op(cloth_mesh, Gf.Rotation(Gf.Vec3d([1, 0, 0]), 15 * i).GetQuat())

# Set mesh attributes
cloth_mesh.GetPointsAttr().Set(tri_points)
cloth_mesh.GetFaceVertexIndicesAttr().Set(tri_indices)
cloth_mesh.GetFaceVertexCountsAttr().Set([3] * (len(tri_indices) // 3))

# Create particle material and system
particle_material = ParticleMaterial(
    prim_path=cloth_path + "/particleMaterial",
    drag=0.3,
    lift=0.3,
    friction=0.8
)

radius = 0.5 * (0.6 / 5.0)
restOffset = radius
contactOffset = restOffset * 1.5

particle_system = SingleParticleSystem(
    prim_path=cloth_path + "/particleSystem",
    simulation_owner=my_world.get_physics_context().prim_path,
    rest_offset=restOffset,
    contact_offset=contactOffset,
    solid_rest_offset=restOffset,
    fluid_rest_offset=restOffset,
    particle_contact_offset=contactOffset
)

# Create deformable prim
cloth = SingleClothPrim(
    name="cloth",
    prim_path=mesh_path,
    particle_system=particle_system,
    particle_material=particle_material
)
  1. Decreasing the time-step size of the simulator?
# Set simulation timesteps - 120Hz physics
simulation_app.context.set_simulation_dt(physics_dt=1.0/120.0)