The step pipeline
A step has two halves. The first runs once per articulation and is classical , with a factor of the mass matrix. The second runs once per world and turns contacts, limits, drives, mimic couplings and loop closures into rows of a velocity-level projected Gauss-Seidel (PGS) solve. Positions then follow from the solved velocities by symplectic Euler.
With joint-space inertia , bias forces , applied generalized force and step , the unconstrained velocity is
where the extra diagonal folds the default implicit drives into the mass matrix and is the drive force at the start of the step, clamped to the effort limit. Constraint impulses act through row Jacobians , so . With the rows’ physical velocity and their bias (position correction, speculative gaps and bounce targets), normal rows satisfy the condition and friction rows stay in the Coulomb disk .
The bias forces and the passive joint springs and damping in are taken at the start of the step, so they are explicit, as in SolverFeatherstone. That sets two limits on :
- Passive joint damping is stable only while . Light links make large: for a six-link chain of 2 cm capsules it is about , so at 240 Hz damping above about 0.012 N·m·s/rad diverges. Drive gains do not have this limit, because they are folded into . A change that folds passive damping into the same way is in review in skild-ai/newton#18.
- Velocity-product forces of fast, light chains add energy at a rate that is first order in ; Featherstone and MuJoCo’s
eulerintegrator behave the same. Iterations do not help, since no rows are involved. A smaller reduces the gain; armature large against the links’ inertia also does, but it changes the model. skild-ai/newton#19 documents this in the solver. Tutorial: Armature · Joint springs and damping
Steel docs and tutorials are licensed under Apache-2.0. Third-party notices. "Skild", "Skild AI" and the Skild logo are trademarks of Skild AI and are not licensed under Apache-2.0.