A tool for creating, configuring, and maintaining Crazyflie swarms. For some specific functionality there's also an accompanying application.
Still very much work in progress...
Out-of-tree Crazyflie firmware application providing swarm-specific functionality.
Building:
cd firmware/swarmkeeper-app
CRAZYFLIE_BASE=<path-to-crazyflie-firmare> makeRust desktop application for managing and operating Crazyflie swarms. Built with Slint for the UI and OpenGL for 3D visualization.
Features:
- Unit management -- connect to a swarm of Crazyflies, monitor status (battery, position, state), upload trajectories, and control flight (takeoff, goto, land, emergency stop)
- Several Crazyradios -- a URI with the radio left empty (
radio:///80/2M/E7E7E7E701) means any Crazyradio. Connecting the swarm spreads those Crazyflies over all Crazyradios that can be opened, keeping Crazyflies on the same (or a neighbouring) channel on one radio; a number in the URI still pins that radio. The same rules ascfcli. The unit list shows the radio each one got - Rechannel -- spread the swarm over several channels (Setup > Rechannel Swarm...) so that it can use one Crazyradio per channel. Each Crazyflie that moves is reprogrammed, rebooted and found on its new channel before its URI in the swarm file changes
- Shared TOC download -- connecting the swarm downloads each parameter/log TOC that isn't cached yet from one Crazyflie only; the others with the same firmware wait and then connect from the cache. Each Crazyradio connects 8 Crazyflies at a time
- Shared swarms -- sign in to a server that shares swarms (the account menu at the right of the menu bar), and File > Open swarm lists the swarms shared in your organizations next to the swarm files, with the same
<org>/<swarm>IDs ascfcli. A shared swarm opens at its latest revision, or from this computer's copy when the server can't be reached, and a newer revision is offered for reloading - Radio test -- measure link quality per channel for each Crazyflie in the swarm
- 3D visualization -- real-time view of Crazyflie positions, Lighthouse base stations, and Loco anchors with labels
- Lighthouse coverage -- place base stations, configure room dimensions and offsets, and compute/visualize which areas have coverage from 0--4+ base stations. Includes receiver FOV and tilt compensation settings. Load base station geometry from Crazyflie config files
- Lighthouse wizard -- guided step-by-step calibration of Lighthouse base station geometry from measurement samples, with a built-in solver (WIP)
- TDoA3 coverage -- place Loco anchors and compute GDOP / positioning error metrics (GDOP, HDOP, VDOP, per-axis error, sensitivity) with color-mapped voxel visualization
- Planning -- combined scene editor for designing a positioning system. Place Lighthouse base stations, TDoA3 anchors, and opaque geometric obstacles (boxes, cylinders with per-object color). Computes combined LH + TDoA3 coverage with obstacle occlusion. Import scenes from the individual LH/TDoA3 tabs. Save/load planning scenes as YAML
Install (Linux, x86_64 and arm64):
curl -fsSL https://evoggy.github.io/packages/apt/evoggy.gpg.key \
| sudo gpg --dearmor -o /usr/share/keyrings/evoggy-archive-keyring.gpg
echo "deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/evoggy-archive-keyring.gpg] https://evoggy.github.io/packages/apt stable main" \
| sudo tee /etc/apt/sources.list.d/evoggy.list
sudo apt update && sudo apt install swarmkeeperThe package adds Swarmkeeper to the application menu and installs the udev
rules for the Crazyradio. Started that way, swarms, scenes, plans, log configs,
journals and recordings are kept in ~/Documents/Swarmkeeper; run from
client/ in a checkout, they stay in the checkout as before.
System Dependencies (Linux):
# Ubuntu/Debian
sudo apt install libfontconfig1-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev
# Fedora
sudo dnf install fontconfig-devel libxcb-devel libxkbcommon-develBuilding:
cd client
cargo build
cargo run