Drake
Drake C++ Documentation

Given two posed geometric shapes in a common frame, the collision detection system is responsible for determining if those shapes are penetrating and characterizing that penetration.

We won't go into the details of the how and why these techniques work the way they do, but, instead, focus on what the properties of the results of the current implementation are. It is worth noting that some of these properties are considered problems yet to be resolved and should not necessarily be considered desirable.

  1. Between any two collision geometries, there is a single contact point Co. This point is characterized by two witness points Aw and Bw on the geometry surfaces at the points of deepest penetration, see Numerical Approximation of Point Contact.
  2. Contacts are reported as the pair of deepest-penetration witness points Aw and Bw, a PenetrationAsPointPair in Drake.
  3. Surface-to-surface contacts (such as a block sitting on a plane) are unfortunately still limited to a single contact point, typically located at the point of deepest penetration. That point will necessarily change from step to step in an essentially non-physical manner. Our contact solver has generally exhibited stable behavior, even under these adversarial conditions. However, we recommend emulating multi-point contact by adding a collection of spheres covering the contact surfaces of interest. Refer to the example in drake/examples/multibody/inclined_plane_with_body/inclined_plane_with_body.cc for a demonstration of this strategy.
  4. A contact normal is determined that approximates the mutual normal of the contacting surfaces at the contact point. Next topic: Working with Contacts in Drake