Skip to content

dartsim/dart

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DART

DART: Dynamic Animation and Robotics Toolkit

CI Ubuntu CI macOS CI Windows
Documentation Status codecov Codacy Badge
Anaconda-Server Badge PyPI Version License

DART (Dynamic Animation and Robotics Toolkit) is an open-source library that provides data structures and algorithms for kinematic and dynamic applications in robotics and computer animation. Renowned for its accuracy and stability, DART utilizes generalized coordinates to represent articulated rigid body systems and employs Featherstone's Articulated Body Algorithm to compute motion dynamics.

Unitree G1 humanoid demo

Why DART?

  • Accuracy & Stability — Featherstone's Articulated Body Algorithm with proven numerical stability
  • Unified Format Support — Load URDF, SDF, MJCF, and SKEL models through a single API
  • Full-featured Collision — Multiple collision detection backends (FCL, Bullet, ODE)
  • Constraint Dynamics — Joint limits, contacts, and closed-loop constraints solved together
  • Cross-platform — Linux, macOS, Windows with Python bindings included
  • Battle-tested — Powers Gazebo, research labs, and production systems worldwide

Quick Start

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;
}

Installation

Python (Recommended)

Method Command
uv (preferred) uv add dartpy
pip pip install dartpy
pixi pixi add dartpy
conda conda install -c conda-forge dartpy

C++

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

All distributions →

Documentation

User Documentation: English | 한국어 | DeepWiki Overview

Developer Resources

Branches

  • main — Active development targeting DART 7
  • release-6.16 — Maintenance branch for DART 6 (critical fixes only)

Citation

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}
}

License

DART is licensed under the BSD 2-Clause License.