First, a bit of context on my project and what I'm attempting to do—I'm trying to build an app that discovers & controls a swarm of drones, with the capability to run synchronized trajectories that I've defined beforehand (via the high level commander). This is more or less exactly what the Crazyswarm project does, but for external reasons, my app has to be a Windows application, so unfortunately I can't actually use the Crazyswarm API directly, as my understanding is that it currently only supports Ubuntu Linux.
My initial plan of attack was use the crazyflie-lib-python to control the drones individually, but I ran into synchronization and bandwidth problems, and after doing some digging, I found out the Crazyswarm project works around these limitations by sending out broadcast packets for tighter control. I know the cflib Python library doesn't currently support this feature (though curiously, the high level commander in cflib does support groups/group masks ), but I read through the source code for crazyswarm, crazyflie_ros, crazyflie_cpp, and crazyflie-firmware, and as far as I can tell, broadcasting involves 2 things:
- Sending to special "broadcast address" 0xFFE7E7E7E7
- Sending out 2 packets without waiting for an ack response, with this one being more for mitigating potential packet loss than anything else
My current testing setup is as follows:
- I've got two crazyflie 2.X's configured on the same channel with different addresses, one at uri radio://0/55/2M/E7E7E7E7E7, and another at radio://0/55/2M/E7E7E7E7E8
- I'm using a Crazyradio PA usb radio, with libusbK drivers, and I've built the latest crazyradio-firmware and flashed it to the dongle successfully
- I've also flashed both crazyflies with the latest releases of crazyflie-firmware and crazyflie2-nrf-firmware
- I'm sending high level commander takeoff/land packets (port 8, command 7/8), with group mask 0
- I've enabled the high level commander on each of the drones individually, using the Crazyflie PC Client and setting the commander.enHighLevel parameter to 1
- Not particularly relevant (since I'm only doing takeoff/land at the moment), but I have a Lighthouse deck attached to each of the drones and I'm using the lighthouse positioning system for autonomous flight of the trajectories
So it's very possible, and actually very likely that I have either an incomplete or misinformed understanding of what is involved in broadcast communication with the crazyflies, so I'd very much appreciate some pointers on whether what I'm attempting to do makes sense, and how I should be going about it.