dartsim/dart — pull request #156 by jslee02 (2014-03-17 23:45:58+00:00)
Title: Add optional collision detector: BulletCollisionDetector

DART has 3 collision detector types:
* [`FCLMeshCollisionDetector`](https://github.com/dartsim/dart/tree/master/dart/collision/fcl_mesh) (default)
* [`FCLCollisionDetector`](https://github.com/dartsim/dart/tree/master/dart/collision/fcl)
* [`DARTCollisionDetector`](https://github.com/dartsim/dart/tree/master/dart/collision/dart)

Both of `FCLMeshCollisionDetector` and `FCLCollisionDetector` are based on [`fcl`](https://github.com/flexible-collision-library/fcl). The difference between them is that `FCLMeshCollisionDetector` convert all the primitive shapes to meshs for collision detection while `fcl` uses primitive shapes of 'fcl'.

Some simulation requires analytic collision information using primitive shapes for example rolling wheel for vehicle simulation. In this sense, `FCLCollisionDetector` or `DARTCollisionDetector` is good solution instead of `FCLMeshCollisionDetector`. However, they have issues to use as default collision detector of DART.

`fcl` returns only one contact point for one collision pairs. This leads to unexpected behavior. See [#59] for the detail. Whereas `DARTCollisionDetector` does not cover all the shapes of DART. It supports only `BoxShape` and `Sphere`.

Under current circumstance, `BulletCollision` may be considerable solution. It supports primitive shapes and mesh together and returns reasonable number of contact points for primitive shapes. Of course [`Bullet`](http://bulletphysics.org/wordpress/) is another physics engine as it is. We uses `BulletCollision` component only for collision detection and separate [debian package](http://packages.ubuntu.com/search?keywords=bullet&searchon=names&suite=all§ion=all) of it is delivered since Ubuntu 13.10.

This may not our long term solution but I think it is worth in case of that analytic collision solution for primitive shapes and mesh support are required at the same time. Also this pull request does not increase mandatory dependency. When `BulletCollision` is installed on the machine, then cmake detect it and add `BulletCollsisionDetector` of DART.