Autonomous flight
Flight within an indoor positioning system
The simplest form of autonomous operation is a position-controlled flight within an indoor positioning system. Depending on the positioning system type this may require an additional sensor (read more about their integration here). The Flapper supports the Lighthouse Positioning System, various motion capture systems (Optitrack, Vicon, Qualisys, …), and experimentally also the Loco Positioning System (UWB).
When operating your Flapper within a positioning systems and using the examples scripts linked below, test the tracking performance of the positioning system first and make sure all the setpoints are within the tracked volume to prevent unnecessary crashes.
Indoor positioning systems supported
Lighthouse Positioning System
The Lighthouse is a low-cost positioning system with centimeter accuracy from Bitcraze AB, based on the VR base stations from HTC/Steam. It enjoys the best integration into the Crazyflie ecosystem and is recommended if you are getting started.
The instructions on how to connect the Lighthouse deck to the Flapper are here. The calibration procedure and remote operation from within cfclient is described by Bitcraze here.
Motion capture systems
Optical motion capture systems will give you the best accuracy at highest framerates. You can read more about their support within the Crazyflie ecosystem here. In the most common setup, the Flapper needs to be equipped with retro-reflective markers recommended by the motion capture system manufacturer. The tracked position can then be streamed to the Flappers using the motioncapture Python library. An example script for flying along a simple trajectory with mocap is here.
Loco Positioning System
The Loco Positioning System (LPS) is a UWB positioning system from Bitcraze AB. The default implementation will let you perform simple test flights, but the position estimates are not very accurate and might diverge in some scenarios. Thus, it is only recommended if you are willing to delve into sensor fusion algorithms of the firmware and optimize them for your use case. The potential advantages include a large tracking volume, no need of visual line of sight, and plug and play installation of the LPS deck on the Flapper. More information about the setup and calibration of this system can be found here.
Python API & example scripts
The crazyflie Python API gives access to high-level control of aerial vehicles powered by the crazyflie firmware, including the Flapper Nimble+.
The API documentation has three step-by-step guides that can guide you when getting started with:
Should you prefer to start of from a ready made script, the Python API includes examples that let you control the Flapper:
Swarm operation software
Next to the Python API and its swarm library, you can control a swarm of Flappers (and crazyflies) using the following open-source software projects:
Skybrush Suite
Skybrush Suite is the leading open-source drone show software developed by CollMot Robotics Ltd., a pioneer in autonomous drone swarm technology inspired by nature that spun off from Eötvös University (Budapest, Hungary). Consult https://skybrush.io/ for more details.
Crazyswarm2 (ROS 2)
Crazyswarm2 is A ROS 2 stack allowing operation of aerial robot teams powered by crazyflie flight computers from Bitcraze AB. Next to our Flapper Nimble+, the supported vehicles include the Crazyflie 2.1(+), Crazyflie 2.1 Brushless, and custom drones built using the Crazyflie Bolt flight control board. The project is actively developed by Wolfgang Hönig (TU Berlin) and Kimberly N. McGuire (independent roboticist). For more details check the project website: https://imrclab.github.io/crazyswarm2/
Higher levels of autonomy
The flight controller board allows to connect your own sensors (time of flight, vision, …) and implement your own algorithms for fully autonomous flight. This already falls outside of the scope of this documentation, but should you need any assistance when selecting suitable sensors or with their integration we will be happy to assist. A clean way of adding your own functionality to the firmware without having to warry about the code merges etc. is using the App layer




