Contact solvers
Collision detection supplies contact features with surface positions, normals, and signed gaps. These features are passed to the contact solver as contact constraints while it computes motion under applied forces, accounting for inertia, frictional contact, joint limits, and joint friction.
Formulation
CRISP provides two augmented-Lagrangian methods for the velocity-level multi-contact nonlinear complementarity problem. Both methods enforce the contact conditions without relaxation. Under unilateral normal contact and Coulomb friction, each contact may separate, stick, or slide.
For details on the contact solvers, see our TRO 2025 paper, Sections IV–VI and the CRISP paper.
CANAL
Cascaded Newton-based Augmented Lagrangian combines outer multiplier updates with inner Newton iterations over a convex surrogate problem. It targets accurate and robust resolution of dense contacts.
SubADMM
Subsystem-based Alternating Direction Method of Multipliers uses subsystem-based variable splitting to separate dynamics and constraint updates. Each iteration alternates velocity solves with local updates for frictional contact, joint limits, and joint friction.
SubADMM is a parallelizable algorithm, although CRISP does not currently exploit this parallelism. Our ICRA 2025 paper demonstrates how GPU parallelism enables large-scale interactive simulation.
Numerical settings
Set the solver on the builder before constructing the model:
builder->opt().sol.type = crisp::solver_e::canal;
builder->opt().canal.max_iter = 20;
Use crisp::solver_e::sub_admm to select SubADMM. The table covers the main
solver controls; solver-specific penalty settings are declared in
crisp/model.hpp.
| Option | Meaning |
|---|---|
sol.type |
Contact solver: canal or sub_admm. |
canal.max_itersub_admm.max_iter |
Maximum iterations per time step for CANAL and SubADMM, respectively. |
canal.max_iter_inner |
Maximum CANAL inner iterations per outer iteration. |
sol.min_res |
Absolute residual target shared by both solvers. |
sol.min_rel_res |
Relative change threshold used to detect stagnation. |
sol.warmstart |
Reuse solver state from the preceding time step. |
Reaching an iteration limit does not mean that the solve converged, and the relative threshold detects stagnation rather than relative solution accuracy. SubADMM can reduce solve time, though it may leave larger residuals than CANAL within a limited computation budget. Models with many degrees of freedom or contacts can still exceed real-time budgets with either solver.
To change options after construction, use
apply_option while the simulation is
stopped or locked. See Examples for the
solver settings.