Cooperative payload transport with a swarm of three Crazyflie drones connected to a shared payload via cables.
IMG_2200.mp4
Three drones fly in formation, each attached to the same payload by a cable. An Optimal Control Problem (OCP) is solved offline to generate dynamically feasible, collision-free trajectories for all drones simultaneously. The resulting trajectories are uploaded to the firmware and executed.
| Animation | States (altitude / speed / acceleration) |
|---|---|
![]() |
![]() |
| Animation | States (altitude / speed / acceleration) |
|---|---|
![]() |
![]() |
crazyflo/
└── crazyflo_planner/ # ROS 2 Python package (planning + execution)
See crazyflo_planner/README.md for the full module reference, configuration details, and step-by-step usage.
# 1 — Plan trajectories (offline, no drones needed)
python crazyflo_solve.py
# 2 — Launch simulation or real drones
ros2 launch crazyflo_planner sim.launch.xml
ros2 launch crazyflo_planner real.launch.xml
# 3 — Run the mission script (add <mission> arguments)
ros2 run crazyflo_planner missiongit clone https://github.com/flojule/crazyflo.gitpython3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtFollow the official ROS 2 installation guide.
Follow the Crazyswarm2 installation instructions:
Follow the cfclient installation instructions:
cd ~/ws
colcon build --packages-select crazyflo_planner
source install/setup.bash| Tool | Role |
|---|---|
| ROS 2 Jazzy | Middleware |
| Crazyswarm2 | Drone communication & simulation |
| cfclient | Crazyflie configuration |
| CasADi | OCP solver |




