|
|
Haptics Commmunity Web PageOnline Haptics Library |
© 1997 UCB. Personal use of this material is permitted. However, permission to reprint/republish this material for advertising or promotional purposes or for creating new collective works for resale, or to reuse any copyrighted component of this work in other works must be obtained from University of California, Berkeley.
The hardest part of rigid body simulation is modeling the interactions that occur between bodies in contact. The most commonly used approaches are penalty methods, followed by analytic methods. Both of these approaches are constraint-based, meaning that constraint forces at the contact points are continually computed and applied to determine the accelerations of the bodies. Impulse-based simulation is a departure from these approaches, in that there are no explicit constraints to be maintained at contact points. Rather, all contact interactions between bodies are affected through collisions; rolling, sliding, resting, and colliding contact are all modeled in this way. The approach has several advantages, including simplicity, robustness, parallelizability, and an ability to efficiently simulate classes of systems that are difficult to simulate using constraint-based methods. The accuracy of impulse-based simulation has been experimentally tested and is sufficient for many applications.
The processing of collisions is a critical aspect of the impulse-based approach. Efficient algorithms are needed for detecting the large number of collisions that occur, without missing any. Furthermore, the physical accuracy of the simulator rests upon the accuracy of the collision response algorithms. This thesis describes these essential algorithms, and their underlying theory. It describes how the algorithms for simple rigid body simulation may be extended to systems of articulated rigid bodies. To prove the method is truly practical, the algorithms have been implemented in the prototype simulator, Impulse. Many experiments performed with Impulse are described.
