DART: eine Physik-Engine für Robotik-Forschung mit Blick nach innen
Forschungsorientierte C++23-Physik-Engine für Robotik, Animation und maschinelles Lernen mit Python-Anbindungen.
Auf einen Blick
- Was ist das?
- Was das Dynamic Animation and Robotics Toolkit mit Featherstone-Dynamik, URDF-SDF-MJCF-Laden und dartpy-Bindungen bietet, und warum für den Produktiveinsatz noch DART 6 LTS gilt.
- Für wen ist es gedacht?
- DART eignet sich für Forschende, die eine Physik-Engine mit zugänglichen Dynamikgrößen, einheitlichem Modellladen und Python-Bindungen suchen und bereit sind, im Code nachzulesen. Für Produktivsysteme weist das README den main-Zweig mit DART 7 ausdrücklich als nicht produktionsreif aus; dort sollte die stabile DART-6-LTS-Linie über pixi add dartpy oder conda install -c conda-forge dartpy bezogen werden.
- Darf ich es kommerziell nutzen?
- Ja. BSD-2-Clause ist eine freizügige Lizenz: Sie dürfen darauf aufbauende Software nutzen, verändern und verkaufen, solange Sie die Urheberrechts- und Lizenzhinweise beibehalten.
- Wird es noch gepflegt?
- Ja. Die letzten Commits kamen vor 1 Tag.
- In welcher Sprache ist es geschrieben?
- Hauptsächlich C++, laut der Sprachstatistik von GitHub.
Die Antworten beruhen auf den GitHub-Daten des Projekts (zuletzt abgeglichen am 14. September 2026) und auf unserer Analyse. Sie sind keine Rechtsberatung.
TIEFGEHENDE OPEN-SOURCE-ANALYSE
DART: Physik mit Einblick statt Blackbox
DART steht für Dynamic Animation and Robotics Toolkit und ist eine quelloffene, forschungsorientierte Physik-Engine in C++23 für Robotik, Animation und maschinelles Lernen. Das README positioniert sie für Nutzer, die mehr wollen als einen Simulationkasten ohne Einsicht: Kinematik, Dynamik, Kollisionserkennung und Constraint-Lösung liegen offen zugänglich vor, und die Dynamikgrößen lassen sich direkt abfragen. Für artikulierte Starrkörpersysteme nutzt DART generalisierte Koordinaten.
Die Metadaten vom 1. August 2026 weisen 1197 Sterne und 304 Forks aus, mit nur 8 offenen Issues. Als Ökosystembeleg nennt das README Gazebo, das auf DART aufbaut, dazu Forschungslabore und Produktionssysteme. Unterstützung für den produktiven Einsatz gibt es als Best-Effort-Angebot, keine vertragliche Zusage.
Zwei Linien: DART 6 LTS und das unfertige DART 7
Wer das Repository aufruft, muss eine Unterscheidung verstehen, die das README in einem eigenen Hinweisblock hervorhebt. Der main-Zweig verfolgt DART 7, eine laufende Neugestaltung, die laut README ausdrücklich noch nicht für den Produktiveinsatz empfohlen wird. Ihre Dokumentation liegt auf der latest-Seite von dart.readthedocs.io.
Für stabile Releases gilt die DART-6-LTS-Linie mit der stabilen Dokumentation und dem Zweig release-6.20. Die Release-Liste zeigt mit v6.19.4 vom Juli 2026, dass die Kompatibilitätslinie gepflegt wird, während die main-Zweig-Tags wie verification-media-gui-docking-scale eher Zwischenständen der Neugestaltung entsprechen. Ein früher Fehlgriff zwischen den Linien zeigt sich in Python schnell: Fehlen dart.World oder add_rigid_body, hat die Umgebung ein stabiles DART-6-Paket aufgelöst statt eines DART-7-Builds.
Featherstone-Dynamik und O(n)-Berechnung im Kern
Der algorithmische Kern nutzt Featherstones Articulated Body Algorithm für genaue und stabile Bewegungsdynamik. Das README hebt als Forschungsargument hervor, dass direkter Zugriff auf Dynamikgrößen möglich ist und dass Mathematik, native Kollision, Constraints, Modellladen, Benchmarks und Tests als erweiterbares Fundament für neue Algorithmen und Basisvergleiche dienen. Für das Skalieren nach oben verweist das Projekt auf eine Roadmap mit Multi-Core-, SIMD- und Beschleuniger-Backends; heute steht plattformübergreifende CPU-Ausführung.
Zahlen zur tatsächlichen Performanz liefert die Quelle nicht, die Komplexitätsbehauptung von O(n) für die Dynamik ist eine algorithmische Angabe, kein Benchmark. Wer Messwerte für ein konkretes Szenario braucht, muss sie selbst mit den mitgelieferten Benchmark- und Testwerkzeugen erheben.
Einheitliches Modellladen für URDF, SDF und MJCF
Robotermodelle liegen in der Praxis in verschiedenen Formaten vor. DART lädt URDF, SDF und MJCF über eine einzige API, sodass Simulationsaufbauten aus der Robotik- und der maschinellen-Lern-Welt ohne Formatkonvertierung einfließen können. Das spart in Forschungsprojekten einen eigenen Konvertierungsschritt zwischen Werkzeugen.
Eine Grenze nennt das README deutlich: DART 7 hat die Unterstützung für das alte SKEL-Format entfernt. Wer SKEL-Modelle weiterverwenden will, bleibt laut Hinweis auf einem release-6-Zweig. Für die C++-Seite des DART-7-Fassaden-API gilt ein Zwischenzustand: Die öffentliche Header-Umstellung ist noch nicht abgeschlossen, maßgeblich sind die Beispiele in docs/design/simulation_cpp_api.md im Quell-Checkout, während DART-6-Schnipsel auf den release-6-Zweigen liegen.
dartpy: Python-Bindungen über nanobind
Das Python-Modul dartpy stellt die Engine über nanobind-Bindungen bereit und deckt Mathematik, Dynamik, Kollision, Simulation sowie Constraint- und Optimiererklassen ab. Das Quick-Start-Beispiel des README liest sich kompakt: import dartpy as dart, eine World mit time_step 1.0/1000.0 anlegen, über dart.RigidBodyOptions einen Starrkörper mit 1 kg Masse einen Meter über dem Ursprung setzen, world.enter_simulation_mode() aufrufen und 100 Schritte mit world.step() laufen lassen. Am Ende gibt das Beispiel die Zeit und die z-Koordinate des Körpers aus.
Verteilungstechnisch ist Geduld gefragt. PyPI führt derzeit die stabile DART-6-Linie als neuestes nicht zurückgezogenes dartpy-Paket; die DART-7-Wheel-Lane baut zwar CPython-3.14-Wheels für Linux, macOS und Windows, bis deren Veröffentlichung führt der Weg zu DART 7 über den Quell-Checkout mit pixi run build, gestartet mit PYTHONPATH=build/default/cpp/Release/python.
Installation über pixi, conda und Systempakete
Für die stabile Linie sind die Wege kurz: pixi add dartpy für das pixi-Ökosystem oder conda install -c conda-forge dartpy für conda beziehen die DART-6-Version von conda-forge. Auf der C++-Seite empfehlen sich pixi add dartsim-cpp oder conda install -c conda-forge dartsim-cpp plattformübergreifend; daneben gibt es sudo apt install libdart-all-dev für Ubuntu, yay -S libdart für Arch Linux, pkg install dartsim für FreeBSD, brew install dartsim für macOS und vcpkg install dartsim:x64-windows für Windows.
Zur Selbstprüfung liefert das README Rauch-Tests, die kleine Modelle im Code erzeugen und daher keine Beispieldateien brauchen. Nach pixi install prüft etwa der Befehl pixi run py-demos -- --scene rigid_body --headless --frames 1 die DART-7-Demo-Oberfläche, und pixi run py-demo-capture -- --scene rigid_solver_compare zeichnet visuelle Belege des Löservergleichs auf.
BSD-2-Clause: wenige Hürden für Forschung und Produktion
Lizenziert ist DART unter BSD-2-Clause. Diese Lizenz erlaubt Weiterverbreitung in Quell- und Binärform, solange der Urheberrechtshinweis und der Haftungsausschluss erhalten bleiben, auch in proprietären Produkten. Für Labor- und Industriekooperationen bedeutet das kaum Reibung, der einzige Auftrag ist die Bewahrung der Hinweise.
Wie üblich bei BSD-2-Clause lehnt der Text alle Gewährleistung ab, einschließlich Handelsüblichkeit und Eignung für einen bestimmten Zweck. Kombiniert mit dem README-Hinweis, dass DART 7 noch nicht produktionsreif ist, ergibt sich ein klares Bild: Nutzen und Anpassung sind rechtlich unkompliziert, die Verantwortung für Stabilität und Messwerte trägt die einsetzende Stelle selbst.
Redaktionelles Fazit
DART eignet sich für Forschende, die eine Physik-Engine mit zugänglichen Dynamikgrößen, einheitlichem Modellladen und Python-Bindungen suchen und bereit sind, im Code nachzulesen. Für Produktivsysteme weist das README den main-Zweig mit DART 7 ausdrücklich als nicht produktionsreif aus; dort sollte die stabile DART-6-LTS-Linie über pixi add dartpy oder conda install -c conda-forge dartpy bezogen werden.
Community-Notizen