gym-pybullet-drones
PyBullet 物理引擎驱动的四轴无人机强化学习仿真环境,支持 Sim-to-Real 迁移
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
PyBullet 物理引擎驱动的四轴无人机强化学习仿真环境,支持 Sim-to-Real 迁移
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下这样的场景:你想训练一架四轴无人机学会自主悬停,但每次真机试飞都要冒着「炸机」风险——电机失控、螺旋桨断裂、电池脱落,真实硬件的试错成本极高。怎么办?
gym-pybullet-drones 给出了一种优雅的解法:用 PyBullet 物理引擎在电脑上高保真仿真四轴无人机的飞行力学,让研究者在家用电脑上就能训练强化学习策略,再用仿真好的策略去控制真机——这个过程叫「Sim-to-Real」,即从仿真到真实的迁移。

图1:多无人机协同编队飞行演示
这个项目诞生于多伦多大学,由该校研究团队(LearnSyS Lab)开发,2021 年发表在机器人领域顶级会议 IROS 上。论文标题直白却有力:《Learning to Fly》——让机器学会飞行。
最初的动机很朴素:当时主流的四轴无人机仿真环境要么依赖 ROS(机器人操作系统)的重型生态,要么使用商业闭源仿真器,入门门槛极高。研究者需要一个开箱即用、轻量级、兼容 OpenAI Gym 标准的仿真工具。
经过多年迭代,项目已演进出两条分支:
main 分支(当前活跃维护):重构为 Gymnasium(新一代 Gym)兼容版本,支持 stable-baselines3 2.0,适配 Betaflight/Crazyflie 固件 SITL(软件在环仿真)。paper / master 分支:保留 IROS 2021 原始论文代码,适合复现学术实验。2026 年,gym-pybullet-drones 获得了 GitHub Maintainer Spotlight 2026 荣誉,成为官方推荐的学术开源项目典范——这对一个源于课堂项目的代码库来说,是极高的认可。
项目的代码结构清晰,分为三个层次,覆盖从经典控制到强化学习的完整研究流程。
BaseAviary 是所有仿真环境的基类,内部封装了 PyBullet 物理引擎,管理无人机的物理参数(质量、惯性矩阵、螺旋桨推力系数等)和仿真步长。每个具体环境继承这个基类,叠加不同的任务目标:
| 环境类 | 仿真机型 | 核心功能 |
|---|---|---|
| HoverAviary | 多旋翼 | 定点悬停任务 |
| VelocityAviary | 多旋翼 | 速度跟踪控制 |
| CtrlAviary | 多旋翼 | 自定义轨迹跟踪 |
| MultiHoverAviary | 多机 | 协同悬停(MARL) |
| BetaAviary | Betaflight SITL | 真实飞控固件在环仿真 |
| CFAviary | Crazyflie 2.x | Bitcraze 飞控固件在环仿真 |
每种机型对应一个 URDF(统一机器人描述格式)文件,定义了无人机的物理几何结构。例如 cf2x.urdf 是 Crazyflie 2.x 的扩展版本,racer.urdf 则模拟竞速穿越机。
控制层负责将高层指令转换为电机 PWM 信号,包含多种控制策略:
对于普通用户,最简单的方式是直接运行 pid.py,几行代码就能让无人机悬停在指定高度。
BaseRLAviary 将仿真环境封装为 Gymnasium 标准的 RL 接口(obs / action / reward / done 四元组),直接兼容 stable-baselines3(SB3)的所有算法。最常用的是 PPO(Proximal Policy Optimization)——learn.py 示例展示了单智能体和多智能体两种训练模式:
# 单机悬停
python learn.py
# 多机协同(2 架无人机悬停在不同高度)
python learn.py --multiagent true
训练完成后,用 play.py 回放最优策略并可视化仿真结果。

图2:PPO 算法训练的单机悬停策略可视化

