dartsim/dart

Research-focused C++23 physics engine for robotics, animation, and machine learning, with Python bindings

DART – Dynamic Animation and Robotics Toolkit

What it is – DART is an open‑source physics engine aimed at research in robotics, animation, and machine‑learning‑driven simulation. It gives users direct access to low‑level kinematics, dynamics, collision handling, and constraint solving rather than hiding everything behind a black‑box.

Why it matters – The engine is built on generalized coordinates and Featherstone’s Articulated‑Body Algorithm, which provide accurate and stable simulation of articulated rigid‑body systems (e.g., humanoid robots). It is used under the hood of Gazebo and in many university labs, making it a solid foundation for projects that need trustworthy dynamics.

Key capabilities

  • Research‑grade dynamics – Featherstone algorithms, direct access to forces, torques, Jacobians, etc.
  • Multi‑format model loading – URDF, SDF, and MJCF can be imported through a single API.
  • Cross‑language support – C++ core with official Python bindings (dartpy). Packages are available via Conda, PyPI, and the pixi package manager.
  • Extensible architecture – Modular math, collision, constraint, and benchmark components that make it easy to plug in new algorithms.
  • Scalable compute roadmap – Currently CPU‑only, but the project plans SIMD and accelerator back‑ends.
  • Production‑tested – Powers Gazebo and other large‑scale robotics systems, though the newest DART 7 branch is still experimental.

Typical use cases

  • Simulating robot locomotion or manipulation for reinforcement‑learning research.
  • Generating physically realistic animation for virtual characters.
  • Benchmarking new contact‑resolution or control algorithms.
  • Integrating with larger robotics stacks (e.g., Gazebo) that need a physics layer.

Getting started

  • Python (recommended) – Install the stable DART 6 line via conda install -c conda-forge dartpy or the experimental DART 7 line after a wheel is published with pip install --pre dartpy. For a source build of DART 7, clone the repo and run pixi run build.
  • C++ – Install pre‑built packages (conda install -c conda-forge dartsim-cpp, brew install dartsim, etc.) or build from source using the provided pixi commands.
  • Quick demo (Python):
    import dartpy as dart, numpy as np
    world = dart.World(time_step=1e-3)
    opts = dart.RigidBodyOptions(); opts.mass = 1.0; opts.position = np.array([0,0,1])
    box = world.add_rigid_body('box', opts)
    world.enter_simulation_mode()
    for _ in range(100): world.step()
    print(f"t={world.time:.3f}s, box z={box.translation[2]:.3f}m")
    

Documentation & community – Full docs at https://dart.readthedocs.io/, AI‑enhanced Q&A via DeepWiki, and a GitHub Discussions forum for support.

License – BSD 2‑Clause (permissive, commercial‑friendly).

Maturity – DART 6 (branch release-6.*) is a stable LTS release suitable for production. DART 7 (the main branch) is a redesign still under active development and not yet recommended for production workloads.


All information above is taken directly from the repository’s README.

Related

  • Project
  • Project
  • Project
  • Project
  • Project