Physsim
Physsim is a C++ rigid-body dynamics simulation library.
It has been developed for two purposes: (a) to provide a stable, flexible platform for research into rigid body simulation and (b) to supply roboticists with state-of-the-art tools in robotic simulation.
Rigid body simulators can be measured in three ways: speed, accuracy, and stability. Speed is important so that complex environments can be simulated in real-time. Accuracy implies that the simulator reflects, to a large degree, the physical phenomena of the real world. Stability (or instability) is an artifact of the numerous approximations made in rigid body simulation; instability adds energy to the system, resulting in articulated bodies "breaking apart", for example. Rigid body simulators currently must balance these three factors. For example, ODE is extremely fast (for nonarticulated bodies) and fairly stable, but not necessarily very accurate.
Motivation
The decision to develop Physsim (not a light one, considering the complexity of rigid body simulation) was influenced by the limited selection of free rigid body simulators usable for robotics research. ODE is a nice library, and has served as the basis for some robotics software (including Webots, Gazebo, etc.), but its maximal-coordinate representation makes controlling manipulator robots difficult and it is not readily extensible; when new methods are developed within the physical simulation community, it is our opinion that ODE will not accept them readily. The alternatives to ODE at the present time are proprietary and quite expensive, not only holding researchers hostage to ever-increasing licensing fees (at the risk of having the tools built on the simulator stop working due to nonpayment or the disappearance of the proprietor), but prohibiting scientists at smaller universities from conducting research into manipulator and humanoid robotics. As a result of the issues described above, Physsim is licensed under the GPL and has been designed to readily incorporate new advances in physical simulation.
Features
Physsim supports many paradigms for rigid body simulation, though not all have been implemented.
- Abstract resting contact model; LCP and penalty contact currently implemented
- Abstract colliding model; Newton (frictionless) and Mirtich (frictional) restitution currently implemented
- Support for both reduced-coordinate (implemented using Featherstone articulated body method) and maximal-coordinate articulated bodies (not yet implemented)
- Simulations constructable using XML file format
- Multiple integrators:
- Euler
- 4th-order Runge-Kutta
- 4th-order Runge-Kutta implicit
- Forward kinematics and manipulator Jacobian computation provided
- Inverse dynamics for robots with both fixed and floating bases is provided (though the latter currently works only when contacts are disabled)
- All geometries are represented using triangle meshes; consideration of multiple primitive types is unnecessary
- Graphics can be output to OpenInventor, VRML, or an arbitrary engine; the graphical representation of the simulator can be output to VRML at any time to facilitate debugging.
- The simulator can be regressed in time
What's new
- Custom code for forward kinematics and forward and inverse dynamics for articulated bodies can now be used. The custom code can be derived using Mathematica or another symbolic mathematics package, and is generally far faster than Physsim's built in algorithms because the code can be optimized symbolically. (added 3/7/07)
- Added spherical and universal joint constraints (added 10/12/07)
- Articulated body links are now of type RigidBody, so it is now possible to assemble and disassemble articulated bodies will the simulation is running (added 7/8/07)
- Simulation of contacts can now be done entirely with impulses, avoiding the problem of "inconsistent configurations" (added 10/12/07)
Requirements
We designed Physsim to require only packages that are available "out of the box" in leading linux distributions (specifically Ubuntu and Gentoo). It should therefore be quite easy to get Physsim up and running on your linux box. Development versions of the following packages are required:
- boost
- lapack3 (not required for OS X)
- scons
- qhull
- libxml2
- coin, soqt, and qt3 (the library currently requires these to build, though this requirement will be removed in the near future; however, the examples will always require these packages)
- atlas (or another C BLAS equivalent such as the GSL CBLAS; not required for OS X)
Windows is not supported.
Documentation
doxygen generated documentation can be found here. Further documentation is provided in the "docs" directory within the distribution.
Download
The first stable release of Physsim is finally here! The first release (and further stable releases) can be downloaded from here.
The latest version of Physsim can be downloaded from our subversion repository on our project page at SourceForge.
To checkout the code (requires you to have subversion), use the following command (all on one line):
"svn checkout https://physsim.svn.sourceforge.net/svnroot/physsim/Physsim Physsim"
We can use help from researchers in the graphics and robotics communities
in developing and testing Physsim. Please contact us via the account below: