🔗 Rigid Collision Resolution#
Genesis follows a quadratic penalty formulation very similar to that used by MuJoCo for enforcing rigid–body constraints. This document summarises the mathematics and physical interpretation of the model.
1. General formulation#
Let
\(q\) – joint configuration (generalised positions)
\dot q – generalised velocities
\(a = \ddot q\) – the unknown generalised accelerations to be solved for each sub-step
\(M(q)\) – joint-space mass matrix (positive definite)
\(\tau_{ext}\) – all external joint forces already known (actuation, gravity, hydrodynamics …)
\(J \) – a stack of kinematic constraints linearised in acceleration space
\(D\) – diagonal matrix of softness / impedance parameters per constraint
\(a_{ref}\) – reference accelerations that try to restore penetrations or satisfy motors
We seek the acceleration that minimises the quadratic cost
2. Contact & friction model#
For every contact pair Genesis creates four constraints, which are the basis of the friction pyramid. Mathematically each direction tᵢ is
so that a positive multiplier on tᵢ produces a force that lies inside the cone \(|\mathbf f_t| \le \mu f_n\). A diagonal entry Dᵢ proportional to the combined inverse mass gives the familiar soft-constraint behaviour where larger imp (implicitness) values lead to stiffer contacts.
3. Joint limits (inequality constraints)#
Revolute and prismatic joints optionally carry a lower and upper position limit. Whenever the signed distance to a limit becomes negative
a single 1-DOF constraint is spawned with Jacobian
and reference acceleration
obtained from the scalar sol_params (spring-damper style softness). The diagonal entry of D once again scales with the inverse joint inertia.
4. Equality constraints#
Genesis supports three kinds of holonomic equalities:
Type |
DOF removed |
Description |
|---|---|---|
Connect |
3 |
Enforces that two points on different bodies share the same world position. Good for ball-and-socket joints. |
Weld |
6 |
Keeps two frames coincident in both translation and rotation (optionally scaled torque). |
Polynomial joint |
1 |
Constrains one joint as a polynomial function of another (useful for complex mechanisms). |
Each equality writes rows into J so that their relative translational / rotational velocity vanishes. Softness and Baumgarte stabilisation again come from per-constraint sol_params.
5. Solvers#
The solver class implements two interchangeable algorithms:
5.1 Projected Conjugate Gradient (PCG)#
Operates in the reduced space of accelerations.
Uses the mass matrix as pre-conditioner.
After each CG step a back-tracking line search (Armijo style) projects the new J a onto the feasible set (normal ≥0, friction cone).
Requires only matrix-vector products, making it memory-friendly and fast for scenes with many constraints.
5.2 Newton–Cholesky#
Builds the exact Hessian (H = M + J^T D J).
A Cholesky factorisation (with incremental rank-1 updates) yields search directions.
Converges in very few steps (often 2-3) but is more expensive for large DOF counts.
Both variants share identical line-search logic implemented in _func_linesearch that chooses the step length (\alpha) minimising the quadratic model whilst respecting inequality activation/de-activation. The algorithm stops when either
the gradient norm (|\nabla f|) drops below
tolerance · mean_inertia · n_dofs, orthe improvement of the cost function falls below the same threshold.
Warm-starting is supported by initialising from the previous sub-step’s smoothed accelerations acc_smooth.
6. Practical implications#
Stability – because constraints are implicit in acceleration space the model handles larger time-steps, similar to MuJoCo.
Friction anisotropy – replacing the cone by a pyramid introduces slight anisotropy. Increasing the number of directions would reduce this but cost more.
Softness – tuning
impandtimeconstlets you trade constraint stiffness against numerical conditioning. Values near 1 are stiff but may slow convergence.Choosing a solver – use CG for scenes with thousands of DOFs or when memory is tight; switch to Newton when you need very high accuracy or when the DOF count is moderate (<100).