第 8 章 无人机蜂群测试与部署
所属卷册:第三卷 无人机蜂群控制工程实践
蜂群系统的调试难度远高于单机:同样的算法、同样的环境,多机交互下的失效模式呈组合爆炸------两机链路抖动、三机队形耦合振荡、整群通信拥塞。因此蜂群工程的成熟度直接等于其测试体系的成熟度 。测试体系的价值排序是"越便宜的环境越早发现问题":桌面仿真(SITL)发现逻辑问题,硬件在环(HIL)发现接口与实时性问题,小规模实飞发现物理与链路问题,大规模实飞验证整体性。本章按大纲给出这条测试链的两个核心环节(8.1 仿真与 HIL、8.2 实飞部署),并强调一个贯穿始终的原则:每一次测试都要可重复、可量化、可追溯------测试不是"跑通看看",而是"按用例执行、按指标判定、按记录归因"。
8.1 仿真测试流程
8.1.1 Gazebo 仿真环境搭建
Gazebo 是无人机集群仿真的事实标准:开源、与 ROS/PX4 生态深度集成、支持多机并发(可在单机上同时仿真数十架无人机,这是其相较飞行模拟器用于集群研究的决定性优势)1。基于 Gazebo + PX4 SITL + MAVROS 的集群仿真环境是本书全部算法(第 3~5、7 章)的标准验证台2。仿真环境搭建的分层结构为:世界(World/地面与光照)→ 模型(无人机机体 + 传感器插件)→ 中间件(MAVLink/DDS 桥)→ 被测系统(飞控 SITL 与机载算法原样运行)。环境搭建本身不难,真正的工程在模型可信度 与场景逼真度的配置上。
8.1.1.1 无人机动力学模型的参数校准
仿真结论能否外推到实飞,取决于动力学模型参数是否接近真实平台。参数校准的方法论是"分层标定、逐层验证",目标是把仿真-实飞偏差分解到可归因的层次:
εsim=εdyn+εsensor+εcomm+εctrl(8.1)\varepsilon_{\mathrm{sim}} = \varepsilon_{\mathrm{dyn}} + \varepsilon_{\mathrm{sensor}} + \varepsilon_{\mathrm{comm}} + \varepsilon_{\mathrm{ctrl}} \tag{8.1}εsim=εdyn+εsensor+εcomm+εctrl(8.1)
各分量的校准方法:动力学层(εdyn\varepsilon_{\mathrm{dyn}}εdyn) ------用真实机架参数(质量、惯量、电机/桨推力-油门曲线、桨叶时间常数)配置仿真模型;电机参数可从油门悬停标定与阶跃响应辨识获得,惯量用摆锤法/CAD 估算。校准验收试验:单机"悬停+阶跃+快速下降"的响应对比(仿真 vs 实飞录波),位置/姿态响应误差应在噪声带内;传感器层(\\varepsilon_{\\mathrm{sensor}} )∗∗------为仿真IMU叠加实测噪声谱(Allan方差拟合),GPS叠加跳变/漂移模型,定位误差分布要按实飞统计设定,否则第7章编队控制对定位噪声的敏感性分析失真;∗∗控制层()\*\*------为仿真 IMU 叠加实测噪声谱(Allan 方差拟合),GPS 叠加跳变/漂移模型,定位误差分布要按实飞统计设定,否则第 7 章编队控制对定位噪声的敏感性分析失真;\*\*控制层()∗∗------为仿真IMU叠加实测噪声谱(Allan方差拟合),GPS叠加跳变/漂移模型,定位误差分布要按实飞统计设定,否则第7章编队控制对定位噪声的敏感性分析失真;∗∗控制层(\\varepsilon_{\\mathrm{ctrl}})------控制器参数与真实固件保持一致(同一固件版本与参数文件),避免"仿真参数 A、实飞参数 B"的错位。
实时性指标的建立 是仿真可信的前提:仿真必须报告实时因子(Real-Time Factor),即仿真世界时间与实际墙钟时间之比:
RTF=tsimtwall(8.2)\mathrm{RTF} = \frac{t_{\mathrm{sim}}}{t_{\mathrm{wall}}} \tag{8.2}RTF=twalltsim(8.2)
RTF≥1\mathrm{RTF} \geq 1RTF≥1 表示仿真不慢于真实时间(集群仿真需多机并发,RTF\mathrm{RTF}RTF 掉到 1 以下时通信时序失真,仿真结果不可信);多机规模与 RTF\mathrm{RTF}RTF 的关系是仿真平台的"负载曲线",平台配置(核数、GPU、headless 模式)应以"目标机数下 RTF≥1\mathrm{RTF} \geq 1RTF≥1"为验收线。
8.1.1.2 通信延迟/丢包的模拟方法
第 3 章的丢包补偿、第 1.2.2.1 节的延迟阈值等结论,在仿真中必须通过通信损伤注入 验证,而非默认理想信道。实现方法分两层:网络层注入 (在消息中间件层面加延迟/丢包过滤器------对 MAVLink 链路用 UDP 代理(发送侧排队+随机丢弃),对 ROS2/DDS 用 QoS 与 network traffic control 组合),以及场景层注入(按链路质量模型(距离衰减/遮挡)动态决定丢包率,把第 2.1.1.2 节的建链判据物化为仿真链路)。延迟注入公式:
τinj=max(0, τtarget−τbase)(8.3)\tau_{\mathrm{inj}} = \max\big( 0, \ \tau_{\mathrm{target}} - \tau_{\mathrm{base}} \big) \tag{8.3}τinj=max(0, τtarget−τbase)(8.3)
即按目标端到端延迟与实测基线之差注入附加延迟,同时注入延迟抖动(高斯/伯努利)以模拟排队效应。测试矩阵至少覆盖:延迟 0/50%/100% 阈值(第 1.2.2.1 节 τmax\tau_{\max}τmax)、丢包率 0/10%/30%(对应第 3.1.1.2 节)、以及"延迟+丢包"组合------编队在延迟与丢包同时存在下的行为往往与单独作用时完全不同(重传与超时的相互作用)。
图 8-1 建议插入位:仿真平台负载曲线(机数-实时因子)、延迟注入对编队误差包络的影响曲线。
8.1.2 硬件在环(HIL)测试
SITL 再真实也是"全虚拟",飞控固件运行在 PC 上------真实飞控的调度特性、传感器接口时序、外设驱动行为未被验证。硬件在环(HIL)把真实飞控硬件接入仿真回路:仿真世界生成传感器数据注入真实飞控,飞控计算的控制输出回灌仿真模型,形成闭环。HIL 的价值在于以可控成本验证"固件+接口+时序"层,是 SITL 与实飞之间的必要跳板。
8.1.2.1 飞控硬件与仿真环境的接口对接
HIL 接口对接的技术核心是传感器数据仿真注入 :真实飞控的 IMU/GPS/气压计等传感器通常走 I2C/SPI/UART 总线,HIL 有两条路径------其一,协议级注入 :PX4 等支持 HIL 传感器模式,仿真器经 MAVLink HIL 消息直接向飞控固件注入传感器数据(无需物理总线);其二,物理总线替换 :把真实传感器从总线上摘除,接入"传感器仿真板"(按真实时序应答总线访问)------更接近真实但硬件工作量大。选型判据:验证"飞控固件+控制逻辑"用协议级注入即可;验证"传感器驱动+总线时序"必须物理级替换。对接的验收标准是飞控内估计器的健康度:HIL 模式下 EKF 的创新序列方差、定位协方差与 SITL/实飞同量级------估计器在 HIL 中"报警"通常意味着注入信号的时间戳或噪声统计设定错误,而非飞控问题。
接口对接还包括时钟同步 与故障注入通道:HIL 应能从仿真侧注入传感器故障(GPS 跳变、IMU 饱和、丢星)与执行器故障(单桨失效、舵面卡死),使第 7 章的功能降级逻辑(第 3.2.1 节抗饱和、第 8.2.2 节自恢复)在真实固件上得到验证。
8.1.2.2 测试用例的设计与执行标准
HIL 测试用例设计遵循"功能用例 + 注入用例 + 回归用例"三类框架,每类用例如下:
- 功能用例(验证功能正确):编队生成/保持/变换(第 7.1 节全流程)、避障、任务执行,每个用例声明:前置状态(队形、位置、电量)、操作序列(指令时间线)、预期结果(指标阈值------误差包络、收敛时间)与通过判据;
- 注入用例(验证鲁棒性):通信延迟/丢包(与 8.1.1.2 的注入方法一致)、传感器故障、链路中断、节点失效(第 1.2.1.2 节故障注入框架的硬件版)------注入用例必须声明"失效模型"与"恢复预期"(是否应自愈、恢复时间上界),恢复预期不明确就断言失败,防止"挂了也算过";
- 回归用例(防回退):每次固件/算法/参数变更后运行的基线集------取全部功能用例的关键子集 + 历史缺陷用例(修复过的缺陷必须回归),回归通过率是版本发布的闸门。
执行标准的三项硬性规范:其一,用例可重复 ------同一用例在同一版本上重复执行应得一致结论(统计性用例(蒙特卡洛扰动)记录分布而非单值);其二,失败必须归因到层次 ------按式(8.1)的分层把失败定位到"算法/接口/模型/固件"之一,无法归因的失败视为测试基础设施缺陷;其三,记录自动化------每次运行的版本号(固件/代码/参数三者的哈希)、仿真世界配置、随机种子、录波数据自动归档,保证"两个月后还能回放这次失败"。
8.2 实飞部署流程
8.2.1 部署前检查清单
实飞是蜂群项目风险最高的环节,部署前检查的价值在于把风险前移到地面。检查清单按"时间-系统"组织为三组,全部通过才能起飞。
8.2.1.1 通信链路的连通性测试步骤
链路是蜂群的地基,检查步骤按"单链→全图→动态"递进:
- 逐机单链检查:地面站与每架机建立遥测后,检查双向 RSSI/信噪比、丢包率(滑动窗口统计)与端到端延迟------三项数据记入部署日志作为当日链路基线(与式(6.1)~式(6.2)的预算对照:延迟超预算 50% 即停飞排查);
- 全网连通性检查:各机心跳广播互检------每机确认能收到全部其他机(小规模)或至少预期的邻居集合(大规模分层)------对应第 2.1 节的拓扑连通性验收:邻接矩阵在 5~10 s 内的平均连通度达到设计值,任何"间歇可达"节点标记排查;
- 频点与干扰检查:频谱仪扫描工作频段确认无异常占用;检查遥控链路与数据链路频段隔离;
- 动态模拟检查:地面拿机绕圈移动模拟起飞后几何变化,确认链路随距离/姿态变化符合预期(若有遮挡测试,验证第 2.1.1.2 节的断链/重建行为与滞回参数一致)。
连通性测试的通过判据建议与第 6.1.2.2 节匹配计算联动:实测丢包率超过设计假设(γ\gammaγ 模型参数)或延迟裕度耗尽(式(1.19)的 80%)时,当日部署降级(缩小规模、提高安全间距或取消飞行),而不是"带病起飞赌一把"。
8.2.1.2 各无人机状态的一致性校验
链路之外,还要验证各机"软件状态一致"------蜂群多数空中故障源于状态不一致(队形表版本不同、参数不同、固件不同)。状态一致性校验的检查项:固件版本与参数文件哈希(全网应一致或记录在案的差异)、队形表/任务表版本、RTK/定位基准源一致(各机应使用同一差分源,否则相对定位有系统偏差)、磁偏角/罗盘校准状态、电量与故障自检(每机 PX4 自检 + 自定义健康检查通过)。校验的判据为状态向量的一致允差:
maxi,j∥si−sj∥≤δcons(8.4)\max_{i,j} \left\| \mathbf{s}_i - \mathbf{s}j \right\| \leq \delta{\mathrm{cons}} \tag{8.4}i,jmax∥si−sj∥≤δcons(8.4)
其中 s\mathbf{s}s 为上述"关键状态签名"(版本哈希与配置摘要的拼接),δcons\delta_{\mathrm{cons}}δcons 一般取 0(哈希级一致)------队形表差一个字节都应在起飞前发现。此检查应自动化为"一键预飞检查"(起飞授权前由地面站自动汇总各机自检与签名比对,全绿才允许解锁),人工目视检查只作为兜底而非主通道。
8.2.2 实飞故障排查
8.2.2.1 编队失稳的常见原因与处理方法
即使仿真与 HIL 全绿,实飞仍可能出现编队失稳。排查方法论是"按式(8.1)的分层归因 + 录波回放"------失稳瞬间的机载录波(控制指令、估计状态、链路统计三路数据)是定因的唯一依据。常见原因按概率排序:
- 链路恶化引发的信息陈旧(最常见):编队误差控制使用延迟/丢失的邻居状态,等效于在控制环内注入大时延------按 1.2.2.1 节的阈值理论直接失稳或振荡。处置:降低编队机动强度(减速)、提高状态广播优先级、触发第 3.2.2.2 节事件触发补发;根治:检查链路容量与干扰(8.2.1.1);
- 定位基准不一致:各机定位源差异(RTK 失锁的机退化为普通 GPS)造成相对位置系统误差------编队"整体形状对但相对位置漂移"。处置:该机降级为"队形边缘角色"或悬停等待定位恢复;
- 气动耦合与尾流:编队间距过近时下游机的升力损失/抖动------处置:拉大间距或错开高度层(与第 7.1.1.2 节安全间距设计一致);
- 参数/固件不一致(部署期漏检)------按 8.2.1.2 判据当场发现,处置:停飞纠正;
- 传感器瞬时故障:GPS 跳变/磁干扰------处置:飞控内置故障检测切换估计源,编队层按第 7.3.2.2 节的"丢失确认"逻辑去抖。
处置总原则:先保安全(脱离编队/悬停/返航),后查原因------失稳时的第一动作永远是"解体降级"而非"尝试修复"(对应第 6.2 章执行层超时降级设计)。
8.2.2.2 通信中断后的集群自恢复流程
全链路中断(射频干扰、遮挡、中继机失效)是蜂群的最坏工况,自恢复流程设计目标不是"不中断"(物理上不可能)而是**"中断后可预期地恢复"**。恢复流程分四阶段:
- 检测与确认:节点超时未收到预期心跳(超时窗大于心跳周期的 3~5 倍以去抖)→ 判定链路中断;同时检查自身其他链路确认是"局部断"还是"全网断"(全网断时每机独立进入本地模式);
- 本地模式(安全姿态):各机按第 6.2.2.2 节的"指令超时即安全默认"执行------保持位置(悬停)、维持单机安全(不与邻居指令交互、不执行队形跟随,等待时长的上限由电池预算决定,超时自动返航);
- 重建与恢复:链路恢复后(心跳重见)执行"状态同步 + 队形重建"------各机广播自身位置与状态,通过第 3 章一致性收敛到共同队形参考,按第 7.1.1 节的初始化流程重新成形;恢复过程要降速(队形收敛速度按第 3.1.1.1 节保守步长),避免"刚连上就大机动";
- 任务重估:中断期间任务目标可能已失效(目标丢失、任务超时)------恢复后由任务层重估任务状态(第 5.1.2.1 节价值重估),决定继续/放弃/重分配。
自恢复的验收指标是恢复时间窗口 与恢复成功率:恢复时间上界可按"状态同步轮数 × 周期"预估并在地面注入中断测试中实测;恢复成功率要求在高丢包(中断+抖动混合)注入下达到任务规定值。自恢复演练应作为实飞大纲的固定科目,而非只在仿真中验证------第 11 章无人舰队的通信恢复(11.2 节)遵循同一套流程设计。
本章小结
本章给出蜂群"从仿真到实飞"的完整测试与部署体系:仿真层(Gazebo 动力学校准与式(8.1)分层归因、通信注入式(8.3)、HIL 接口与用例标准)、部署层(链路连通性测试、状态一致性式(8.4))与排障层(编队失稳归因表、通信中断四阶段自恢复)。方法论上可提炼为三条:偏差可归因 (任何仿真-实飞差异都要落到式(8.1)的某一层)、状态可校验 (起飞前哈希级一致)、失效可预期(中断/故障都有声明好的恢复流程与指标)。这套体系同样适用于第 11 章无人舰队的测试与部署,彼时只是把"飞行"换成"航行"、把空间障碍换成水流与规则约束。
思考与练习
- 搭建 3 机 Gazebo+PX4 SITL 环境:用第 4 章偏移一致编队跑通"起飞→成形→绕圈",测量各机位置误差包络并报告 RTF。
- 在题 1 环境中注入链路延迟(式(8.3)),从 0 逐步增大到 2 倍 τmax\tau_{\max}τmax(第 1.2.2.1 节),记录编队误差包络发散点,与理论阈值对比。
- 编写一个 HIL 注入用例:GPS 跳变 20 m 持续 2 s,断言飞控估计器在 5 s 内回到 1 m 内精度;再注入单桨失效,验证降级行为符合预期并记录恢复时间。
- 设计 10 项"编队保持"功能用例并声明每项的通过判据(前置状态/操作/指标);把其中 3 项改为注入用例并给出失效模型与恢复预期。
- 仿真"全场通信中断 30 s"场景(第 8.2.2.2 节):记录各机本地模式行为、恢复后的队形重建时间与任务重估结果,对照第 7.1.1 节初始化流程检查重建步骤是否可复用。
参考文献
1 Koenig N, Howard A. Design and use paradigms for Gazebo, an open-source multi-robot simulatorC//Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS). Sendai: IEEE, 2004: 2149--2154.
2 Furrer F, Burri M, Achtelik M, et al. RotorS---a novel Gazebo MAV simulator for education and researchM//Robot Operating System (ROS): The Complete Reference. Cham: Springer, 2016: 595--625.