Skip to content

dartsim/dart

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7,362 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DART

DART: Dynamic Animation and Robotics Toolkit

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

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.

Important

Which DART is this? This main branch tracks DART 7, an in-progress redesign that is not yet recommended for production use. Its documentation is the latest site.

For a stable release, use DART 6 LTS: documentation · release-6.19 branch.

Unitree G1 humanoid demo

Why DART?

  • 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, native collision, constraints, model loading, benchmarks, and tests that support new algorithms and baseline comparisons
  • Unified model loading — Load URDF, SDF, and MJCF 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

Quick Start

Python

import dartpy as dart

world = dart.World()

# Load a robot from URDF
urdf = dart.io.UrdfParser()
robot = urdf.parse_skeleton("dart://sample/urdf/KR5/KR5 sixx R650.urdf")
world.add_skeleton(robot)

# Simulate 100 steps
for _ in range(100):
    world.step()
    print(f"Positions: {robot.get_positions()}")

C++

The DART 7 C++ simulation facade is available in source builds while the final public header transaction is still in progress. Use the C++ API shape recorded in docs/design/simulation_cpp_api.md for current source-checkout examples; DART 6 C++ snippets remain on the release-6.* branches for compatibility-line users.

Installation

The quick-start snippets above target the current main branch and DART 7 API. Until DART 7 package artifacts are published, package managers resolve the latest published DART 6 artifacts instead, and different indexes may briefly serve different DART 6 patch releases until their packages finish publishing. Use the file-free package smoke checks below for the installed package version, or use the source checkout path for the DART 7 quick starts.

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 →

Current Package Smoke Checks

These snippets create a tiny model in code, so they do not depend on sample data files being present in the installed package.

Python package

import dartpy as dart

world = dart.simulation.World()
skeleton = dart.dynamics.Skeleton("box")
skeleton.createFreeJointAndBodyNodePair()
world.addSkeleton(skeleton)
world.step()
print(f"Positions: {skeleton.getPositions()}")

C++ package

The published C++ package smoke for the compatibility line is maintained on release-6.*. DART 7 C++ package smoke checks move through check-dart7-artifacts and the local source-checkout promotion gates until DART 7 C++ artifacts are published.

Source checkout

pixi install
# Smoke the Python-first DART 7 rigid-body demo surface.
pixi run py-demos -- --scene rigid_body --headless --frames 1

# Open the curated rigid-body GUI verifier.
pixi run py-demos
pixi run py-demos -- --scene rigid_solver_compare

# Capture docked visual evidence for the solver comparison.
pixi run py-demo-capture -- --scene rigid_solver_compare --frames 24 --width 960 --height 540 --show-ui

# Optional C++ World-only companion smoke.
pixi run demos -- --scene rigid_body --headless --frames 1

The full 36-row rigid-body visual verification workflow, Rigid Workflow search terms, and capture commands are in the Python demos README.

Documentation

Developer Resources

Branches

  • main — Active development targeting DART 7 (not yet production-ready)
  • release-6.19 — Maintenance branch for DART 6 LTS (critical fixes only); see the DART 6 documentation

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.

Star History

Star History Chart