DART (Dynamic Animation and Robotics Toolkit) is a collaborative, cross-platform, open source library created by the Graphics Lab and Humanoid Robotics Lab at Georgia Institute of Technology with ongoing contributions from the Personal Robotics Lab at University of Washington and Open Source Robotics Foundation. The library provides data structures and algorithms for kinematic and dynamic applications in robotics and computer animation. DART is distinguished by its accuracy and stability due to its use of generalized coordinates to represent articulated rigid body systems and Featherstone’s Articulated Body Algorithm to compute the dynamics of motion. For developers, in contrast to many popular physics engines which view the simulator as a black box, DART gives full access to internal kinematic and dynamic quantities, such as the mass matrix, Coriolis and centrifugal forces, transformation matrices and their derivatives. DART also provides an efficient computation of Jacobian matrices for arbitrary body points and coordinate frames. The frame semantics of DART allows users to define arbitrary reference frames (both inertial and non-inertial) and use those frames to specify or request data. For air-tight code safety, forward kinematics and dynamics values are updated automatically through lazy evaluation, making DART suitable for real-time controllers. In addition, DART gives provides flexibility to extend the API for embedding user-provided classes into DART data structures. Contacts and collisions are handled using an implicit time-stepping, velocity-based LCP (linear complementarity problem) to guarantee non-penetration, directional friction, and approximated Coulomb friction cone conditions. DART has applications in robotics and computer animation because it features a multibody dynamic simulator and various kinematic tools for control and motion planning.
- Open source under BSD license written in C++.
- Support Linux, Mac OSX, and Windows.
- Fully integrated with Gazebo.
- Support models described in URDF and SDF formats.
- Provide default integration methods, semi-implicit Euler and RK4, as well as extensible
- API for other numerical integration methods.
- Support multiple collision detectors: FCL and Bullet.
- Support lazy evaluation and automatic update of kinematic and dynamic quantities.
- Provide extensible API for embedding user-provided classes into DART data structures.
- Support comprehensive recording of events in simulation history.
- Support OpenGL and OpenSceneGraph.
- Provide extensible API to interface with various optimization methods
- Support numerous types of Joint.
- Support numerous primitive and arbitrary body shapes with customizable inertial and material properties.
- Support flexible skeleton modeling: cloning and reconfiguring skeletons or subsections of a skeleton.
- Provide comprehensive access to kinematic states (e.g. transformation, position, velocity, or acceleration) of arbitrary entity and coordinate frames
- Provide comprehensive access to various Jacobian matrices and their derivatives.
- Support flexible conversion of coordinate frames.
- A fully modular inverses kinematics framework
- A plug-and-play hierarchical whole-body inverse kinematics solver
- Achieve high performance for articulated dynamic systems using Lie Group representation and Featherstone hybrid algorithms.
- Enforce joints between body nodes exactly using generalized coordinates.
- Provide comprehensive API for dynamic quantities and their derivatives, such as mass matrix, Coriolis force, gravitational force, other external and internal forces.
- Support both rigid and soft body nodes.
- Model viscoelastic joint dynamics with joint friction and hard joint limits.
- Support various types of actuators.
- Handle contacts and collisions using an implicit LCP to guarantee non-penetration, directional friction, and approximated Coulomb friction cone conditions.
- Support ”Island” technique to subdivide constraint handling for efficient performance.
- Support various Cartesian constraints and provide extensible API for user-defined constraints.
- Provide multiple constraint solvers: Lemke method, Dantzig method, and PSG method.
- Support dynamic systems with closed-loop structures.