ROS 2的去中心化架构天然适合多机器人应用------每个机器人是一个独立节点,彼此通过DDS直接通信,不需要中心服务器中转。但"天然适合"和"开箱即用"之间有一条不短的沟。本文从三个有代表性的开源项目入手,梳理多机器人系统的不同层次:微型无人机集群入门(Crazyswarm2)、完整的空中机器人框架(Aerostack2)、以及双机械臂的高实时性协作(multipanda_ros2)。三个项目分别对应不同的切入难度和应用场景,放在一起看能大致勾勒出ROS 2多机器人生态的当前轮廓。
一、Crazyswarm2:15分钟搭起一个无人机集群
如果你完全没有多机器人经验,想找一个能快速上手的项目,Crazyswarm2应该是首选。
1.1 Crazyswarm的演化
Crazyswarm最初是USC ACTLab在2017年ICRA上发表的工作,定义了一个大型微型四轴飞行器集群的系统架构,并在49架Crazyflie上完成了验证。集群的室内飞行依赖动作捕捉系统做全局定位,每架飞机的位置以<2cm的平均误差被实时追踪。
Crazyswarm2是这个项目的ROS 2重写版,由IMRCLab维护。CrazySwarm2支持多无人机集群控制,可以实现复杂的编队飞行和协同任务。项目提供了集群控制的Python接口,核心代码只有几行:

这个例子展示了它的核心设计思路:对单架飞机的操作指令被统一广播到整个集群,timeHelper负责同步等待所有飞机完成当前动作。每一架Crazyflie在硬件层面有自己的无线电通道,Crazyswarm2负责管理这些通道和飞行轨迹的时间对齐。
1.2 Lighthouse定位:不需要动捕也能飞
Crazyswarm2的一个重要定位方案是Bitcraze Lighthouse。Lighthouse是一个基于Vive基站的红外扫描系统,每个基站发出水平和垂直两个方向的光扫描信号,机载接收器根据扫描时间差计算出自己的姿态。与动捕系统相比,Lighthouse的设备成本更低,部署更灵活,不需要专业校准。有硕士论文项目使用Crazyswarm2和Lighthouse实现了2-6架Crazyflie的协同编队飞行,在圆形、方形、六边形和螺旋四种编队之间做平滑切换,并量化了编队误差和同步精度。定位精度不如动捕,但对入门级集群研究来说,这个代价可以接受。
1.3 冷门细节
Crazyswarm2与ROS 2 Navigation Stack紧密集成,支持路径规划和避障。实际部署时需要注意的细节包括:每架Crazyflie需要独立的无线电通道,在密集环境中通道分配直接影响通信可靠性。集群规模受限于无线电带宽,论文中的极限测试做到49架,但那是实验室环境。Crazyswarm2要求Crazyflie固件版本2024.10以上,旧固件在同步机制上存在差异。对于初次接触的用户,建议先从2-3架飞机开始,逐步增加规模。
源代码:https://github.com/IMRCLab/crazyswarm2
二、Aerostack2:为空中机器人打造的完整框架
如果说Crazyswarm2是"用来飞集群"的工具,那Aerostack2就是"用来造空中机器人"的框架。
2.1 设计动机:空中机器人的碎片化问题
Aerostack2由马德里理工大学CVAR-UPM团队开发,是一个基于ROS 2的开源框架,专为创建自主多空中机器人系统设计。它在Humble上开发和测试。
论文的摘要给出了一个相当直接的判断:"Unlike ground robotics, aerial robotics has seen limited standardization, leading to fragmented development efforts."这句话很准确------地面机器人有Nav2、移动机器人有标准化架构,空中机器人却长期缺乏这样的基础设施。很多团队从零开始造轮子,每个项目都要重新处理低层控制和平台适配问题。Aerostack2试图填补这个空白,提供一个"通用、开源、平台无关"的空中机器人开发基础。
2.2 核心架构
Aerostack2的架构包含几个值得注意的设计决策:
-
平台无关性
:支持PX4、ArduPilot等多种飞控,理论上可以在不同硬件之间切换。
-
模块化插件架构
:感知、规划、控制各模块可以独立替换,不需要修改核心框架代码。
-
基于行为的任务管理
:任务被拆解为基本行为单元,可以组合成复杂的任务链,适合多机协作场景。
这些决策使得Aerostack2不仅仅是一个"无人机飞控",而是一个完整的机器人软件栈。用户只需要实现特定的行为逻辑,框架负责处理底层通信、状态同步和任务调度。
2.3 冷门细节
Aerostack2的文档中提到了一些容易被忽略的设计取舍:
-
不绑定特定DDS实现
:与其他框架不同,Aerostack2不假设底层RMW,理论上可以在Fast DDS、Cyclone DDS之间切换。但在高频控制回路中,不同RMW的延迟特性差异明显,生产环境中需要根据实际测试选择。
-
实时约束
:虽然框架设计支持多机器人,但不同机器人的实时性要求可能不同。在某些场景下,所有机器人的控制回路会被同步到同一频率,造成不必要的计算浪费。
-
插件加载机制
:Aerostack2的插件系统依赖pluginlib,动态加载行为模块。但插件之间的依赖关系需要用户手动管理,框架本身不会自动解决,调试时需要注意顺序问题。
源代码:https://github.com/aerostack2/aerostack2
三、multipanda_ros2:跨越仿真到现实的鸿沟
Crazyswarm2和Aerostack2都依赖仿真做大量测试。但仿真和现实之间的差距,往往比想象中大得多。仿真中完美的协同轨迹,放到真实机器人上,可能因为通信延迟、执行误差、动力学不匹配而彻底失效。
multipanda_ros2直接面对这个问题。这个项目的核心目标只有一个:让仿真和现实之间的鸿沟变窄。
3.1 1kHz控制频率的挑战
multipanda_ros2的一个硬性设计指标是维持1kHz的控制频率。这不是为了炫技,而是安全标准的最低要求。论文中明确指出:"A central focus of this work is sustaining a 1kHz control frequency, a necessity for real-time control and a minimum frequency required by safety standards."
在双机械臂协同中,每1毫秒就要完成一次完整的控制回路:读取关节状态→计算期望力矩→发送指令→等待下一个周期。跨进程通信延迟如果超过1ms,整个系统就会失效。
3.2 controllet-feature设计模式
multipanda_ros2引入了一个叫"controllet-feature"的设计模式。核心想法是:把控制器的功能拆解成最小的可复用单元(controllet),每个controllet只做一件事,然后通过组合这些controllet来构建复杂的控制器。论文中的数据是:控制器切换延迟 ≤ 2ms,这意味着在双机械臂协作中,从"跟踪模式"切换到"阻抗模式"只需要2毫秒,对于接触力敏感的任务来说,这个切换时间至关重要。
3.3 仿真现实差距的量化方法
multipanda_ros2最有价值的部分不是代码本身,而是它量化"仿真与现实差距"的方法。项目使用MuJoCo作为高保真仿真后端,并从两个维度衡量差距:运动学精度(末端执行器位置的误差)和动态一致性(力矩、力、控制误差)。通过对比仿真和真实机器人在相同输入下的输出,可以定量评估物理模型的准确度。
论文中还指出,真实世界的惯性参数辨识可以显著提升力和力矩的精度。仿真中的机器人模型参数来自CAD设计文件,而真实的机器人因为加工误差、装配公差、线缆拖拽等因素,实际惯性参数与CAD设计值之间存在系统性偏差。通过实验数据反推真实参数,再将修正后的参数更新到仿真模型中,迭代若干轮后仿真精度会有明显提升。
3.4 冷门细节
multipanda_ros2项目由Jon Škerlj等人开发,源代码托管在GitHub上,基于ros2_control框架,目前支持ROS 2 Humble,且仅针对Franka Emika Panda机械臂验证。从ROS Index的信息来看,multipanda_ros2的"Dev Status"标记为"UNKNOWN","Released"标记为"UNRELEASED",意味着它还是一个研究原型,不是生产就绪的软件。如果用在项目中,需要做好稳定性方面的心理准备。
multipanda_ros2与官方franka_ros2的关系值得注意。官方franka_ros2已经停止对Panda机械臂的支持(公司已不再销售Panda产品线)。multipanda_ros2的README中明确写道:"This project significantly expands upon the original franka_ros2 from the company, who dropped the support for the Pandas."这意味着multipanda_ros2在某种意义上已经成为了Panda机械臂在ROS 2上的社区替代方案。
源代码:https://github.com/tenfoldpaper/multipanda_ros2
四、三个项目的横向对比
| 维度 | Crazyswarm2 | Aerostack2 | multipanda_ros2 |
|---|---|---|---|
| 目标平台 | Crazyflie微型无人机 | 多种无人机平台 | Franka Panda机械臂 |
| ROS 2版本 | Humble / Galactic | Humble | Humble |
| 定位方案 | 动捕 / Lighthouse | 依赖飞控的定位系统 | 编码器 / 外部跟踪 |
| 实时控制要求 | 中等(几十Hz) | 中等 | 高(1kHz) |
| 多机器人支持 | 是 | 是 | 是(支持任意数量) |
| 仿真后端 | 多种可视化后端 | Gazebo | MuJoCo |
| 开发状态 | 稳定 | 稳定 | 研究原型(UNRELEASED) |
五、参考资料
-
Crazyswarm2 GitHub仓库:https://github.com/IMRCLab/crazyswarm2
-
Coordinated Multi-Drone Pattern Formation项目:https://mw.hh.se/caisr/index.php?title=Coordinated_Multi-Drone_Pattern_Formation_with_Crazyflie_%26_Lighthouse
-
Aerostack2 arXiv论文:https://arxiv.org/abs/2303.18237
-
Aerostack2 GitHub仓库:https://github.com/aerostack2/aerostack2
-
multipanda_ros2 arXiv论文:https://arxiv.org/abs/2602.02269v1
-
multipanda_ros2 GitHub仓库:https://github.com/tenfoldpaper/multipanda_ros2
-
multipanda_ros2 ROS Index:https://index.rosdabbler.com/r/multipanda_ros2/
-
Bitcraze Lighthouse文档:https://www.bitcraze.io/documentation/tutorials/getting-started-with-lighthouse/
六、结语
三个项目代表了多机器人系统中三个不同的侧面:Crazyswarm2是入门门槛最低的选择,适合快速验证集群算法;Aerostack2试图解决空中机器人开发的碎片化问题,适合需要构建完整多无人机系统的场景;multipanda_ros2则在仿真到现实的鸿沟上做了最深入的探索,适合对实时性和物理精度有严格要求的项目。