Fast, parallelizable simulations of drones with JAX and MuJoCo.
Project description
Crazyflow is a research simulator for quadrotors. It runs batched, differentiable simulations on CPU and GPU via JAX, with analytical and abstracted dynamics for the Crazyflie 2.x family.
import numpy as np
from crazyflow.sim import Sim
from crazyflow.control import Control
sim = Sim(n_worlds=4096, n_drones=1, control=Control.state)
cmd = np.zeros((4096, 1, 13))
cmd[..., 2] = 0.5 # hover at 0.5 m across all worlds
for _ in range(100):
sim.state_control(cmd)
sim.step(sim.freq // sim.control_freq)
sim.render()
Documentation
learnsyslab.github.io/crazyflow — installation, user guide, examples, and API reference.
Features
- n_worlds x n_drones — batched over independent environments and multi-drone swarms simultaneously
- GPU-accelerated — up to 914 M steps/s on an RTX 4090 (first-principles dynamics, 262 K worlds)
- Differentiable —
jax.gradworks through the full dynamics and control pipeline - First-principles dynamics — dynamics using first-principles equations and parameters identified from real-world measurements
- Abstracted dynamics — simplified dynamics in three flavors fitted from real Crazyflie flight data
- Modular pipelines — step and reset are tuples of plain JAX functions; insert anything, anywhere
- MuJoCo integration — onscreen and offscreen rendering, raycasting, and contact detection via MJX
Installation
pip install crazyflow # CPU
pip install "crazyflow[gpu]" # GPU (Linux x86-64, CUDA 12)
Developer install with editable submodules (pixi required):
git clone --recurse-submodules https://github.com/learnsyslab/crazyflow.git
cd crazyflow
pixi shell
Performance
First-principles dynamics, one drone. CPU: AMD Ryzen 9 7950X. GPU: NVIDIA RTX 4090.
| n_worlds | CPU steps/s | GPU steps/s |
|---|---|---|
| 64 | 3.3 M | 1.2 M |
| 1 024 | 9.2 M | 18.7 M |
| 16 384 | 11.9 M | 257 M |
| 65 536 | 15.6 M | 678 M |
| 262 144 | 12.6 M | 914 M |
Full benchmarks including multi-drone scaling are in the documentation.
Citation
@misc{schuck2026crazyflow,
title={Crazyflow: An Accurate, GPU-Accelerated, Differentiable Drone Simulator in JAX},
author={Martin Schuck and Marcel P. Rath and Yufei Hua and AbhisheK Goudar and SiQi Zhou and Angela P. Schoellig},
year={2026},
eprint={2606.01478},
archivePrefix={arXiv},
primaryClass={cs.RO},
url={https://arxiv.org/abs/2606.01478},
}
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file crazyflow-0.2.1.tar.gz.
File metadata
- Download URL: crazyflow-0.2.1.tar.gz
- Upload date:
- Size: 7.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04025716cc252af209254d126aa8af307d664071b2550e115ab7e5596ad53bd6
|
|
| MD5 |
31d3c73e9ece87103915b36061d514b9
|
|
| BLAKE2b-256 |
f6ac3f1db4221a8b79790f33715fe9655d70028907d48ffb3026d132be352a83
|
File details
Details for the file crazyflow-0.2.1-py3-none-any.whl.
File metadata
- Download URL: crazyflow-0.2.1-py3-none-any.whl
- Upload date:
- Size: 7.6 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a264cf45142d4dd1576f4e5c30f47cea42aed97a3a84ea518766c6cc9b7235cb
|
|
| MD5 |
a060e2aecb387a83ddd3facbfd78dc5c
|
|
| BLAKE2b-256 |
e968ac4479dadde0bf494c0109681b22603350e2974efceb3b6e3d7d778d888c
|