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.3

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.3
File Actions
dartpy-6.20.3-cp315-cp315-manylinux_2_28_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.28+ x86-64 Details for dartpy-6.20.3-cp315-cp315-manylinux_2_28_x86_64.whl
dartpy-6.20.3-cp315-cp315-manylinux_2_28_aarch64.whl CPython 3.15 CPython 3.15 Linux glibc 2.28+ ARM64 Details for dartpy-6.20.3-cp315-cp315-manylinux_2_28_aarch64.whl
dartpy-6.20.3-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details for dartpy-6.20.3-cp314-cp314-win_amd64.whl
dartpy-6.20.3-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details for dartpy-6.20.3-cp314-cp314-manylinux_2_28_x86_64.whl
dartpy-6.20.3-cp314-cp314-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64 Details for dartpy-6.20.3-cp314-cp314-manylinux_2_28_aarch64.whl
dartpy-6.20.3-cp314-cp314-macosx_15_0_arm64.whl CPython 3.14 CPython 3.14 macOS 15.0+ ARM64 Details for dartpy-6.20.3-cp314-cp314-macosx_15_0_arm64.whl
dartpy-6.20.3-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for dartpy-6.20.3-cp313-cp313-win_amd64.whl
dartpy-6.20.3-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details for dartpy-6.20.3-cp313-cp313-manylinux_2_28_x86_64.whl
dartpy-6.20.3-cp313-cp313-manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64 Details for dartpy-6.20.3-cp313-cp313-manylinux_2_28_aarch64.whl
dartpy-6.20.3-cp313-cp313-macosx_15_0_arm64.whl CPython 3.13 CPython 3.13 macOS 15.0+ ARM64 Details for dartpy-6.20.3-cp313-cp313-macosx_15_0_arm64.whl
dartpy-6.20.3-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for dartpy-6.20.3-cp312-cp312-win_amd64.whl
dartpy-6.20.3-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details for dartpy-6.20.3-cp312-cp312-manylinux_2_28_x86_64.whl
dartpy-6.20.3-cp312-cp312-manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64 Details for dartpy-6.20.3-cp312-cp312-manylinux_2_28_aarch64.whl
dartpy-6.20.3-cp312-cp312-macosx_15_0_arm64.whl CPython 3.12 CPython 3.12 macOS 15.0+ ARM64 Details for dartpy-6.20.3-cp312-cp312-macosx_15_0_arm64.whl

Total release size: 231.0 MB

Release files / dartpy-6.20.3-cp315-cp315-manylinux_2_28_x86_64.whl

Download URL dartpy-6.20.3-cp315-cp315-manylinux_2_28_x86_64.whl
Size 18.8 MB
Tags CPython 3.15 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
75cd5c3a1381bc10f745a0bb2c623e070cef24d96168915467387de151762b58
BLAKE2b-256 checksum
How to use checksums
e48f0aa21190ef5f53875e1b12557ab0ca694584b856040304e3c8360f24e660
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.3-cp315-cp315-manylinux_2_28_aarch64.whl

Download URL dartpy-6.20.3-cp315-cp315-manylinux_2_28_aarch64.whl
Size 17.4 MB
Tags CPython 3.15 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
c5dd0808379ac6931a20d27af64f2814ed90876785b6ca09bcdfa9bc9d74ecd6
BLAKE2b-256 checksum
How to use checksums
5ebf34a7da12069161bf4ceca4f6628ee855f4675fe6b4998a6701a87704d631
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.3-cp314-cp314-win_amd64.whl

Download URL dartpy-6.20.3-cp314-cp314-win_amd64.whl
Size 13.5 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
6b7ec60386dc31dcb7228de4b21a81208e0404beb5104e98c3dff8f9d7c9860b
BLAKE2b-256 checksum
How to use checksums
8295659b05e0dc195a52c7e81ac6f6329d758fd0e909dc5e77f46fe41add20b3
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.3-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL dartpy-6.20.3-cp314-cp314-manylinux_2_28_x86_64.whl
Size 18.8 MB
Tags CPython 3.14 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
de52efaaff981a56b58bb152d27ad20c430b4615f2c989a141d628ecf11909a9
BLAKE2b-256 checksum
How to use checksums
505df62c98d3d8666a4a7c3f97d6c045c11a2589c6103f4c29fe952635651b8a
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.3-cp314-cp314-manylinux_2_28_aarch64.whl

