版权所有:PIControlLab 维护人:邓正宇、宁文涛
本仓库包含 Crazyflie的gz-sim仿真、Crazyswarm2 控制后端、以及编队重配置(formation_reconfiguration)的完整实验链路。已适配到 Ubuntu 24.04 + ROS 2 Jazzy + Gazebo Sim。
| 组件 | 版本 |
|---|---|
| 操作系统 | Ubuntu 24.04 |
| ROS 2 | Jazzy |
| Gazebo | Gazebo Sim(Jazzy 对应版本) |
| Python | 3.12 |
sudo apt install ros-jazzy-gz-plugin-vendor ros-jazzy-gz-sim-vendor ros-jazzy-gz-transport-vendor ros-jazzy-gz-msgs-vendor ros-jazzy-tf-transformations
sudo apt install ros-jazzy-vrpncd ~/crazyflie
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install "empy<4" -i https://pypi.tuna.tsinghua.edu.cn/simplesudo apt install ros-jazzy-ros-gz
sudo apt install ros-jazzy-vrpn
sudo apt install ros-jazzy-tf-transformationscd ~/crazyflie/crazyflie_sim
source ~/crazyflie/.venv/bin/activate
mkdir -p sitl_make/build && cd sitl_make/build
cmake ..
make -j"$(nproc)" allcd ~/crazyflie/crazyswarm2_ws
source ~/crazyflie/.venv/bin/activate
colcon build --symlink-install在 crazyflie_sim 目录下:
source ~/crazyflie/.venv/bin/activate
cd ~/crazyflie/crazyflie_sim
bash tools/crazyflie-simulation/simulator_files/gazebo/launch/sitl_multiagent_square.sh -n 1 -m crazyflie终端显示如下信息即为正常启动
[Msg] Init subs and Pubs done :
[Msg] Received firmware handshake message...在 crazyswarm2_ws 目录下:
source ~/crazyflie/.venv/bin/activate
cd ~/crazyflie/crazyswarm2_ws
source install/setup.bash
ros2 launch crazyflie launch.py backend:=cflib gui:=false mocap:=false teleop:=false rviz:=false终端显示如下信息即为正常启动
[crazyflie_server]: All Crazyflies are fully connected!在 SITL 仿真终端按 Ctrl+C(脚本会自动清理 cf2 和 Gazebo),然后在后端终端按 Ctrl+C。
一键清理所有残留进程:
pkill -f crazyflie_server
pkill -x cf2
pkill -9 -f "gz sim"
ros2 daemon stop
pkill -f ros2sudo apt install linux-tools-virtual hwdata sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*/usbip 20 sudo usbip list -r 10.1.1.14 sudo usbip attach -r 10.1.1.14 -b 1-9 sudo modprobe vhci_hcd
从Nat模式配置为Bridged模式 networkingMode=bridged
没加 udev 规则会报 Access denied (insufficient permissions),加完拔插电台:
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="1915", ATTRS{idProduct}=="7777", MODE="0664", GROUP="plugdev"' | sudo tee /etc/udev/rules.d/99-crazyradio.rules
sudo udevadm control --reload-rules && sudo udevadm trigger连通性检查(URI 换成 crazyflies.yaml 里启用的那台,打印 OK 即通):
python -c "
import time, cflib.crtp; cflib.crtp.init_drivers()
from cflib.crazyflie import Crazyflie
cf = Crazyflie(rw_cache=None)
cf.connected.add_callback(lambda u: print('OK', u))
cf.connection_failed.add_callback(lambda u, m: print('FAIL', m))
cf.open_link('radio://0/80/2M/E7E7E7E703'); time.sleep(5)"真机后端用 mocap:=true,且不要与 SITL 同时运行。