Skip to main content

DART

DART: Dynamic Animation and Robotics Toolkit

CI Linux CI macOS CI Windows
Documentation Status codecov Codacy Badge
PyPI Version conda-forge Version License

DART (Dynamic Animation and Robotics Toolkit) is an open-source C++17 library, with Python bindings (dartpy), for the kinematics, dynamics, and contact simulation of articulated rigid and soft bodies in robotics and computer animation. It represents articulated systems in generalized coordinates and computes their motion with Featherstone's Articulated Body Algorithm, which makes it accurate and stable.

Four DART demos: an Atlas humanoid walking under a SIMBICON controller, a Unitree G1 humanoid posed with inverse kinematics, a soft-body worm crawling, and a soft ball landing with adaptive soft contact
Atlas, soft-worm, and soft-contact scenes from dart-demos (pixi run demos), plus a Unitree G1 IK puppet from an earlier example

Why DART?

  • Research-grade dynamics — Featherstone's algorithms in generalized coordinates, with direct access to the mass matrix, Coriolis and gravity forces, Jacobians, and their derivatives
  • Contacts and constraints — LCP-based contact with Dantzig and PGS solvers, joint limits, closed kinematic loops, and soft bodies; collision detection through FCL (default), Bullet, ODE, or DART's native detector
  • Model loading — URDF, SDF, SKEL, and MJCF (experimental) parsers
  • Kinematics and control — hierarchical whole-body inverse kinematics with analytical solver support (e.g., IkFast), plus operational-space and stable-PD control examples
  • C++ and Python — the same engine through dartpy, packages on PyPI, conda-forge, and major package managers, and reproducible source builds with pixi
  • Battle-tested — powers Gazebo through gz-physics, and is used by research labs worldwide

Quick Start

Python

import dartpy as dart

world = dart.simulation.World()  # 1 ms time step, gravity along -z

# A shapeless 1 kg rigid body (the default inertia) free-falling from z = 1 m.
body = dart.dynamics.Skeleton("body")
body.createFreeJointAndBodyNodePair()
body.setPosition(5, 1.0)  # FreeJoint DOFs: rotation (0-2), translation (3-5)
world.addSkeleton(body)

for _ in range(100):
    world.step()

print(f"t = {world.getTime():.3f} s, z = {body.getPosition(5):.3f} m")
# t = 0.100 s, z = 0.950 m

C++

#include <dart/dart.hpp>

#include <iostream>

int main()
{
  auto world = dart::simulation::World::create();

  // A shapeless 1 kg rigid body (the default inertia) free-falling from z = 1 m.
  auto body = dart::dynamics::Skeleton::create("body");
  body->createJointAndBodyNodePair<dart::dynamics::FreeJoint>();
  body->setPosition(5, 1.0); // FreeJoint DOFs: rotation (0-2), translation (3-5)
  world->addSkeleton(body);

  for (int i = 0; i < 100; ++i)
    world->step();

  std::cout << "t = " << world->getTime() << " s, z = " << body->getPosition(5)
            << " m\n";
}
# CMakeLists.txt next to main.cpp
cmake_minimum_required(VERSION 3.22.1)
project(my_app CXX)
find_package(DART REQUIRED CONFIG)
add_executable(my_app main.cpp)
target_link_libraries(my_app PUBLIC dart)

Installation

Python

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

PyPI wheels cover the most common platforms and Python versions; see the Python installation guide for the exact list.

C++

Platform Command
Cross-platform (recommended) pixi add dartsim-cpp or conda install -c conda-forge dartsim-cpp
Ubuntu / Debian sudo apt install libdart-all-dev
Arch Linux (AUR) yay -S libdart
FreeBSD pkg install dartsim
macOS (Homebrew) brew install dartsim
Windows (vcpkg) vcpkg install dartsim:x64-windows

Distribution packages can lag behind the latest release: all distributions →. See the C++ installation guide for details.

Build from source

git clone https://github.com/dartsim/dart.git
cd dart
pixi run test   # configure, build, and run the C++ tests
pixi run demos  # build and launch the interactive demo app

See the build guide for options and other platforms.

Documentation

Contributing

Contributions are welcome; start with the contributing guide.

Branches

main is the development branch for the next release: pull requests target it, and all new patches land on it. Stable versions are available as tagged releases and as the packages above.

Citation

If you use DART in an academic publication, please consider citing the 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

Metadata

Release files for dartpy 6.20.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for dartpy 6.20.0
File
dartpy-6.20.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
dartpy-6.20.0-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details
dartpy-6.20.0-cp313-cp313-manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64 Details
dartpy-6.20.0-cp313-cp313-macosx_15_0_arm64.whl CPython 3.13 CPython 3.13 macOS 15.0+ ARM64 Details
dartpy-6.20.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
dartpy-6.20.0-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details
dartpy-6.20.0-cp312-cp312-manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64 Details
dartpy-6.20.0-cp312-cp312-macosx_15_0_arm64.whl CPython 3.12 CPython 3.12 macOS 15.0+ ARM64 Details
dartpy-6.20.0-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details
dartpy-6.20.0-cp311-cp311-manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ ARM64 Details
dartpy-6.20.0-cp310-cp310-manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64 Details
dartpy-6.20.0-cp310-cp310-manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64 Details

Total release size: 201.9 MB

Release files / dartpy-6.20.0-cp313-cp313-win_amd64.whl

