Repository navigation
DART 6.19.0
DART 6.19.0 is a minor release on the DART 6 LTS line. It adds automatic body
deactivation ("sleeping"), contact-aware inverse dynamics, and a cylindrical
dynamic joint constraint, together with a constraint-solver hot-path
optimization and build/example fixes for modern toolchains.
Build
- Include
<cassert>before the FCL headers in the FCL compatibility shim so DART builds against Eigen 5 and current GCC/Clang toolchains, which no longer pull<cassert>in transitively (FCL's shape headers callassertwithout including it). (#3021)
Constraint
- Add
CylindricalJointConstraintfor runtime slide-and-rotate attachments that leave translation along an axis and rotation about that axis free, with headless and GUI examples covering DART 6.x dynamic joint constraints. (#2923) - Optimize the DART 6 constraint-solver hot path (box-stacking benchmarks ~1.28× faster) with bit-exact results, adding a lightweight profiling-scope helper used to measure it. (#3023)
Dynamics
- Add
ContactInverseDynamicsandmath::solveNonNegativeLeastSquaresto compute joint torques together with friction-cone-consistent contact forces for tracked motions with contacts, so floating-base inverse dynamics no longer requires an external QP solver — with unit tests, benchmarks, dartpy bindings forContactInverseDynamics(thesolveNonNegativeLeastSquaressolver is C++-only), and an ImGui-based GUI example. (#2985)
Examples and Tutorials
- Enlarge the floor and add an FPS / physics real-time-factor HUD to the
glut_add_delete_skelsexample, so spawned cubes keep room on the ground and the effect of adding skeletons on real-time performance is visible. (#3019)
GUI
- Fix every GLUT example failing to open a window on modern Mesa/Xwayland: the shared GLUT window no longer requests a legacy, now-unavailable accumulation buffer, selecting the framebuffer with a relaxable
glutInitDisplayStringinstead, whileMotionBlurSimWindowopts back into an accumulation buffer on its own. (#3017)
Simulation
- Add automatic body deactivation ("sleeping") for resting solver islands, including wake-on-contact/force handling and island-index diagnostics. It is enabled by default, so resting bodies now freeze automatically; the detection is a deterministic no-op while bodies are active, and it can be turned off via
World::setDeactivationOptionsto retain the previous always-active behavior. (#2920)
Full changelog: https://github.com/dartsim/dart/blob/v6.19.0/CHANGELOG.md · Milestone: https://github.com/dartsim/dart/milestone/97?closed=1