bullet3
工业级开源物理仿真引擎,支持刚体碰撞、软体变形、关节约束,广泛用于机器人与强化学习研究
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
工业级开源物理仿真引擎,支持刚体碰撞、软体变形、关节约束,广泛用于机器人与强化学习研究
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图1:PyBullet 官方 Logo
想象一下:你正在开发一款机器人模拟器,需要让机械臂准确地抓取物体——这意味着你要计算碰撞、摩擦、重力、关节约束等几十种物理参数。Bullet Physics 就是解决这个问题的工业级工具。
Bullet Physics SDK 是由 Erwin Coumans(曾任职于索尼、杨百翰大学研究实验室)主导开发的开源物理仿真引擎,2011年正式开源,至今已积累 14,500+ GitHub Stars,是物理仿真领域最具影响力的项目之一。
Bullet 最初的设计目标是服务于游戏和视觉特效领域。物理引擎的原理并不复杂:它将现实世界中的刚体(rigid body)、软体(soft body)、布料等抽象为数学模型,通过数值积分方法(如 Verlet 积分)逐帧计算位置和姿态变化。
但真正让 Bullet 在 AI 时代焕发新生的,是 PyBullet 的出现。2016 年开始,Bullet 团队为 Python 生态提供了官方绑定,使得研究人员可以用 Python 操控底层物理引擎进行机器人控制、强化学习(RL)等前沿研究。
图2:Bullet3 的 URDF 机器人模型支持,可直接加载真实机器人描述文件
Bullet 提供了业界最完整的碰撞检测算法套件:
| 算法 | 适用场景 | 特点 |
|---|---|---|
| GJK/EPA | 凸多面体碰撞 | 高效,适用于大多数刚体 |
| SAT (Separating Axis Theorem) | 盒、球、胶囊等 | 支持任意凸/凹形状 |
| BVH (Bounding Volume Hierarchy) | 大量物体 | 空间分区剪枝,O(log n) |
| SDP (Soft Dynamics) | 软体变形 | 粒子弹簧系统 |
这些算法被封装在 src/BulletCollision 模块中,经过十多年工业场景验证,稳定性极高。
Bullet 的求解器支持多种约束类型:
对于机器学习和机器人研究者来说,PyBullet 是最推荐的使用方式。通过 pip 安装后,3行代码即可开始仿真:
import pybullet as p
import pybullet_data
client = p.connect(p.GUI) # 图形界面
p.setAdditionalSearchPath(pybullet_data.getDataPath())
p.loadURDF("plane.urdf") # 加载地面
PyBullet 还内置了 OpenAI Gym 风格的 RL 环境接口,如 AntBulletEnv、HumanoidFlagrunHarderBulletEnv 等,是强化学习研究中使用最广泛的物理仿真后端之一。
Bullet3 支持将整个物理计算管线迁移到 GPU:
pip install pybullet
python -m pybullet_envs.examples.enjoy_TF_AntBulletEnv_v0_2017may
一行命令启动一个四足机器人(Ant)的 RL 训练环境,无需编译。
Bullet 使用 CMake 构建系统,支持所有主流平台:
git clone https://github.com/bulletphysics/bullet3.git
cd bullet3
mkdir build && cd build
cmake .. -DBUILD_SHARED_LIBS=ON
make -j$(nproc)
编译产物:
libBulletDynamics.so — 动力学求解器libBulletCollision.so — 碰撞检测libBulletSoftBody.so — 软体仿真libLinearMath.so — 线性代数工具| 项目 | 需求 |
|---|---|
| CPU | 任意 x86_64,推荐 4+ 核 |
| 内存 | 4GB+(大规模场景需 8GB+) |
| GPU | 可选(仅 OpenCL 加速时需要) |
| 磁盘 | 源码 300MB,编译后 ~2GB |
不支持。Bullet 是一款纯 C++/Python 库,没有内置 Web 界面。图形界面通过 OpenGL 渲染(p.GUI 模式),无 Web 版本。
Bullet 被广泛用于机器人运动规划和控制研究。MIT、Stanford 等顶尖高校的机器人实验室都使用 PyBullet 进行算法验证。著名的 DeepMind Control Suite 和 OpenAI Robotics 基准测试都基于 PyBullet 构建。
Bullet 最初的服务对象。包括 Unity、Unreal Engine(通过插件集成)在内的主流游戏引擎都支持 Bullet 物理后端。《刺客信条》《神秘海域》等 3A 游戏都曾使用过 Bullet 的物理技术。
PyBullet 是 Isaac Gym(NVIDIA)出现之前最流行的 RL 物理仿真后端。由于其开源、免费、对 GPU 要求低的特点,许多中小型研究团队使用 PyBullet 进行机器人 locomotion(运动)策略的训练。
部分自动驾驶研究团队将 Bullet 用于简单的车辆动力学仿真(替代 CARLA 等重型仿真器),用于快速验证感知-规划-控制链路。
Bullet3 的代码组织遵循清晰的模块化结构:
src/
├── BulletCollision/ # 碰撞检测核心
├── BulletDynamics/ # 刚体动力学求解器
├── BulletSoftBody/ # 软体仿真
├── BulletWorldImporter/ # 文件格式加载 (URDF/SDF/MJCF)
├── LinearMath/ # 向量/矩阵/四元数数学库
└── ExampleBrowser/ # 图形化示例浏览器
整个项目约 30 万行 C++ 代码,代码质量高,有完整的 Doxygen 文档,但学习曲线较陡——主要因为物理引擎涉及大量专业数学知识(刚体力学、计算几何)。
Bullet 使用 semi-implicit Euler 积分,精度低于精确求解器(如 Mujoco 的Featherstone 算法),但速度更快。对于需要物理精度保证的研究(如精确的动力学分析),Bullet 不适用。
OpenCL 分支维护状态不稳定,部分 GPU 型号会出现内核编译失败。NVIDIA 官方支持不如 AMD 完善。
官方文档主要依赖 Doxygen 生成的 API 文档和 Google Docs 格式的 Wiki,缺少系统性的教程体系。新人上手需要大量阅读源码注释。
Bullet Physics 的价值在于它填补了「免费开源」和「工业级物理仿真」之间的空白。在它出现之前,高质量物理引擎要么是昂贵的商业产品(如 PhysX、Havok),要么是学术研究代码(不够稳定)。
Bullet 用十年时间证明:开源社区可以维护一个达到工业标准的物理引擎。如今它已是机器人学和强化学习领域的"基础设施"——无数 Paper 的实验都是在 PyBullet 环境中完成的,这个影响力不容小觑。
从 stars 增长曲线看,Bullet 并没有因为"年代久远"而衰退,反而在 2022 年 ChatGPT 引发 AI 热潮后再次受到关注(机器人+AI 的结合让它重新进入主流视野),体现了经典基础设施项目的持久生命力。