Download URL dartpy-6.20.3-cp314-cp314-manylinux_2_28_aarch64.whl
Size 17.4 MB
Tags CPython 3.14 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
c0ae4ef55c0a269feafc69d5b20423814e524cfe4ddc815fbeb593ed066153e8
BLAKE2b-256 checksum
How to use checksums
365dab5cf98b3bad10161cfafbbfedf02da9ea80698d299404e44da7f834be80
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.3-cp314-cp314-macosx_15_0_arm64.whl

Download URL dartpy-6.20.3-cp314-cp314-macosx_15_0_arm64.whl
Size 15.3 MB
Tags CPython 3.14 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
4676b8ccb4608f20a5effe19c1caec495af9e87285f53e918191140bce608d6a
BLAKE2b-256 checksum
How to use checksums
4b01cc062507a59285c9b6428052b287acc46ad30cc8b7538586329f9b85872c
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.3-cp313-cp313-win_amd64.whl

Download URL dartpy-6.20.3-cp313-cp313-win_amd64.whl
Size 13.5 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
3d4af9a7cfe781fa18324cb58ce2e94c006e23671ef20a8e7d2295a86692f9d1
BLAKE2b-256 checksum
How to use checksums
c9c4a5b0b1417389f7ca9db560b6375ae400dd889f930548588b29082e29630e
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.3-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL dartpy-6.20.3-cp313-cp313-manylinux_2_28_x86_64.whl
Size 18.8 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
f09365c63444859043454b1c1be0905c9e28f5d165806e45a221f91210885c9c
BLAKE2b-256 checksum
How to use checksums
69f85720ebc4b5d0dfc1ee611a9622e32db538164d77195ae635e965a6bca343
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.3-cp313-cp313-manylinux_2_28_aarch64.whl

Download URL dartpy-6.20.3-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
62d85f6a5d72d75fbb8b972e15c2c9e5dd75f1308b2e380d22a1b79c20331fb5
BLAKE2b-256 checksum
How to use checksums
25474374b9877b631f7a5bfd04c47ad9ee3be0114e58e4fc25acfa1318d4c875
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.3-cp313-cp313-macosx_15_0_arm64.whl

Download URL dartpy-6.20.3-cp313-cp313-macosx_15_0_arm64.whl
Size 15.3 MB
Tags CPython 3.13 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
fe26f76ca69f3c2862488b0e8df1cfb199d2c06cc402bb025852c826ffac14ec
BLAKE2b-256 checksum
How to use checksums
345f68d705fa38e2e2ddaa7dbe34baa505bf2909114ba66a4e74923623350298
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.3-cp312-cp312-win_amd64.whl

Download URL dartpy-6.20.3-cp312-cp312-win_amd64.whl
Size 13.5 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
e30d3fc81a987cd4c67f2afe4b13598de1a6c59db25699b11224de4825a3bd2b
BLAKE2b-256 checksum
How to use checksums
a3ffd42294720459704201be5e6434db726104dfc708aed53182ab8dbd6c7e7c
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.3-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL dartpy-6.20.3-cp312-cp312-manylinux_2_28_x86_64.whl
Size 18.8 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
df7713a2ab5e73a7570b16a02a03755753060652b947c6f9cd90a0c1f9e6fa60
BLAKE2b-256 checksum
How to use checksums
0239925c95a74a9c4a19929f37dbb2adb4a1b9dcb0aea9b4e252a5dba5825835
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.3-cp312-cp312-manylinux_2_28_aarch64.whl

Download URL dartpy-6.20.3-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
ce5f2c5a7eab00568e15d38b9ad283b8dec593db26db6b63fb6ff150b86d01ed
BLAKE2b-256 checksum
How to use checksums
b483475ad749c5867922c9bb8915b1fad66d60630c8c24b79c746fc713772f2b
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.3-cp312-cp312-macosx_15_0_arm64.whl

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

Security for dartpy 6.20.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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