dartsim/dart
Research-focused C++23 physics engine for robotics, animation, and machine learning, with Python bindings
📦 Collision
- Stabilize ODE capsule and cylinder resting contacts with a per-pair contact-history manifold (invalidated on sliding and on kinematic pose changes) so they no longer sink through the supporting surface: #2902, gazebosim/gz-physics#692
📦 Constraint
- Regularize rank-deficient closed-loop constraints with an additive Constraint Force Mixing floor on the `BallJointConstraint`/`WeldJointConstraint` loop-closure constraints, so non-axis-aligned closed kinematic chains stay enforced instead of drifting open: #2903, gazebosim/gz-physics#719
- Full changelog: https://github.com/dartsim/dart/blob/release-6.18/CHANGELOG.md
📋 Changes
- Collision
- Clamp the ODE heightfield extents, vertical scale, and bounds so an extreme `HeightmapShape` scale no longer aborts `dCollideHeightfield`: [#2894](https://github.com/dartsim/dart/pull/2894), [gazebosim/gz-physics#847](https://github.com/gazebosim/gz-physics/issues/847)
- Dynamics
- Validate `HeightmapShape` scale and height-field values, rejecting non-finite and non-positive inputs: [#2884](https://github.com/dartsim/dart/pull/2884), [gazebosim/gz-physics#847](https://github.com/gazebosim/gz-physics/issues/847)
- Reject non-finite mass and moment of inertia at the `Inertia` ingest boundary: [#2885](https://github.com/dartsim/dart/pull/2885), [gazebosim/gz-physics#854](https://github.com/gazebosim/gz-physics/issues/854)
- Initialize `Inertia` to a valid state before applying a rejected moment, and check only the consumed inertia entries: [#2898](https://github.com/dartsim/dart/pull/2898)
- Common
- Demote the duplicate-name auto-rename message to debug verbosity: [#2895](https://github.com/dartsim/dart/pull/2895), [gazebosim/gz-physics#725](https://github.com/gazebosim/gz-physics/issues/725)
- + 2 more
📋 Changes
- GUI
- Fix `RealTimeWorldNode` stalling when the viewer lags behind real time: [#2088](https://github.com/dartsim/dart/pull/2088)
- Collision
- Preserve the minimum pair distance in FCL distance queries: [#2243](https://github.com/dartsim/dart/pull/2243), [#1539](https://github.com/dartsim/dart/issues/1539)
- Fix plane collision handling for the Bullet and FCL backends: [#2246](https://github.com/dartsim/dart/pull/2246)
- Fix an FCL mesh contact regression: [#2258](https://github.com/dartsim/dart/pull/2258)
- Fix Bullet ellipsoid rolling by using primitive sphere/ellipsoid shapes: [#2274](https://github.com/dartsim/dart/pull/2274)
- Handle non-`Skeleton` `MetaSkeleton` subscriptions in `CollisionGroup` without crashing: [#2277](https://github.com/dartsim/dart/pull/2277)
- + 33 more
📋 Changes
- GUI
- Fix SEGV in ImFontAtlas::AddFontFromMemoryCompressedTTF when null pointer is passed as compressed font data: [#2516](https://github.com/dartsim/dart/issues/2516)
- Fix `ImGui::ColorPicker3`/`ColorPicker4` crashes when called without an active ImGui context or window: [#2668](https://github.com/dartsim/dart/issues/2668)
- Use modern ImGui modifier key names in the OSG ImGui handler for newer ImGui builds. ([#2526](https://github.com/dartsim/dart/pull/2526))
- Constraint
- Ignore malformed contacts with null collision objects instead of dereferencing them while creating `ContactConstraint`: [#2669](https://github.com/dartsim/dart/issues/2669)
- Hide bundled ImGui internal formatting helpers from shared library exports: [#2671](https://github.com/dartsim/dart/issues/2671)
- Parsers
- + 13 more
📋 Changes
- Build
- Added support for assimp 6.x while maintaining backward compatibility with assimp 5.x: [#2510](https://github.com/dartsim/dart/pull/2510)
- Dynamics
- Reject non-finite transforms at Joint public API entry points and guard inertia propagation in kinematic joint variants: [#2497](https://github.com/dartsim/dart/pull/2497)
- Math
- Enhance verifyTransform to also reject infinity values (previously only checked NaN): [#2497](https://github.com/dartsim/dart/pull/2497)
- Optimizer
- Validate Problem and MultiObjectiveProblem dimension to prevent excessive allocation from huge inputs: [#2503](https://github.com/dartsim/dart/pull/2503)
- + 2 more
📋 Changes
- Constraint
- Fix slip compliance validation to silently handle the -1.0 sentinel value (meaning "use default") instead of logging spurious warnings: [gz-sim#3289](https://github.com/gazebosim/gz-sim/issues/3289)
- Dynamics
- Guard against non-finite articulated body computations from zero/epsilon mass or extreme spring values: [gz-physics#849](https://github.com/gazebosim/gz-physics/issues/849), [gz-physics#850](https://github.com/gazebosim/gz-physics/issues/850), [gz-physics#851](https://github.com/gazebosim/gz-physics/issues/851), [gz-physics#854](https://github.com/gazebosim/gz-physics/issues/854), [gz-physics#856](https://github.com/gazebosim/gz-physics/issues/856)
📋 Changes
- Constraint
- Fix crash when joint limits are invalid (lower > upper) by emitting a warning and skipping limit enforcement: [gz-physics#846](https://github.com/gazebosim/gz-physics/issues/846)
- Validate contact surface parameters to prevent LCP solver crashes: [#2435](https://github.com/dartsim/dart/pull/2435)
- Dynamics
- Validate SphereShape radius to prevent assertion failures with NaN/Inf/non-positive values: [#2441](https://github.com/dartsim/dart/pull/2441)
- Parsers
- Fix null pointer dereference in XmlHelpers getValue* functions: [#2429](https://github.com/dartsim/dart/pull/2429)
📋 Changes
- Physics
- Fix ODE box-cylinder contact stability with libccd: [#2389](https://github.com/dartsim/dart/pull/2389)
- Fix ODE cylinder mesh fallback on FreeBSD: [#2388](https://github.com/dartsim/dart/pull/2388)
- Parsers
- Fix URDF shape parsing on FreeBSD: [#2379](https://github.com/dartsim/dart/pull/2379)
- Tooling and Docs
- Add Alt Linux repro tasks: [#2381](https://github.com/dartsim/dart/pull/2381)
- Add FreeBSD VM repro patches: [#2374](https://github.com/dartsim/dart/pull/2374)
- + 2 more
📋 Changes
- Collision
- Fix Bullet double-precision includes on release-6.16: [#2334](https://github.com/dartsim/dart/pull/2334)
- Tooling and Docs
- Fix pixi ex example selection: [f716548](https://github.com/dartsim/dart/commit/f7165480d66)
📋 Changes
- Build
- Remove DART_BUILD_MODE_DEBUG guards to fix NDEBUG compilation: [#2326](https://github.com/dartsim/dart/pull/2326)
- Use package.xml version for dartpy packaging: [#2327](https://github.com/dartsim/dart/pull/2327)
- Tests
- Stabilize World::Cloning in asserts-enabled CI: [#2331](https://github.com/dartsim/dart/pull/2331)
- Tooling and Docs
- Cover asserts-enabled build and fix API docs PR ref: [#2330](https://github.com/dartsim/dart/pull/2330)
- Fix publish_dartpy workflow YAML: [#2329](https://github.com/dartsim/dart/pull/2329)
- + 4 more
🐛 Fixed
- Fix FreeListAllocator assertions when building without NDEBUG (e.g., Ubuntu 24.04 / GCC 13): [#2295](https://github.com/dartsim/dart/pull/2295)
📦 Highlights
- Servo joints now recover gracefully from hitting position limits, preventing the lock-ups reported in Gazebo/gz-sim (#2086).
- All remaining raw `assert` calls were replaced with `DART_ASSERT` to keep diagnostics consistent in release builds (#2117).
- Build fixes:
- pybind11 detection and assert include handling were hardened for pixi builds (#2118).
- Eigen guard backported so 3.4+ builds keep working on the release branch (#2108).
- New toggles let you opt into system Tracy, pybind11, and GoogleBenchmark as needed (#1911, #1907, #1904).
- Absolute install dir handling corrected for CMake exports (#2006).
- Tooling & docs:
- + 3 more
🧪 Tested Platforms
- Linux
- Ubuntu 22.04 LTS / GCC 11.4 / x86_64
- Ubuntu 24.04 LTS / GCC 13.2 / x86_64
- macOS 14 / Clang 15 / arm64
- Windows / MSVC 19.40 / x86_64
📦 Installation / Build
- See the README for package availability and build instructions. To build from source with pixi:
- ```bash
- pixi run build
- pixi run build-dartpy # optional: Python bindings
- pixi run test # C++ tests
- pixi run test-py # python/dartpy tests
- pixi run -e gazebo test-gz # gazebo compatibility test suite
- ```
📦 Thanks
- Thanks to everyone who reported issues, reviewed PRs, and helped chase down the joint-limit and pixi regressions. Enjoy 6.16.0!
📦 [DART 6.15.0 (2024-11-15)](https://github.com/dartsim/dart/milestone/77?closed=1)
- This is a simple maintenance release with updates to support newer dependency versions.
- Tested Platforms
- Linux
- Ubuntu 22.04 LTS / GCC 11.4 / x86_64
- Ubuntu 24.04 LTS / GCC 13.2 / x86_64
- macOS 14 / Clang 15 / arm64
- Windows / MSVC 19.40 / x86_64
- Build
- + 3 more
📦 [DART 6.14.5 (2024-09-08)](https://github.com/dartsim/dart/milestone/82?closed=1)
- Tested Platforms
- Linux
- Ubuntu 22.04 LTS / GCC 11.4 / x86_64
- Ubuntu 24.04 LTS / GCC 13.2 / x86_64
- macOS 14 / Clang 15 / arm64
- Windows / MSVC 19.40 / x86_64
- Fixed missing parentheses in config.hpp: [#1838](https://github.com/dartsim/dart/pull/1838)
- Allowed negative scale for MeshShape: [#1841](https://github.com/dartsim/dart/pull/1841)
📦 [DART 6.14.4 (2024-07-06)](https://github.com/dartsim/dart/milestone/81?closed=1)
- Tested Platforms
- Linux
- Ubuntu 22.04 LTS / GCC 11.4 / x86_64
- Ubuntu 24.04 LTS / GCC 13.2 / x86_64
- macOS 14 / Clang 15 / arm64
- Windows / MSVC 19.40 / x86_64
- Fixed GLUT dependency handling on Windows: [#1827](https://github.com/dartsim/dart/pull/1827)
📦 [DART 6.14.3 (2024-07-05)](https://github.com/dartsim/dart/milestone/80?closed=1)
- Tested Platforms
- Linux
- Ubuntu 22.04 LTS / GCC 11.4 / x86_64
- Ubuntu 24.04 LTS / GCC 13.2 / x86_64
- macOS 14 / Clang 15 / arm64
- Windows / MSVC 19.40 / x86_64
- Changed the default CMake option to DART_ENABLE_SIMD=OFF: [#1825](https://github.com/dartsim/dart/pull/1825)
📦 [DART 6.14.2 (2024-06-28)](https://github.com/dartsim/dart/milestone/79?closed=1)
- Tested Platforms
- Linux
- Ubuntu 22.04 LTS / GCC 11.4 / x86_64
- Ubuntu 24.04 LTS / GCC 13.2 / x86_64
- macOS 14 / Clang 15 / arm64
- Windows / MSVC 19.40 / x86_64
- Fixed version definitions: [#1820](https://github.com/dartsim/dart/pull/1820)
📦 [DART 6.14.1 (2024-06-26)](https://github.com/dartsim/dart/milestone/78?closed=1)
- Tested Platforms
- Linux
- Ubuntu 22.04 LTS / GCC 11.4 / x86_64
- Ubuntu 24.04 LTS / GCC 13.2 / x86_64
- macOS 14 / Clang 15 / arm64
- Windows / MSVC 19.40 / x86_64
- Included CTest for BUILD_TESTING option: [#1819](https://github.com/dartsim/dart/pull/1819)
📦 [DART 6.14.0 (2024-06-24)](https://github.com/dartsim/dart/milestone/73?closed=1)
- This release is mostly a maintenance update, including various CI updates and build fixes for recent development environment toolsets and dependencies.
- Tested Platforms
- Linux
- Ubuntu 22.04 LTS / GCC 11.4 / x86_64
- Ubuntu 24.04 LTS / GCC 13.2 / x86_64
- macOS 14 / Clang 15 / arm64
- Windows / MSVC 19.40 / x86_64
- Breaking Changes
- + 10 more
📋 Changes
- Tested Platforms
- Linux
- Ubuntu 22.04 LTS on amd64 / GCC 11.2 / amd64
- Ubuntu 24.04 LTS on amd64 / GCC 13.2 / amd64
- macOS 12 (Monterey) / AppleClang 14 / amd64
- Windows / MSVC 19.38 / amd64
- Build
- Fixed build with GCC >= 13: [#1793](https://github.com/dartsim/dart/pull/1793)
📦 [DART 6.13.1 (2024-01-04)](https://github.com/dartsim/dart/milestone/74?closed=1)
- Tested Platforms
- Ubuntu Focal on amd64 / GCC 9.4 / amd64
- Ubuntu Jammy on amd64 / GCC 11.3 / amd64
- macOS 12 (Monterey) / Clang 14 / amd64
- Windows / MSVC 19.37 / amd64
- Build
- Fixed build with urdfdom 4.0.0: [#1779](https://github.com/dartsim/dart/pull/1779)
- Fixed invalid array access in moving skeleton subtree: [#1778](https://github.com/dartsim/dart/pull/1778)
- + 2 more
📦 [DART 6.13.0 (2022-12-31)](https://github.com/dartsim/dart/milestone/69?closed=1)
- Supported Platforms
- Ubuntu Focal on amd64 / GCC 9.3 / amd64
- Ubuntu Jammy on amd64 / GCC 11.2 / amd64
- macOS 12 (Monterey) / Clang 13 / amd64
- Windows / Microsoft Visual Studio 2019 / amd64
- Dependency
- Added required dependencies: fmt
- Added optional dependencies: spdlog
- + 22 more
📋 Changes
- Build
- Fixed build with urdfdom 3.1.0 on Windows: [#1675](https://github.com/dartsim/dart/pull/1675)
📋 Changes
- Build
- Fixed bullet header include: [#1620](https://github.com/dartsim/dart/pull/1620)
- dartpy
- Added Python bindings for Joint::getWrenchTo{Child|Parent}BodyNode: [#1621](https://github.com/dartsim/dart/pull/1621)
📋 Changes
- API Breaking Changes
- DART 6.12.0 and later require compilers that support C++17: [#1600](https://github.com/dartsim/dart/pull/1600)
- Increased minimum CMake version to 3.10.2
- Increased minimum compiler versions to GCC 7.3.0, Clang 6.0, MSVC 16.0
- Dropped Ubuntu Xenial (16.04 LTS) support
- Build
- Remove DART_BUILD_DARTPY option: [#1600](https://github.com/dartsim/dart/pull/1600)
- Dynamics
- + 8 more
📋 Changes
- Dynamics
- Fixed incorrect LCP construction in JointConstraint for multi-DOFs joints : [#1597](https://github.com/dartsim/dart/pull/1597)
📋 Changes
- Math
- Added `Mesh`, `TriMesh`, and `Icosphere` classes: [#1579](https://github.com/dartsim/dart/pull/1579)
- Collision
- Fixed incorrect group-group collision checking for BulletCollisionDetector: [#1585](https://github.com/dartsim/dart/pull/1585), [#717](https://github.com/dartsim/dart/issues/717)
- Dynamics
- Fixed servo motor doesn't respect joint position limits: [#1587](https://github.com/dartsim/dart/pull/1587)
- GUI
- Fixed incorrect MultiSphereConvexHull rendering: [#1579](https://github.com/dartsim/dart/pull/1579)
- + 3 more
📋 Changes
- Dynamics
- Fixed inertia calculation of CapsuleShape: [#1561](https://github.com/dartsim/dart/pull/1561)
- GUI
- Changed to protect OpenGL attributes shared by ImGui and OSG: [#1558](https://github.com/dartsim/dart/pull/1558)
- Changed to set backface culling by default: [#1559](https://github.com/dartsim/dart/pull/1559)
- dartpy
- Added Python binding for BodyNode::getBodyForce(): [#1563](https://github.com/dartsim/dart/pull/1563)
📋 Changes
- Common
- Removed use of boost::filesystem in public APIs: [#1417](https://github.com/dartsim/dart/pull/1417)
- Changed Signal to remove connection when they're being disconnected: [#1462](https://github.com/dartsim/dart/pull/1462)
- Collision
- Added ConeShape support for FCLCollisionDetector: [#1447](https://github.com/dartsim/dart/pull/1447)
- Fixed segfault from raycast when no ray hit: [#1461](https://github.com/dartsim/dart/pull/1461)
- Added PyramidShape class: [#1466](https://github.com/dartsim/dart/pull/1466)
- Kinematics
- + 73 more
📋 Changes
- Added Ipopt >= 3.13 support: [#1506](https://github.com/dartsim/dart/pull/1506)