图3:多智能体协同悬停(MARL)训练过程
PyBullet 是 Bullet 物理引擎的 Python 绑定,与 MuJoCo 相比完全开源、社区活跃,无需商业授权。PyBullet 内置的碰撞检测、关节约束和刚体动力学,直接支撑了无人机仿真所需的飞行动力学建模。项目中还模拟了下洗效应(downwash)——无人机螺旋桨下方的气流会干扰下方无人机的飞行,这是真实飞行中多机协同必须考虑的因素,downwash.py 示例专门演示了这个现象。
这是 gym-pybullet-drones 最具特色的能力。大多数仿真环境用软件模拟飞行控制器,而该项目支持直接接入真实飞控固件:
pycffirmware Python 绑定,可在 Windows/macOS/Linux 全平台运行,无需 Ubuntu。这种设计让研究者可以在电脑上开发控制算法,然后零修改迁移到真实无人机——这也是项目在学术圈广泛被引用的原因之一。
MultiHoverAviary 支持多架无人机协同任务,示例中的 learn.py --multiagent true 训练 2 架无人机在各自目标高度悬停。底层实现中每个 agent 有独立的观测空间和动作空间,通过 SB3 的多环境并行机制实现高效训练。
安装过程非常标准化:conda create -n drones python=3.10 创建环境,pip install -e . 即可完成。依赖项经过精心控制:pybullet、gymnasium(标准 RL 接口)、stable-baselines3(主流 RL 算法库)、numpy/scipy/matplotlib(数值计算与可视化)。没有引入 ROS 这样的重型依赖,一台普通笔记本即可运行。
硬件需求:纯 CPU 仿真,不需要 GPU。RAM 4GB、磁盘 2GB 足够。官方测试环境为 Ubuntu 22.04 和 macOS 26.2,覆盖主流研究平台。
# PID 控制演示(静态悬停)
python3 pid.py
# PID 速度跟踪
python3 pid_velocity.py
# 下洗效应物理演示
python3 downwash.py
# PPO 强化学习训练(单机)
python learn.py
# 多智能体训练
python learn.py --multiagent true
# 回放训练结果
LATEST_MODEL=$(ls -t results | head -n 1)
python play.py --model_path "results/${LATEST_MODEL}/best_model.zip"
测试套件由 pytest 驱动:pytest tests/ 覆盖构建验证和示例脚本。
| 层次 | 技术 |
|---|---|
| 物理引擎 | PyBullet 3.2.7 |
| RL 接口 | Gymnasium 1.2(OpenAI Gym 的社区继任者) |
| RL 算法 | Stable-Baselines3 2.8(PPO、SAC、TD3 等主流算法) |
| 科学计算 | NumPy 2.2, SciPy 1.15, Matplotlib 3.10 |
| 控制理论 | python-control 0.10.2(状态空间分析、系统辨识) |
| 数据格式 | URDF(机器人描述)、CSV(轨迹数据) |
| 固件在环 | Betaflight SITL、Crazyflie pycffirmware |
| 构建工具 | Poetry(依赖管理与打包) |
| 测试 | pytest 9.0 |
无 Docker 支持:项目没有提供 Dockerfile 或 docker-compose,依赖 conda/pip 本地安装。对于需要完全隔离环境的研究者,这是明显的不足。
无 Web UI:这是一个纯命令行/CUI 工具,没有可视化配置界面。仿真结果通过 Matplotlib 或 pybullet 内置的 GUI 窗口查看,交互体验不如 Web 界面友好。
PyBullet vs MuJoCo:PyBullet 的接触力学精度略低于 MuJoCo,对于需要精确碰撞建模的场景(如无人机穿过障碍物),可能需要额外的参数调优。
仅支持四轴飞行器:项目目前聚焦多旋翼构型,固定翼、直升机、VTOL 等其他无人机类型不在支持范围内。
强化学习算法有限:虽然支持 SB3 的所有算法,但项目内置示例仅包含 PPO。如需使用 SAC、TD3、DDPG 等 off-policy 算法,需要自行编写训练脚本。
gym-pybullet-drones 的增长曲线折射出一个更宏观的趋势:仿真平台正在成为机器人 AI 研究的基础设施。
2021 年项目发布时,强化学习在机器人控制领域的应用还处于早期探索阶段,主流方法仍是手工设计控制器。近几年随着 PPO、SAC 等算法的成熟,加上算力成本下降,越来越多的研究者开始用 RL 训练飞行策略。gym-pybullet-drones 恰好填补了「轻量级、易上手、真实物理」这个三者交集的需求空白。
其 2045 star、541 fork、111 个 open issues 的社区规模,说明项目已经获得了稳定的研究用户群体。更重要的是,Betaflight SITL 和 Crazyflie pycffirmware 这两座 Sim-to-Real 桥梁,让仿真中训练好的策略真正落地到真实飞行成为可能——这正是工业界和学术界最关心的最后一公里问题。
该项目入选 GitHub Maintainer Spotlight 2026,也代表开源社区对「学术成果工程化」努力的认可:从一篇 IROS 论文到一个持续活跃维护的代码库,背后的维护成本(响应 issue、review PR、保持依赖更新)远超大多数人的想象。
总结一句话:如果你想研究四轴无人机的强化学习控制,或需要 Sim-to-Real 仿真平台,gym-pybullet-drones 是目前门槛最低、保真度最高的开源选择之一。