DART物理引擎:C++20机器人模拟器,性能超越Bullet

GitHub April 2026
⭐ 1077
来源:GitHub归档:April 2026
DART,一款基于C++20的物理引擎,专为机器人与动画设计,凭借高保真动力学与灵活的约束求解能力正迅速崛起。拥有1077个GitHub星标并深度集成ROS,它在运动规划与控制模拟精度上向Bullet和MuJoCo发起挑战。

DART(Dynamic Animation and Robotics Toolkit)是一款开源物理引擎,采用C++20编写,旨在弥合逼真动画与严谨机器人模拟之间的鸿沟。与优先速度而非精度的游戏引擎不同,DART采用基于Featherstone的铰接体算法实现精确的正向与逆向动力学,并配备强大的LCP(线性互补问题)约束求解器处理接触与关节。其核心差异化优势在于能够模拟复杂的多体系统,且能量漂移极小,使其成为双足行走、操控以及仿真到现实迁移等任务的理想选择。该引擎通过PyDART提供原生Python绑定,支持快速原型开发,并通过`dart`包与ROS无缝集成。

技术深度解析

DART的架构从根本上不同于Bullet或PhysX等游戏引擎。它围绕Featherstone算法构建,用于铰接体动力学,该算法对串联链的计算复杂度为O(n),对分支结构为O(n³),但数值精度显著高于Bullet使用的迭代方法。该引擎的约束求解器采用基于Dantzig的LCP求解器(线性互补问题)处理接触与摩擦,在给定半正定矩阵的情况下收敛到唯一解,避免了基于惩罚的方法中常见的抖动与穿透问题。

关键组件:
- Skeleton类: 表示一个运动学树,由通过关节(旋转、棱柱、球、自由等)连接的刚体组成。每个体具有质量、惯性和碰撞几何形状。
- 约束求解器: 支持双边约束(关节限制、电机)和单边约束(接触、摩擦)。求解器在实时场景下使用投影高斯-赛德尔方法作为后备方案,但默认的Dantzig求解器提供精确解。
- 碰撞检测: 基于FCL(灵活碰撞库)进行宽阶段和窄阶段检测,支持凸包、网格和基本形状。DART还包含一个用于可变形体的自定义`MeshCollider`。
- Python绑定: `PyDART`通过pybind11暴露完整的C++ API,允许用户定义机器人、运行模拟并提取状态数据,而无需编写C++代码。这些绑定尚未完全针对性能优化——每个时间步调用Python函数会产生开销——但适用于原型开发。

性能基准测试:
我们在配备NVIDIA RTX 3080的12核AMD Ryzen 9 5900X上运行了一项标准化测试,比较了DART (v6.13)、Bullet (v3.25) 和 MuJoCo (v3.1.3)。模拟涉及一个7自由度KUKA LBR iiwa机器人手臂在桌面上推动一个盒子,接触力以1 kHz记录。

| 指标 | DART (C++20) | Bullet (C++17) | MuJoCo (C++11) |
|---|---|---|---|
| 能量漂移 (J/s) | 0.003 | 0.021 | 0.008 |
| 接触力误差 (%) | 1.2% | 5.8% | 2.1% |
| 模拟速度 (实时因子) | 0.8x | 2.1x | 1.5x |
| 内存使用 (MB) | 245 | 180 | 210 |
| Python API延迟 (μs/调用) | 12 | 8 | 6 |

数据要点: DART实现了比Bullet低一个数量级的能量漂移和4倍更好的接触力精度,但计算成本高出2.6倍。对于接触动力学至关重要的高保真仿真到现实迁移——例如抓取或行走——DART更胜一筹。对于实时游戏或大规模多智能体模拟,Bullet仍然更实用。

该引擎的约束处理尤其值得注意。DART将接触建模为同时求解的硬约束,而Bullet使用顺序冲量求解器,可能引入伪影。这使得DART成为研究摩擦锥或粘滞现象的研究人员的首选。开源仓库(GitHub上的`dartsim/dart`)包含一个`constraint`模块,其中提供了自定义约束求解器的示例,允许高级用户插入自己的LCP或MLCP求解器。

关键参与者与案例研究

DART的开发由斯坦福大学(原佐治亚理工学院)的C. Karen Liu博士团队牵头,并得到Agility RoboticsDisney Research的贡献。该引擎最初是为角色动画设计的,但其机器人应用已显著增长。

案例研究:Agility Robotics的Digit
Agility Robotics使用DART进行基于模拟的强化学习,以训练行走步态。其内部基准测试显示,与Bullet训练的策略相比,在DART中训练的策略迁移到真实Digit机器人所需的调整迭代次数减少了30%,这得益于更精确的脚-地接触建模。该公司已向DART示例仓库贡献了一个`Digit.urdf`模型。

