Dear Isaac Sim team,
I am using isaac sim 4.5.0
I’m prototyping a physically-based plant model whose main stem and side branches are built from dozens of small capsule links. Each pair of capsules is connected through an articulation spherical joint whose swing and twist dof are currently driven by a position Drive:
python
for axis in ("transX", "transY", "transZ", "rotX"):
limit_api = UsdPhysics.LimitAPI.Apply(prim, axis)
limit_api.CreateLowAttr(0.0)
limit_api.CreateHighAttr(0.0)
low, high = rot_limit
for axis in ("rotY", "rotZ"):
limit_api = UsdPhysics.LimitAPI.Apply(prim, axis)
limit_api.CreateLowAttr(low)
limit_api.CreateHighAttr(high)
drive_api = UsdPhysics.DriveAPI.Apply(prim, axis)
drive_api.CreateTypeAttr("force")
drive_api.CreateDampingAttr(damping)
drive_api.CreateStiffnessAttr(stiffness)
My goal is to emulate a variable bending stiffness along the rod (root ≈ woody ⇒ stiff, tip ≈ herbaceous ⇒ soft).
Problem
As soon as the robot arm collides with the plant, the chain often explodes and coils into a tight ball. Reducing stiffness helps, but then the rod behaves far too soft. Self-collision between adjacent capsules has been completely disabled via excludeSelfCollisions=“true” on the articulation, so the instability seems unrelated to internal contacts. I suspect the issue is that a Drive applies a large explicit PD force; when this competes with the rigid contact impulses, the solver diverges.
Questions
- The Articulation Stability Guide mentions naturalFrequency / dampingRatio and jointCompliance as soft-constraint alternatives to a PD Drive docs.omniverse.nvidia.com. Can I rely solely on
jointCompliance
(or on natural-frequency based spring drives) to realise elasticity, without an active PD controller? If so, what parameter ranges are considered safe for 60 Hz global timesteps? - The PhysX docs say compliance is handled as a soft constraint inside the solver docs.nvidia.comnvidia-omniverse.github.io. Does this mean it will coexist with contact constraints more robustly than a high-gain Drive?
- Would replacing each spherical Drive with a
PxDistanceJoint
+ spring flag be preferable? The joint manual describes distance-joint springs but I’m unsure how well they behave in branched structures docs.nvidia.com. - I looked at Cable / flexcomp and FEM deformables, but they seem unsuitable because
- flexcomp handles only linear (non-branching) topologies , and
- a full FEM tet mesh for an entire bush is too heavy docs.omniverse.nvidia.com.
Are there recommended workflows for branched, variable-stiffness rods that avoid Drive PD?
- Finally, are there best-practice solver settings (e.g.,
solverPositionIterationCount
≥ 32 as hinted in the stability guide docs.omniverse.nvidia.com) that you would recommend specifically for this use-case?
Any code snippet or USD attribute list that demonstrates per-joint compliance grading along an articulation would be greatly appreciated.
Many thanks for your guidance!