666 test
Test scenario
- Perfectly inelastic collision (restitutional coefficient = 0)
- Zero friction
- 6 x 6 x 6 number of 10 kg spheres
- Small perturbation in position to make the cube collapses
- Metric: pairwise penetration of objects
Tested solver list
- Rai
- Bisection solver (Rai solver)
- Bullet
- Sequence Impulse
- ODE
- Dantzig
- LCP PGS
- MuJoCo
- PGS
- CG
- Newton
- Dart
- Dantzig
LCP PGS[1]
Commentary
- [1] Dart LCP PGS solver fails in this test: the simulation is blown up.
Results
Assuming complete rigidness, the contact of two objects has complete-complementarity: there's neither deformation nor penetration. However, the constraint relaxation for tractable contact dynamics inevitably has position level drift in the discretized world which leads to unrealistic penetration between objects on their contacts. This penetration effect is observed for RaiSim, Bullet, ODE, and Dart which are based on the hard contact model.
Besides, MuJoCo adopts complementarity-free contact model(soft contact model), which does not hold strict complementarity rather relaxes the constraint to make the contact problem convex. The position level drift also inherently exists apparently.
By measuring the pairwise penetration between objects, we can quantize the severity of position level drift. We observed the error over the timestep size. The results are as follows:
Clearly, RaiSim has faster and more accurate speed-accuracy curve than other by means of the novel bisection solver. Bullet perform poorly in this test that has severe penetration problem for general situation. This can be attenuated by ERP, but remark that ERP is not based on real physics but a post process to make plausible result.
Also RaiSim remarkably faster than other engines: it is even six times faster than Bullet which is the fastest among others.
Note that MuJoCo cannot specify restitution coefficient. There's uncontrollable bouncy behavior as the following video.