Download URL dartpy-6.20.0-cp313-cp313-win_amd64.whl
Size 13.5 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
1b3455bbdaa5cfa9dcb82a1974a671dd8b28ea4d14fd0efcf2c0e96b4973c374
BLAKE2b-256 checksum
How to use checksums
bdb8214bbd4746b32fd5accff4af2a8ccf4578a3967e41b86564b0c30bebf5d4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.0-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL dartpy-6.20.0-cp313-cp313-manylinux_2_28_x86_64.whl
Size 18.7 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
52c08d7234274ec3d1f175d9b4377a204eef91039d06d0270c4a7731a09400f9
BLAKE2b-256 checksum
How to use checksums
68083bb28a616aee9bccade169469e5db86d9a1543991cda0e4341699cbe7b84
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.0-cp313-cp313-manylinux_2_28_aarch64.whl

Download URL dartpy-6.20.0-cp313-cp313-manylinux_2_28_aarch64.whl
Size 17.4 MB
Tags CPython 3.13 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
98dc3f9e1dbcac761428c697a94551cf74f240f59d664f0a403aaf9ea190f02b
BLAKE2b-256 checksum
How to use checksums
b7c70a6e2b37317f5e1b32e1057b0af8b9660dd14f97f47180797f0263cb2fde
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.0-cp313-cp313-macosx_15_0_arm64.whl

Download URL dartpy-6.20.0-cp313-cp313-macosx_15_0_arm64.whl
Size 15.2 MB
Tags CPython 3.13 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
b9317ff118a45375c212b0169ef72826e82d3c24a8d58eabfaee2e04bd69c2ba
BLAKE2b-256 checksum
How to use checksums
f42dc0414053cc031885c2303f6716a01877720ee32a73f09943f7b1a9b9e3d2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.0-cp312-cp312-win_amd64.whl

Download URL dartpy-6.20.0-cp312-cp312-win_amd64.whl
Size 13.5 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
74beb9ac687e140f29c7b547f3d65c8252640f411e8944e1fcd3ea0226627e59
BLAKE2b-256 checksum
How to use checksums
4e67e8d3ace6fae352081134445e7ff58af14c7cebf57a3b8feaff9e0b63b2c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.0-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL dartpy-6.20.0-cp312-cp312-manylinux_2_28_x86_64.whl
Size 18.7 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
df613f09a685f088f28af31ea650fc799a033f79fd9144b24716b7cdbcce45c6
BLAKE2b-256 checksum
How to use checksums
c9934d6abdb5996d19cd107b037a74ca9ce90973cf3885175a7a9cb6af56a486
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.0-cp312-cp312-manylinux_2_28_aarch64.whl

Download URL dartpy-6.20.0-cp312-cp312-manylinux_2_28_aarch64.whl
Size 17.4 MB
Tags CPython 3.12 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
cf93b43261303cb8d9bc71a8349c09d77f435849c457e8d09fb0b149149d4a62
BLAKE2b-256 checksum
How to use checksums
e001f9581604e47b88dacfecaad32cd504fdeef151818e67159d7564cc68db08
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.0-cp312-cp312-macosx_15_0_arm64.whl

Download URL dartpy-6.20.0-cp312-cp312-macosx_15_0_arm64.whl
Size 15.2 MB
Tags CPython 3.12 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
99c7bb6670e5ba2b4b06f09536d44d087ab30d07557aa043978f12f6381f2a85
BLAKE2b-256 checksum
How to use checksums
af0e617615bd8a6027f724c83056bcd0a7747f8b24cbd2e3f6f16f2c40036304
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.0-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL dartpy-6.20.0-cp311-cp311-manylinux_2_28_x86_64.whl
Size 18.7 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
bebe8c59985ec719c99990dcd0dfe33db26c4a9d81ed2dcef28e9bb9d956e515
BLAKE2b-256 checksum
How to use checksums
9e04a89a01c067101dc8d382b8e5bc16cc3621acb3bf8fbac2dc74e32cb13e5e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.0-cp311-cp311-manylinux_2_28_aarch64.whl

Download URL dartpy-6.20.0-cp311-cp311-manylinux_2_28_aarch64.whl
Size 17.4 MB
Tags CPython 3.11 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
93114594b438c939c1dfa73779e280380ad13b09ae4f04601b7935a48d8f2fbb
BLAKE2b-256 checksum
How to use checksums
696dce429e09564b1d093faddc713719899fe7f1f081d15160a7604664b80b6b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.0-cp310-cp310-manylinux_2_28_x86_64.whl

Download URL dartpy-6.20.0-cp310-cp310-manylinux_2_28_x86_64.whl
Size 18.7 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
ea1caeb620da44df81e678d3284fa0ff6b3cebba0dd9c617d93fa9464f3bd113
BLAKE2b-256 checksum
How to use checksums
9cd2aa37854de44f0181af1065fded2ba57d04f11f2ca2baf850fe366c348f85
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dartpy-6.20.0-cp310-cp310-manylinux_2_28_aarch64.whl

Download URL dartpy-6.20.0-cp310-cp310-manylinux_2_28_aarch64.whl
Size 17.4 MB
Tags CPython 3.10 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
3eac69a1be3d54d1a614f71dbb0010bc16b8b70e4998c7ad0d7a343e0952d0a3
BLAKE2b-256 checksum
How to use checksums
5eea852629d0a74fca661d96589abc35acd3e8adb19cfd8d2f3797e762b651f2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

6.20.0 This release

12 release files

6.19.4

8 release files

6.19.3

8 release files

6.19.2

8 release files

6.19.1

8 release files

6.19.0

8 release files

6.16.7

8 release files

6.16.6

8 release files

6.16.5

8 release files

6.16.2

8 release files

6.16.0

3 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page