gym-pybullet-drones
这是对原始 gym-pybullet-drones
仓库的一个极简重构,旨在与 gymnasium
、stable-baselines3
2.0 和 SITL betaflight
/crazyflie-firmware
兼容。
注意:如果您更喜欢访问原始代码库(在2021年IROS会议上展示),请在克隆仓库后执行
git checkout [paper|master]
,并参考相应的README.md
文件。
安装
在 Intel x64/Ubuntu 22.04 和 Apple Silicon/macOS 14.1 上测试通过。
git clone https://github.com/utiasDSL/gym-pybullet-drones.git
cd gym-pybullet-drones/
conda create -n drones python=3.10
conda activate drones
pip3 install --upgrade pip
pip3 install -e . # 如果需要,执行 `sudo apt install build-essential` 以安装 `gcc` 并构建 `pybullet`
使用
PID控制示例
cd gym_pybullet_drones/examples/
python3 pid.py # 位置和速度参考
python3 pid_velocity.py # 期望速度参考
下洗效应示例
cd gym_pybullet_drones/examples/
python3 downwash.py
强化学习示例(SB3的PPO)
cd gym_pybullet_drones/examples/
python learn.py # 任务:单架无人机悬停在 z == 1.0
python learn.py --multiagent true # 任务:2架无人机分别悬停在 z == 1.2 和 0.7
utiasDSL pycffirmware
Python绑定示例(跨平台,单无人机)
为Ubuntu、macOS或Windows安装 pycffirmware
cd gym_pybullet_drones/examples/
python3 cff-dsl.py
Betaflight SITL示例(仅限Ubuntu)
git clone https://github.com/betaflight/betaflight # 使用撰写时的 `master` 分支(未来4.5版本)
cd betaflight/
make arm_sdk_install # 如果需要,执行 `apt install curl`
make TARGET=SITL # 注释掉这一行:https://github.com/betaflight/betaflight/blob/master/src/main/main.c#L52
cp ~/gym-pybullet-drones/gym_pybullet_drones/assets/eeprom.bin ~/betaflight/ # 假设 gym-pybullet-drones/ 和 betaflight/ 都克隆在 ~/ 目录下
betaflight/obj/main/betaflight_SITL.elf
在另一个终端中运行示例
conda activate drones
cd gym_pybullet_drones/examples/
python3 beta.py --num_drones 1 # 查看文件的文档字符串以了解如何使用多架无人机
引用
如果您愿意,请引用我们的 IROS 2021 论文(以及原始代码库)
@INPROCEEDINGS{panerati2021learning,
title={学习飞行---一个基于PyBullet物理引擎的多智能体四旋翼飞行器控制强化学习Gym环境},
author={Jacopo Panerati 和 Hehui Zheng 和 SiQi Zhou 和 James Xu 和 Amanda Prorok 和 Angela P. Schoellig},
booktitle={2021年IEEE/RSJ智能机器人与系统国际会议(IROS)论文集},
year={2021},
volume={},
number={},
pages={7512-7519},
doi={10.1109/IROS51168.2021.9635857}
}
参考文献
- Carlos Luis 和 Jeroome Le Ny (2016) 纳米四旋翼飞行器轨迹跟踪控制器设计
- Nathan Michael, Daniel Mellinger, Quentin Lindsey, Vijay Kumar (2010) GRASP多微型无人机测试平台
- Benoit Landry (2014) 四旋翼飞行器在杂乱环境中的规划与控制
- Julian Forster (2015) Crazyflie 2.0 纳米四旋翼飞行器系统辨识
- Antonin Raffin, Ashley Hill, Maximilian Ernestus, Adam Gleave, Anssi Kanervisto, 和 Noah Dormann (2019) Stable Baselines3
- Guanya Shi, Xichen Shi, Michael O'Connell, Rose Yu, Kamyar Azizzadenesheli, Animashree Anandkumar, Yisong Yue, 和 Soon-Jo Chung (2019) 神经着陆器:使用学习动力学的稳定无人机着陆控制
- C. Karen Liu 和 Dan Negrut (2020) 基于物理的模拟器在机器人学中的作用
- Yunlong Song, Selim Naji, Elia Kaufmann, Antonio Loquercio, 和 Davide Scaramuzza (2020) Flightmare:一个灵活的四旋翼飞行器模拟器
核心团队进行中的工作
- 多无人机
crazyflie-firmware
SITL 支持 (@spencerteetaert, @JacopoPan) - 使用可步进仿真的 SITL 服务 (@JacopoPan)
期望的贡献/拉取请求
- 通过在
BaseAviary._dynamics()
中实现缓冲区来添加电机延迟、高级 ESC 建模 - 通过编辑
BaseAviary._updateAndStoreKinematicInformation()
、BaseAviary._getDroneStateVector()
和相关子类的.computeObs()
方法,用四元数替换rpy
(并用体速率替换ang_vel
)
故障排除
- 在 Ubuntu 系统上,如果您使用 NVIDIA 显卡并收到"无法创建 OpenGL 上下文"的消息,请启动
nvidia-settings
,在"PRIME Profiles"下选择"NVIDIA(性能模式)",重启后再试。
从顶层文件夹运行所有测试:
pytest tests/
多伦多大学动态系统实验室 / Vector 研究所 / 剑桥大学Prorok 实验室