Hi, The behavior you’re describing — both ends anchored, a moving carriage, and a flexible belt that rolls through a bend as the carriage travels — is mechanically a cable carrier / energy chain (drag chain). The irregular deformation, non-uniform segments, and bends that won’t straighten are most likely the belt is being simulated with the wrong method for the result you want. Let me break the options down, because the right choice depends on whether you need physical compliance or deterministic, repeatable motion.
1. Recommended approach
There are three ways to do this in Isaac Sim, in increasing order of physical fidelity and instability:
| Method |
What it is |
When to use |
Stability |
| Kinematic spline-driven mesh |
Belt is a skinned/deformable mesh whose shape is driven procedurally along a path curve — no physics solver. |
Visual-only, deterministic, you just need it to look right and follow the orange path exactly. |
Rock solid, fully repeatable |
| Rigid-link chain + revolute joints (drag chain) |
Belt = N rigid segments connected by revolute joints with bend limits. How real energy chains are modeled. |
You want physical interaction (collision, draping, contact with the carriage) but predictable motion. |
Stable if tuned |
| Deformable / cloth (Newton XPBD or VBD) |
True soft-body belt. |
You genuinely need material compliance, stretch, twist. |
Hardest to stabilize — most likely what you’re fighting now |
For a fixed-path belt that should move uniformly and straighten naturally, I’d strongly recommend the rigid-link chain (option 2), not a deformable.
Your three symptoms are typical deformable-simulation problems, and a segmented chain eliminates all of them by construction:
“Segments don’t follow the path uniformly” → with rigid links of equal length and equal mass, the chain can’t stretch or bunch.
“Bent portions don’t straighten naturally” → add a light angular drive at each joint (below) and the chain has a real restoring torque toward straight.
“Irregular deformation in sections” → gone, because the geometry is rigid; only the joint angles change.
2. Best practices for stable, natural deformation
If you go with the rigid-link chain:
Build it as an articulation: N rigid-body segments, each connected to the next by a UsdPhysics.RevoluteJoint. Both RigidBodyAPI and CollisionAPI must be on the same prim per segment.
Set joint limits to define the bend radius. A drag chain bends one way and is stiff the other — set asymmetric limits (e.g. 0° to +30° per joint) so the belt forms a clean U-bend and physically cannot kink backward. This single change usually fixes most irregular deformation.
Add a light restoring drive so straight sections straighten naturally. On each revolute joint:
drive = UsdPhysics.DriveAPI.Apply(joint_prim, "angular")
drive.CreateTypeAttr().Set("force")
drive.CreateStiffnessAttr().Set(50.0) # low Kp -> gentle straightening
drive.CreateDampingAttr().Set(10.0) # Kd -> kills oscillation/jitter
drive.CreateTargetPositionAttr().Set(0.0) # 0 = straight
Low stiffness + moderate damping gives the “settles to straight without snapping” behavior you’re after.
Solver settings matter a lot for joint chains. For complex joint chains: physics rate 240 Hz (higher if the carriage moves fast), per-body solver iterations 64 position / 16 velocity, solver type TGS.
pxrb = PhysxSchema.PhysxRigidBodyAPI.Apply(segment_prim)
pxrb.CreateSolverPositionIterationCountAttr().Set(64)
pxrb.CreateSolverVelocityIterationCountAttr().Set(16)
Keep mass ratios sane. If the moving pipe/carriage is much heavier than a belt link, the solver struggles. Give each link a realistic, roughly equal mass, and avoid extreme mass ratios (>1000:1) between the carriage and a single link.
Anchor both ends with fixed joints (UsdPhysics.FixedJoint) — to ground and to the moving carriage respectively — and drive the carriage kinematically (KinematicEnabledAttr = True) along its linear path. Let the chain react to it rather than dynamically pushing it.
3. Length reconfiguration
Don’t hand-author the chain. Generate it procedurally from two parameters — link length and link count — in a short Python/OmniGraph script. Switching between long and short variants then becomes changing one number (num_links), and every joint/drive/limit is created identically, which also removes a common source of the non-uniformity you’re seeing (hand-built segments with slightly different params).
If you do need a true deformable belt (material stretch/compliance), use the Newton backend with the XPBD solver, which is the one designed for cables/ropes/soft-constraint chains in Isaac Sim 6.0 — not a generic FEM/cloth setup. But for “follow this path, move uniformly, straighten naturally,” the rigid-link chain will be far more stable and controllable.
References
There’s a built-in Conveyor asset/utility (isaacsim.asset.gen.conveyor) — note that’s for surface conveyors (belts that transport objects on top), a different mechanism from the routing/drag-chain belt you’re describing, so it likely won’t fit directly, but it’s worth a look for the conveyor-surface case.