Gym Pybullet Drones AI Agent

by learnsyslab• 2.2k•• Scanned•Claim this listing•Request removal
Learning Resourcesbetaflightcontrolcrazyfliegymgymnasium

PyBullet Gymnasium environments for single and multi-agent reinforcement learning of quadcopter control

Gym Pybullet Drones is an open-source ai agent by learnsyslab, written mainly in Python, with 2,194 GitHub stars and the MIT license. Its code was last updated Oct 28, 2026.

[!TIP] For research work with symbolic dynamics and constraints, also try safe-control-gym

For GPU-accelerated, differentiable, JAX-based simulation, also try crazyflow

For real-world deployment of PX4/ArduPilot + ROS2 + JetPack, use aerial-autonomy-stack

gym-pybullet-drones

This is a minimalist refactoring of the original gym-pybullet-drones repository, designed for compatibility with gymnasium, stable-baselines3 2.0, and betaflight SITL.

NEWS: gym-pybullet-drones was featured in GitHub's Maintainer Spotlight 2026

NOTE: if you want to access the original IROS 2021 codebase, please git checkout [paper|master]

<img src="gym_pybullet_drones/assets/helix.gif" alt="formation flight" width="325"> <img src="gym_pybullet_drones/assets/helix.png" alt="control info" width="425">

Installation

Tested on Intel x64/Ubuntu 24.04 and Apple Silicon/macOS 26.

git clone https://github.com/learnsyslab/gym-pybullet-drones.git
cd gym-pybullet-drones/

conda create -n drones python=3.12
conda activate drones

# Beyond Python 3.10, `pybullet` has no pre-built wheel
# On Ubuntu, install `gcc` to let `pip3 install` build `pybullet`
sudo apt install build-essential
# On macOS, build and install `pybullet` with
CFLAGS="-Dfdopen=fdopen" pip install pybullet --no-cache-dir

pip3 install -e .

# check installed packages with `conda list`, deactivate with `conda deactivate`, remove with `conda remove -n drones --all`

Use

Control examples

cd gym_pybullet_drones/examples/
python3 pid.py
python3 pid_velocity.py
python3 mrac.py

Downwash effect example

cd gym_pybullet_drones/examples/
python3 downwash.py

Reinforcement learning examples (SB3's PPO)

cd gym_pybullet_drones/examples/

# single agent, task: single drone hover at z == 1.0
python learn.py
LATEST_MODEL=$(ls -t results | head -n 1) && python play.py --model_path "results/${LATEST_MODEL}/best_model.zip"

# multi-agent, task: 2-drone hover at z == 1.2 and 0.7
python learn.py --multiagent true
LATEST_MODEL=$(ls -t results | head -n 1) && python play.py --multiagent true --model_path "results/${LATEST_MODEL}/best_model.zip"

<img src="gym_pybullet_drones/assets/rl.gif" alt="rl example" width="375"> <img src="gym_pybullet_drones/assets/marl.gif" alt="marl example" width="375">

Multi-agent RL with PettingZoo

PettingZooWrapper exposes any multi-drone aviary through PettingZoo's Parallel API, with one agent per drone (drone_0, drone_1, ...). That makes it usable with MARL libraries built on PettingZoo.

from gym_pybullet_drones.envs.MultiHoverAviary import MultiHoverAviary
from gym_pybullet_drones.utils.PettingZooWrapper import PettingZooWrapper

env = PettingZooWrapper(MultiHoverAviary(num_drones=3))
observations, infos = env.reset(seed=42)
while env.agents:
    actions = {agent: env.action_space(agent).sample() for agent in env.agents}
    observations, rewards, terminations, truncations, infos = env.step(actions)
env.close()

Each agent receives its own row of the aviary's observation. The aviary's team reward and episode flags are shared by all agents, and env.state() returns every drone's kinematics for centralised critics.

cd gym_pybullet_drones/examples/

# MWE based on `learn.py --multiagent true`
python pettingzoo_multiagent.py

Betaflight SITL example (Ubuntu only)

# one-time setup: from the repo's top folder, build one SITL executable per drone (e.g. 2), if needed, `apt install curl`
cd gym-pybullet-drones/
./gym_pybullet_drones/assets/clone_bfs.sh 2

# run the example
cd gym_pybullet_drones/examples/
python3 beta.py --num_drones 2
# --num_drones must be <= the number passed to clone_bfs.sh

Run all tests

# from the repo's top folder
cd gym-pybullet-drones/
pytest tests/

Citation

If you wish, please cite our IROS 2021 paper (and original codebase) as

@INPROCEEDINGS{panerati2021learning,
      title={Learning to Fly---a Gym Environment with PyBullet Physics for Reinforcement Learning of Multi-agent Quadcopter Control}, 
      author={Jacopo Panerati and Hehui Zheng and SiQi Zhou and James Xu and Amanda Prorok and Angela P. Schoellig},
      booktitle={2021 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)},
      year={2021},
      volume={},
      number={},
      pages={7512-7519},
      doi={10.1109/IROS51168.2021.9635857}
}

References


UTIAS / Learning Systems and Robotics Lab / Vector Institute / University of Cambridge's Prorok Lab

<!-- ## TODOs - [ ] Add motor delay, advanced ESC modeling by implementing a buffer in `BaseAviary._dynamics()` - [ ] Replace `rpy` with quaternions (and `ang_vel` with body rates) by editing `BaseAviary._updateAndStoreKinematicInformation()`, `BaseAviary._getDroneStateVector()`, and the `.computeObs()` methods of relevant subclasses -->

Gym Pybullet Drones alternatives

View more →

Similar ai agents in Learning Resources, ranked by GitHub stars. Compare licence, recent activity and scan status before you choose.

NameStarsLicenceLast updatedScan
Gym Pybullet Drones (this page)
learnsyslab
2.2kMITOct 28, 2026Scanned, no flagged issues
Prompt Engineering Guide
dair-ai
80kMITMar 11, 2026Scanned, no flagged issues
Learn Claude Code
shareAI-lab
80kMITOct 27, 2026Scanned, no flagged issues
AI Engineering From Scratch
rohitg00
76kMITOct 29, 2026Scanned, no flagged issues
Front End Checklist
thedaviddias
75kMITOct 31, 2026Scanned, no flagged issues
System Prompts Leaks
asgeirtj
71kCC0-1.0Nov 1, 2026Scanned, no flagged issues