dart
基于 Featherstone 铰接体算法的研究级机器人物理仿真引擎,支持透明刚体动力学与多格式模型
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于 Featherstone 铰接体算法的研究级机器人物理仿真引擎,支持透明刚体动力学与多格式模型
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:DART(Dynamic Animation and Robotics Toolkit)项目标识
想象你正在开发一个人形机器人步态控制算法。在实机上测试?成本高昂、周期漫长。你转向仿真工具,却发现主流仿真器像个「黑箱」——姿态数据进去、运动轨迹出来,但中间发生了什么,力矩怎么分配的、约束怎么施加的,统统不透明。
这就是 DART 要解决的问题。
DART 起源于 2011 年的佐治亚理工学院,由 C. Karen Liu 和 Mike Stilman 等学者在图形实验室(Graphics Lab)和人形机器人实验室(Humanoid Robotics Lab)发起。项目的初衷很简单:为机器人研究和计算机动画提供一个研究级的物理仿真基础设施,而不是一个面向终端用户的完整产品。
经过十余年发展,DART 已成为机器人仿真领域的重要基础工具,支撑着 Gazebo 仿真平台,被 MIT、Stanford、CMU 等顶尖院校的人形机器人实验室广泛采用。目前项目由 Jeongseok Lee 主导开发,正在推进 DART 7 的发布,采用 C++23 标准并重构了 Python API。
DART 的核心是** Featherstone 的铰接体算法(Articulated Body Algorithm)**,这是刚体动力学领域最经典、最精确的多体动力学计算方法。相比于其他仿真器(如 MuJoCo、Bullet)使用的递归牛顿-欧拉法,Featherstone 算法在处理长链机构(如机械臂、人形机器人)时具有数值稳定性和计算效率优势。
更重要的是,DART 基于**广义坐标(Generalized Coordinates)**建模,而不是简化的笛卡尔坐标。这意味着:
打个比方:主流仿真器像是自动挡汽车,你给油门它加速;而 DART 是手动挡——发动机、变速箱、差速器全都拆开摆在你面前,你可以单独调校每一个零件。
DART 的源码目录结构清晰,体现了高度模块化的设计思想:
| 模块 | 功能 |
|---|---|
| dynamics | 核心刚体动力学,Skeleton/BodyNode/Joint 层级结构 |
| collision | 原生碰撞检测 + FCL/Bullet/ODE 兼容层 |
| constraint | 约束求解器(Contact, Ball, Hinge, Prismatic 等) |
| simulation | 物理世界步进控制 |
| math | 李群/李代数(Lie Group/Algebra)数学库 |
| gui | Filament 渲染引擎 + GLFW3 窗口 + Dear ImGui 界面 |
| utils | SDF/URDF 模型加载,SKEL 原生格式 |
| sensor | 力矩传感器、接触力、惯性测量单元仿真 |
特别值得提的是 math 模块中的李群实现。在机器人学中,SO(3)(旋转群)和 SE(3)(欧氏群)是描述刚体姿态的数学基础。DART 内置了完整的李群/李代数实现,无需依赖外部数学库,这对于需要精确姿态表达的人形机器人仿真至关重要。
DART 支持四种主流机器人描述格式的加载:
这意味着你可以把在其他仿真环境中定义好的机器人模型直接迁移到 DART 中,无需重新建模。
虽然核心是 C++,但 DART 提供了高质量的 Python 绑定 dartpy,通过 nanobind 实现。以下是典型使用流程:
import dartpy as dart
# 创建物理世界
world = dart.World()
# 从 URDF 加载机器人
urdf = dart.io.UrdfParser()
robot = urdf.parse_skeleton("dart://sample/urdf/KR5/KR5_sixx_R650.urdf")
world.add_skeleton(robot)
# 步进仿真
for _ in range(100):
world.step()
print(f"关节位置: {robot.get_positions()}")
dartpy 支持 uv、pip、pixi、conda 等多种安装方式,一条命令即可完成部署。对于快速验证算法思路、做原型开发,Python 接口完全够用。
图2:宇树 G1 人形机器人在 DART 中的仿真效果(支持 ROS 生态)
DART 目前处于 DART 7 冲刺开发阶段,源码仓库在 2026 年 6 月 15 日仍有活跃提交。部署方面有以下特点:
dartsim-cpp 和 dartpy,pip 上有 dartpy,这是最省心的方式pixi 工具链管理从源码编译推荐路径:
# 安装 pixi(Rust 编写的包管理/构建工具)
curl -fsSL https://pixi.sh/install.sh | bash
# 克隆并构建 DART
git clone https://github.com/dartsim/dart.git
cd dart
pixi run build
DART 在 GitHub 拥有 1,110 Stars、300 Forks,对于一个专注于学术/研究场景的工具来说,这个数字相当可观。项目在机器人学社区有稳定的受众,尤其是在需要透明动力学、逆动力学分析、约束优化的研究场景中,DART 是不可替代的选择。
DART 的增长动力来自三个方向:
值得注意的是,DART 正在路线图中规划多核 CPU、SIMD 矢量化以及加速器(GPU/NPU)后端支持,这将大幅提升大规模场景的仿真吞吐量。
| 场景 | 推荐程度 | 原因 |
|---|---|---|
| 人形机器人步态研究 | ⭐⭐⭐⭐⭐ | Featherstone 算法 + 广义坐标,精度最高 |
| 逆动力学/逆运动学分析 | ⭐⭐⭐⭐⭐ | 动力学量完全透明可访问 |
| 强化学习仿真环境 | ⭐⭐⭐⭐ | 透明物理 + Python 接口,但缺少 Gymnasium 官方 wrapper |
| 计算机动画 | ⭐⭐⭐ | 精度足够,但生态不如 Bullet/MuJoCo 丰富 |
| 工业机械臂仿真 | ⭐⭐⭐ | 精度好,但 ROS/MoveIt 集成深度不如 Gazebo |
DART 是一个为研究者打造的精密仪器,而非面向终端用户的开箱即用产品。如果你需要一台透明的物理引擎,想要直接操控每一个动力学参数,它是最优选择。如果你要的是零门槛快速仿真,或许 Bullet 或 MuJoCo 更适合你。
图3:DART 项目维护组织 dartsim 的开源形象