Method for robust CD between polygon soups

Please don't post Bullet support questions here, use the above forums instead.
Post Reply
krishauser
Posts: 2
Joined: Sat Sep 19, 2015 9:53 pm

Method for robust CD between polygon soups

Post by krishauser »

Hi, I'm a robotics researcher at Duke and I've developed a method for doing robust contact detection with polygon soups. We've used it in my lab quite extensively over many years and it is much better than Opcode at yielding stabler simulations. It may be interesting for this to be integrated into Bullet.

It uses a Boundary Layer Expanded Mesh geometry representation that virtually "fattens" the mesh so that the object geometry occupies a thin region around the mesh. Contact normals and penetration depths can be computed robustly while the objects touch within the boundary layer. Specifically, normal and penetration depth estimates are stable over small disturbances, which cannot be said for Opcode. It is somewhat slow for realtime use, but for robotics and offline animation, this is not a big deal.

A paper describing the technique is Robust Contact Generation for Robot Simulation with Unstructured Meshes (http://motion.pratt.duke.edu/simulation/index.html).

It has been integrated into a robot simulation package Klampt (http://klampt.org/). Internally it uses ODE. We've also recently developed a package for using BLEM+ODE in the Gazebo robot simulator, as well as a fast, approximate mesh erosion method that keeps the expanded mesh closer to the original mesh.

Would any Bullet developers be interested in chatting more about this?
User avatar
Erwin Coumans
Site Admin
Posts: 4221
Joined: Sun Jun 26, 2005 6:43 pm
Location: California, USA
Contact:

Re: Method for robust CD between polygon soups

Post by Erwin Coumans »

Yes, I am interested in your approach, I just don't visit the forums regularly enough and missed it initially.

Do you have a small benchmark with some test triangle soups that compares your method with GIMPACT and OPCODE?

It seems you can already do this using Bullet, by inserting fat triangles into a btCompoundShape. A fat triangle is just a triangle (or convex hull of 3 vertices) using the collision margin to fatten it. This doesn't use GIMPACT, but a BVH versus BVH to find all triangle-triangle pairs between two compounds and then use GJK/EPA to find the local contact information between fat triangle pairs. Or is your main contribution the contact reduction?

Thanks!
Erwin
krishauser
Posts: 2
Joined: Sat Sep 19, 2015 9:53 pm

Re: Method for robust CD between polygon soups

Post by krishauser »

Yes, a compound shape of fat triangles is basically it. There are some improvements in speed / stability with contact clustering when two finely-meshed objects are in intimate contact, and it has an adaptive time stepping method to prevent mesh-mesh interpenetration when objects are moving quickly.

There are a few examples comparing GIMPACT/OPCODE and the method in http://motion.pratt.duke.edu/simulation/index.html, although these are not exactly quantitative. We ran some qualitative comparisons in robot gripper simulations, which is part of a submission to the ICRA conference currently under review. I can send this to you via email.

The basic idea is pretty straightforward, but I think the main point is that this approach works out-of-the-box, and it would make setting up simulations easier if such a collision geometry were enabled by default.
Post Reply