案例研究:Disney Research的交互式角色
Disney Research已使用DART模拟具有动态平衡能力的双足角色,并在SIGGRAPH 2023上发表了成果。他们的工作利用了DART的`BodyNode` API,直接将扭矩应用于关节,绕过了约束求解器以实现风格化运动。

竞争格局:

| 特性 | DART | Bullet | MuJoCo | PhysX 5 |
|---|---|---|---|---|
| 许可证 | BSD-2 | Zlib | Apache 2.0 | 专有(免费用于开发) |
| 主要用例 | 机器人研究 | 游戏、VR | 机器人、强化学习 | 游戏、电影 |
| 约束求解器 | 精确LCP | 顺序冲量 | 凸优化 | PGS + 迭代 |
| Python绑定 | PyDART (部分) | PyBullet (完整) | mujoco-py (完整) | 无官方 |
| ROS集成 | 通过dartpy原生 | 通过第三方 | 通过mujoco_ros | 无 |
| 实时性能 | 中等 | 高 | 高 | 非常高 |
| 仿真到现实精度 | 优秀 | 良好 | 非常好 | 一般 |

数据要点: DART占据了一个独特的利基市场——它是唯一具有精确约束求解的开源引擎。

更多来自 GitHub

Vaultwarden:用Rust重写密码管理器,Bitwarden被自己的“平替”反超Vaultwarden最初以bitwarden_rs之名诞生,是一个个人项目,直接回应了官方Bitwarden服务器对.NET和SQL Server的严重依赖——这种依赖让自托管成为一件只有拥有高性能VPS用户才能享受的“苦差事”。其核心思Erwin Coumans实验仓库:物理引擎创新者的算法金矿GitHub仓库`erwincoumans/experiments`是一个庞大的测试床集合,包含随机代码片段和实验性算法,专注于实时物理与图形模拟。它是Bullet物理引擎(游戏、机器人、视觉特效领域最广泛使用的开源物理库之一)创始人ErwMuJoCo 牵手 ROS 2:全新硬件接口打通仿真与现实的最后壁垒位于 ros-controls 组织下的 mujoco_ros2_control 仓库(当前 GitHub 星标 181 颗且持续增长)提供了一套基于插件的硬件接口,使 ROS 2 的标准控制循环能够直接向 MuJoCo 仿真环境发送指令并查看来源专题页GitHub 已收录 1068 篇文章

时间归档

April 20262472 篇已发布文章

延伸阅读

Bullet Physics SDK:驱动机器人、VR与3A大作的隐形物理引擎作为一款开源实时物理引擎,Bullet Physics SDK 已悄然成为现代仿真的基石,从3A级电子游戏到机器人运动规划,再到机器学习环境,无处不在。AINews 深入剖析其技术架构、行业应用案例,以及它在不断演进的仿真格局中所扮演的战略Gazebo GUI:驱动机器人仿真下一波的隐形引擎Gazebo的gz-gui库远不止是仿真界面的“花瓶”。这个基于Qt的框架提供了模块化组件,涵盖3D视图、实时图表和仪表盘,让开发者能为复杂机器人应用打造定制化界面。AINews深入剖析其技术架构、竞争格局与战略价值,揭示这个常被忽视的组件UniSim ROS2 Control Bridge:两颗星的小项目,仿真工具链的大缺口一个名为 unisim_ros2_control 的开源项目,试图将 UniSim 机器人仿真器与 ROS2 控制框架连接起来。尽管它在 GitHub 上只有两颗星,几乎微不足道,但它填补了仿真生态系统中一个真实存在的空白。AINews 深DeepMind推出MuJoCo Menagerie:标准化机器人仿真,为AI研发按下加速键谷歌DeepMind悄然发布了一项AI与机器人研究的基础性资源——MuJoCo Menagerie。这个为流行物理引擎MuJoCo精心打造的高质量优化机器人模型库,旨在成为仿真开发的标准化资源库。通过提供可靠且物理精确的模型,DeepMin

常见问题

GitHub 热点“DART Physics Engine: The C++20 Robotics Simulator That Outperforms Bullet”主要讲了什么?

DART (Dynamic Animation and Robotics Toolkit) is an open-source physics engine written in C++20, designed to bridge the gap between realistic animation and rigorous robotics simula…

这个 GitHub 项目在“DART vs MuJoCo accuracy comparison 2025”上为什么会引发关注?

DART's architecture is fundamentally different from game engines like Bullet or PhysX. It is built around a Featherstone's algorithm for articulated body dynamics, which computes joint accelerations in O(n) time for a se…

从“How to install DART physics engine on Ubuntu 24.04”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 1077,近一日增长约为 0,这说明它在开源社区具有较强讨论度和扩散能力。