DART (Dynamic Animation and Robotics Toolkit) is an open-source, research-focused physics engine for robotics, animation, and machine learning. It provides transparent kinematics, dynamics, collision, and constraint-solving foundations for users who need more than a black-box simulator. DART uses generalized coordinates for articulated rigid body systems and Featherstone's Articulated Body Algorithm for accurate, stable motion dynamics.
- Research-grade dynamics — Featherstone algorithms, generalized coordinates, and direct access to dynamics quantities
- Easy to start — Python and C++ packages through common package managers, plus reproducible source builds with pixi
- Extensible foundations — Math, collision, constraints, model loading, benchmarks, and tests that support new algorithms and baseline comparisons
- Unified model loading — Load URDF, SDF, MJCF, and SKEL models through a single API
- Scalable compute roadmap — Cross-platform CPU support today, with roadmap work for multi-core, SIMD, and accelerator backends
- Battle-tested ecosystem — Powers Gazebo, research labs, and production systems worldwide, with best-effort support for production use
Python
import dartpy as dart
world = dart.World()
# Load a robot from URDF
urdf = dart.io.UrdfParser()
robot = urdf.parseSkeleton("dart://sample/urdf/KR5/KR5 sixx R650.urdf")
world.addSkeleton(robot)
# Simulate 100 steps
for _ in range(100):
world.step()
print(f"Positions: {robot.getPositions()}")C++
#include <dart/dart.hpp>
int main() {
auto world = dart::simulation::World::create();
// Load a robot from URDF
auto robot = dart::io::urdf::readSkeleton("path/to/robot.urdf");
world->addSkeleton(robot);
// Simulate 100 steps
for (int i = 0; i < 100; ++i) {
world->step();
std::cout << "Positions: " << robot->getPositions().transpose() << "\n";
}
return 0;
}| Method | Command |
|---|---|
| uv (preferred) | uv add dartpy |
| pip | pip install dartpy |
| pixi | pixi add dartpy |
| conda | conda install -c conda-forge dartpy |
| Platform | Command |
|---|---|
| Cross-platform (recommended) | pixi add dartsim-cpp or conda install -c conda-forge dartsim-cpp |
| Ubuntu | sudo apt install libdart-all-dev |
| Arch Linux | yay -S libdart |
| FreeBSD | pkg install dartsim |
| macOS | brew install dartsim |
| Windows | vcpkg install dartsim:x64-windows |
- Static Docs: English | 한국어
- AI Docs (interactive Q&A; experimental): DeepWiki | NotebookLM (Google account required)
- Developer Onboarding Guide — Architecture, components, and workflows
- Contributing Guide — Style guide and contribution process
- Project Direction — Research-focused north star and priorities
- Living Plans — Active and proposed roadmap items
- Background Theory — Dynamics, contact solving, and mathematical foundations
- Gazebo Integration — gz-physics integration workflow
- Release Roadmap — Compatibility, deprecations, and future plans
main— Active development targeting DART 7release-6.16— Maintenance branch for DART 6 (critical fixes only)
If you use DART in an academic publication, please consider citing this JOSS Paper:
@article{Lee2018,
doi = {10.21105/joss.00500},
url = {https://doi.org/10.21105/joss.00500},
year = {2018},
publisher = {The Open Journal},
volume = {3},
number = {22},
pages = {500},
author = {Jeongseok Lee and Michael X. Grey and Sehoon Ha and Tobias Kunz and Sumit Jain and Yuting Ye and Siddhartha S. Srinivasa and Mike Stilman and C. Karen Liu},
title = {DART: Dynamic Animation and Robotics Toolkit},
journal = {Journal of Open Source Software}
}DART is licensed under the BSD 2-Clause License.