Welcome to Crazyswarm’s documentation!

The Crazyswarm platform allows you to fly a swarm of Bitcraze Crazyflie 2.x and Bitcraze Crazyflie Bolt-based quadcopters in tight, synchronized formations. Different localization systems are supported: LightHouse, LPS, and motion capture. The Crazyswarm is particularly optimized for motion capture systems and supports VICON, OptiTrack, and Qualisys. We successfully flew 49 Crazyflies using three Crazyradios. An example video for what you can do is shown below:

How is Crazyswarm different from Bitcraze’s Crazyflie Python API?

Both can be used to control several Crazyflies from a Python script. Here are some differences:

  • Motion capture integration. Crazyswarm contains drivers for common motion capture systems. The Bitcraze API can send position measurements to the Crazyflie, but does not know how to get position measurements from mocap hardware.

  • Identical or single motion capture markers. Via libobjecttracker, Crazyswarm can track multiple quadrotors with identical motion capture marker arrangements, or quadrotors with only one marker each. Most motion capture devices do not support this natively. To make it possible, the user must supply the quadrotors’ initial positions in a configuration file at startup to establish the mapping from radio addresses to positions.

  • Broadcasts. Crazyswarm uses broadcast communication whenever possible to require fewer radios per Crazyflie. In contrast, the official SDK uses unicast communication instead.

  • Simulation. Crazyswarm has a simulation mode with 3D graphics, which makes it easy to validate complex scripts before running them on real hardware.

  • Python firmware bindings. Crazyswarm’s simulator is built upon automatically generated Python bindings for certain modules in the Crazyflie firmware. The binding system can be helpful when developing new firmware modules, especially when they are mathematically complex and hard to debug.

  • ROS foundation. The Crazyswarm server program is a ROS node. The Python API Reference is a thin wrapper around the ROS interface. While we recommend the Python API for most applications, the ROS interface is fully supported.

Crazyswarm’s academic origins

The Crazyswarm architecture, including some motivation for the design decisions, is described in our paper [pdf].

A talk at the Aerial Swarms Workshop at IROS 2019 includes a primer on how to use the Crazyswarm and a bibliography of papers using the Crazyswarm: Slides [pdf].

If you use our work in academic research, please cite us:

@inproceedings{crazyswarm,
  author    = {James A. Preiss* and
               Wolfgang  H\"onig* and
               Gaurav S. Sukhatme and
               Nora Ayanian},
  title     = {Crazyswarm: {A} large nano-quadcopter swarm},
  booktitle = {{IEEE} International Conference on Robotics and Automation ({ICRA})},
  pages     = {3299--3304},
  publisher = {{IEEE}},
  year      = {2017},
  url       = {https://doi.org/10.1109/ICRA.2017.7989376},
  doi       = {10.1109/ICRA.2017.7989376},
  note      = {Software available at \url{https://github.com/USC-ACTLab/crazyswarm}},
}

Our contributed code is licensed under the permissive MIT license, however some of the parts (such as the firmware) are licensed under their respective license.

Indices and tables