how can I attach soft bodies to an articulation?
My goal is basically to put soft bodies at the grippers to make “soft grippers”.
I tried to use the attachments between soft and rigid bodies, but it does not seem to work.
In the attached zip file are a short video of the attachment not working and the corresponding usd file (here I just attached soft bodies to the robot for demonstration purposes). franka_with_soft.zip (439.7 KB)
Are you adding soft materials to the finger because you need accurate simulation of the fingerpad? or is this to create a more stable grasp? If it’s the latter, I suggest you first try to add a physics material to the mesh of the fingerpad (still a rigid body), but make the contact compliant (under property tab: Physics->Rigid Body Material->Advanced). and potentially also make the object you are grasping have “compliant” contact material as well.
If you definitely want a soft part, then checkout physX’s deformable demos (Window->Simulation->Demo Scenes, find the deformable menu-> deformable body attachments). You can “load scene” to see how it looks on the stage, and then “open source” to see how it’s done via a script. Just keep in mind that having a deformable body in the scene will affect the frame rate of your simulation.
Hi, I am currently attempting to attach a deformable mesh to a link on a Franka Robot, using the physX’s deformable demos as a reference. However, I have encountered an issue where it seems the deformable body cannot be successfully attached to any link within an articulation like an articulated object (imported from URDF).
can you elaborate on how you are attaching the mesh? Is it via a joint between soft and rigid body, or simply putting one mesh as a child of the rigid link? or attaching the mesh to a rigid body link via a PhysxPhysicsAttachment API, and the rigid link is part of an articulation?
also, can you describe any error messages you see or how does the system behave when it fails?
Are you adding soft materials to the finger because you need accurate simulation of the fingerpad?
Yes, I wanted more accurate simulation of the fingerpad.
checkout physX’s deformable demos
I already did that. When I tried to use it with a franka it didn’t work.
At least it used to be like that, now I got it working (I think).
I had to create the attachment by selecting the soft body and the mesh with the collision property (not the Xform with the rigid body property).
E.g. not the “panda_hand” xForm, but “mesh_0” under “collisions” of the “panda_hand” xForm.
I also encountered issues where the whole programm crashed when trying to use the soft body attachment stuff this way. But this was resolved by using the “Isaac Sim 2023.1.0-hotfix” version instead of the “Isaac Sim 2023.1.0” release.
As a side note, there is something weird I observed:
It’s not possible to turn a mesh into a soft body, when its the child of a xForm, which has the articulation root property. But it’s possible to have a child of an “articulation root xForm” to be a soft body by creating a mesh and giving it the deformable body property when its not a child, then moving the mesh under the articulation xForm.
And two questions regarding the “compliant contact”:
I also tried that out, but it seemed like the tangential forces were pretty weird. I.e. when moving to the side, the object would move only occasionally and the movement wasn’t smooth.
In the physx docs its mentioned that the normal forces are being computed with an implicit spring https://nvidia-omniverse.github.io/PhysX/physx/5.3.0/docs/RigidBodyDynamics.html#compliant-contacts.
How are the tangential forces computed?
The objects would also often get “stuck”.
How can I avoid that? (i.e. which parameter should I tune, the compliant contact stiffness or the damping or both?)
Currently, attachments do not support instanced colliders or shared shapes. The scene uses instanced objects which is why the attachments do not work. Ideally, there should be a warning so that users are notified of this limitation. I have added a ticket to implement this warning for future releases.
Ahhh oke I see.
So the attachments should work fine if I just turn of the “instanceable” flag off for the meshes to which the soft bodies should be attached?
Regarding this:
While the the simulation doesn’t crash and attachement seems to work, I realised (after using the franka I also used at the beginning of this post) that you get the error message:
2023-12-10 15:49:08 [100,092ms] [Error] [omni.usd] Runtime Error: in _SetValueImpl at line 6214 of /buildAgent/work/ac88d7d902b57417/USD/pxr/usd/usd/stage.cpp -- Cannot set attribute value. Failed to create attribute spec </World/factory_franka_instanceable/panda_hand/collisions/mesh_0.purpose> in layer @anon:0x7efbd8008670@
2023-12-10 15:49:08 [100,092ms] [Warning] [omni.usd] Coding Error: in _ValidateEditPrim at line 1330 of /buildAgent/work/ac88d7d902b57417/USD/pxr/usd/usd/stage.cpp -- Cannot create property spec at path </World/factory_franka_instanceable_01/panda_hand/collisions/mesh_0>; authoring to an instance proxy is not allowed.
This is basically due to the issue with the instanced colliders/ shared shapes you mentioned, right?
I did a more in-depth investigation into the issue. In theory, you should be able to attach to “panda_hand” which is set as a rigid body. However, beneath the hood, it is created as an articulation link and this support has not been implemented yet. I have added a ticket to implement this support for the next release. For now, what you can do is to attach to a non instanced collider (mesh_0) instead of the articulation link (panda_hand)