DART
Motore fisico C++ per la dinamica di corpi rigidi articolati e la simulazione robotica
Licenza
BSD-2-Clause
Panoramica
DART (Dynamic Animation and Robotics Toolkit) è un motore fisico in C++20 per simulare la dinamica di corpi rigidi articolati con una gestione dei contatti basata su vincoli. Sviluppato al Georgia Tech, fornisce cinematica diretta/inversa, dinamica diretta, calcolo del jacobiano e rilevamento delle collisioni. A differenza di simulatori paralleli su GPU come Isaac Gym o MJX di MuJoCo, DART punta sull'accuratezza matematica nella simulazione di corpi articolati, con supporto ai formati URDF, SDF e MJCF. Include binding Python (dartpy) e si integra con Gazebo.
DART (Dynamic Animation and Robotics Toolkit) è un motore fisico open source in C++20 sviluppato al Georgia Tech che fornisce strutture dati e algoritmi per la simulazione cinematica e dinamica di sistemi di corpi rigidi articolati. Usa coordinate generalizzate e l'Articulated Body Algorithm di Featherstone per offrire l'accuratezza numerica e la stabilità richieste dalle applicazioni robotiche.
Una caratteristica distintiva di DART è il supporto unificato a tutti i principali formati di descrizione dei robot (URDF, SDF, MJCF e il proprio formato SKEL) tramite un'unica API. Integra più backend di rilevamento delle collisioni (FCL, Bullet, ODE) e risolve i vincoli di contatto, i limiti dei giunti e i meccanismi a catena chiusa in un framework accoppiato di dinamica vincolata. I binding Python (dartpy) sono disponibili tramite PyPI e conda.
Con oltre 14 anni di sviluppo continuo e più di 500 commit all'anno, DART è uno dei motori fisici più attivamente mantenuti in robotica. Alimenta il backend fisico DART del simulatore Gazebo ed è usato nei laboratori di ricerca di tutto il mondo per lo sviluppo di algoritmi di controllo, la pianificazione del movimento e l'animazione al computer.
Perché è importante
DART è da oltre 14 anni un motore fisico cardine della simulazione robotica: alimenta il simulatore Gazebo e numerosi laboratori di ricerca in tutto il mondo. L'uso di coordinate generalizzate con l'Articulated Body Algorithm di Featherstone fornisce l'accuratezza e la stabilità richieste dalle applicazioni robotiche, mentre il supporto a più formati (URDF, SDF, MJCF) lo rende eccezionalmente versatile.
Il problema che risolve
La simulazione robotica richiede un motore fisico che gestisca correttamente la dinamica dei corpi articolati, i vincoli dei giunti, i contatti e le collisioni con un'alta accuratezza numerica. DART fornisce questa base con un'API pulita che supporta il caricamento di modelli di robot da tutti i principali formati, l'inserimento di più backend di rilevamento delle collisioni e il calcolo di una dinamica adatta sia allo sviluppo di algoritmi di controllo sia all'animazione al computer.
Punti chiave
- Usa l'Articulated Body Algorithm di Featherstone su coordinate generalizzate per una dinamica accurata
- Carica i formati di descrizione dei robot URDF, SDF, MJCF e SKEL tramite un'API unificata
- Più backend di rilevamento delle collisioni, tra cui FCL, Bullet e ODE
- Il risolutore di dinamica vincolata gestisce insieme limiti dei giunti, contatti e meccanismi a catena chiusa
- Multipiattaforma (Linux, macOS, Windows), con binding Python tramite dartpy su PyPI e conda
A chi si rivolge
- Ricercatori di robotica che sviluppano e testano algoritmi di controllo in simulazione
- Utenti di Gazebo che hanno bisogno di capire o personalizzare il motore fisico sottostante
- Sviluppatori di animazione al computer che richiedono una simulazione fisicamente accurata di corpi articolati
- Professionisti dell'apprendimento per rinforzo che hanno bisogno di un backend di simulazione stabile
Limiti
- Meno usato nella ricerca sull'RL rispetto a MuJoCo o Isaac Sim, nonostante capacità paragonabili
- La simulazione accelerata da GPU non è al momento una priorità: gira su CPU
- Il requisito di C++20 può essere restrittivo per progetti vincolati a versioni più vecchie del compilatore
- Comunità più piccola e meno ambienti pronti rispetto a MuJoCo o PyBullet