CRISP

Simulating contact-rich robotic assembly

CRISP is a physics engine for contact-rich robotic assembly. It uses expressive collision geometries and robust contact solvers to simulate multibody dynamics with frictional contact.

We release CRISP with two example scenarios—peg insertion and gear assembly—that use mesh and SDF-based collision geometries with CANAL and SubADMM contact solvers.

Run the examples

Assembly scenarios

Watch each scenario and compare its rendered surfaces with the detected contact points.

Drag the divider to reveal contact points

Contact points during peg insertion

Collision geometry

CRISP supports primitives, convex shapes, triangle meshes, signed distance fields, and differentiable support functions. This lets each part use a representation suited to its shape and expected contacts—from imported mesh surfaces to parameterized curved profiles, bores, and gear teeth.

Geometry and model construction ↗

Contact solver

CRISP resolves frictional contact, joint limits, and joint friction together with multibody dynamics. CANAL combines outer augmented-Lagrangian updates with inner Newton iterations for accurate and robust resolution of dense contacts; SubADMM uses subsystem-based variable splitting to reduce solve cost. Performance and convergence depend on the model size and contact configuration.

Solver methods and settings ↗

Run the examples

Build and run the two C++ examples to inspect assembly motion and detected contact points in the viewer. Their source code defines each model’s collision geometry, actuators, solver settings, and joint targets.

Build and run

Academic & non-commercial research · License

After building · from the repository rootBuild instructions ↗
./build/examples/peg_insertion
./build/examples/gear_assembly

Publications

Citation information ↗