Zero-slip pushing

benk
Posts: 1
Joined: Wed Dec 07, 2011 11:21 pm

Zero-slip pushing

Post by benk »

I am attempting to simulate pushing an object resting on a plane, with the aim of replicating the work of Matt Mason (example: http://dx.doi.org/10.1177/027836498600500303). In particular, under the following conditions:
  • All motion and forces occur in a plane
  • There is a single contact point between the pusher and the object
  • The center of mass of the object lies in the friction cone from the contact point
  • The direction of pushing lies in the friction cone
  • The line of pushing falls on the same side of the center of mass of the object as the contact point
then the motion of the object relative to the pusher will be pure rotation about the contact point. The advantage of this is that, given a convex object and a convex and sufficiently wide gripper, moving the pusher along a straight line the object will eventually align with the pusher and can be pushed indefinitely. In configuration space (of contact point position along object edge and angle of pushing relative to object edge normal), you get two triangle-shaped regions in which this occurs:

Image

I initially implemented this using a kinetic box body for the pusher, and a box body for the pushed object. I have since switched to a dynamic box body for the pusher using a slider constraint. However, the pusher never sticks to the surface; the contact point always slides. It looks like this is because the penetration of the objects causes them to "bounce" against each other, moving the contact point each time. I've tried reducing the speed of the objects and reducing the fixed timestep of the simulation, without any success. The API mentions an experimental ContinuousDynamicsWorld, which is designed for fast moving objects but might help in this case as well, but I can't find it in the source. I just found that it's available here http://www.google.com/codesearch#bwpu9b ... sWorld.cpp but not anywhere else that I can find.

Is there any good way simulating this in Bullet? Any help is greatly appreciated.