弹性无人机蜂群设计:具备安全通信的无领导者容错网状网络

引言

无人机已不再是单打独斗的角色。现代任务——搜索救援、精准农业、基础设施巡检、安防作业——日益依赖蜂群:由多架UAV协同编队,分工完成任务,共享态势感知,实现单机无法达成的目标。

然而,这种协同带来了一个艰巨的工程难题:当没有地面控制站(GCS)、没有中央服务器,也无法保证任何单架无人机能存活至任务结束时,系统该如何运作?

本文介绍如何设计无人机蜂群软件,使其能够在对等网状网络上完全自主运行,在指挥无人机故障时动态选举领导者,并抵御信号干扰和通信劫持——这是对抗性环境中威胁蜂群凝聚力的两大最危险威胁。

中国合规背景: 无人机蜂群系统若采集或传输个人图像、位置或个人信息,须遵守《个人信息保护法》(PIPL)《数据安全法》的相关要求。应用于关键信息基础设施(CII)领域——如能源、交通、通信等——还须符合《网络安全法》网络安全等级保护2.0(等保2.0)标准,通信加密模块建议优先选用符合国密标准(SM2/SM3/SM4)的算法。军事或安全敏感用途须按《武器装备科研生产许可管理条例》申请相关许可。


核心设计问题

传统无人机系统将GCS作为权威中心。GCS下发指令,无人机执行。一旦移除GCS——无论是出于设计考量(长距离自主任务)还是意外情况(干扰、操作员失联)——蜂群必须能够自主治理。

由此产生三项核心需求:

1. 去中心化协同 — 任意无人机在必要时都必须能够指挥蜂群。不存在单点故障。

2. 持久化任务状态 — 每架无人机必须保存任务计划的完整副本,确保即使个别机体损失,任务也能继续执行。

3. 认证通信 — 在没有中央权威的网状网络中,每条消息都必须可通过密码学手段验证。数据包到达并不等于可以信任。


Layer 1:网状网络

没有中央路由器,无人机通过无线网状网络进行点对点通信。每架无人机维护一张邻居表——记录能够听到的对等节点列表、信号强度及最后一次心跳时间戳。

适用于网状层的协议选项:

  • MAVLink over 802.11s Wi-Fi mesh — 适合研究和民用场景,可复用现有MAVLink工具链
  • FHSS无线电上的自定义UDP广播 — 更适用于对抗性环境(详见安全章节)
  • DDS(数据分发服务) — 专为实时去中心化发布/订阅设计,已应用于ROS 2,非常适合蜂群协同

网状网络中的每个节点定期广播包含自身ID、位置、电池电量和当前角色的 HELLO 数据包。这就是心跳机制——也是故障检测系统的基础。

图1 — 点对点网状拓扑(无中央权威)

flowchart TD
  D1["Drone 1\n(Commander)"]
  D2["Drone 2\n(Follower)"]
  D3["Drone 3\n(Follower)"]
  D4["Drone 4\n(Follower)"]
  D5["Drone 5\n(Follower)"]

  D1 -- "HELLO + tasks" --> D2
  D1 -- "HELLO + tasks" --> D3
  D1 -- "HELLO + tasks" --> D4
  D2 -- "HELLO + status" --> D1
  D3 -- "HELLO + status" --> D1
  D4 -- "HELLO + status" --> D1
  D2 -- "P2P position" --> D3
  D3 -- "P2P position" --> D4
  D4 -- "P2P position" --> D5
  D5 -- "P2P position" --> D2

单机软件栈

图2 — 单架无人机软件层次结构

flowchart TD
  ME["Mission Execution\nTask state machine, waypoints"]
  CE["Consensus / Election\nHeartbeat timer, role FSM, vote logic"]
  MN["Mesh Network\nUDP socket pool, neighbor discovery, routing"]
  HL["Hardware Abstraction (HAL)\nGPS, IMU, MAVLink to flight controller"]
  SW["Safety Watchdog\nIndependent timer thread — hover or RTH on timeout"]

  ME --> CE
  CE --> MN
  MN --> HL
  SW -. "monitors all layers" .-> ME
  SW -. "monitors all layers" .-> CE
  SW -. "monitors all layers" .-> MN

安全看门狗独立于所有层运行。若在 T_safe 秒内未收到有效指令或心跳——包括无人机自身担任指挥角色时——将触发安全悬停或返航(RTH)。这是对抗软件死锁的最后一道防线。


Layer 2:角色状态机

每架无人机运行一个三状态有限状态机(FSM)。

图3 — 无人机角色状态机

flowchart TD
  F["FOLLOWER\nDefault state\nExecute tasks, listen for heartbeat"]
  C["CANDIDATE\nElection triggered\nBroadcast ELECTION + priority score"]
  CM["COMMANDER\nQuorum achieved\nIssue tasks, broadcast LEADER"]

  F -- "Heartbeat timeout > 1.5s" --> C
  C -- "Wins quorum vote" --> CM
  C -- "Loses vote" --> F
  CM -- "New commander elected" --> F

FOLLOWER — 默认状态。监听指挥无人机的心跳,从本地任务计划副本中执行分配的任务,并持续向对等节点广播自身位置和状态。

CANDIDATE — 当超过 N × heartbeat_interval(通常为 3 × 500ms = 1.5秒)未收到指挥无人机心跳时进入此状态。广播包含自身ID和优先级分数的 ELECTION 消息,并从对等节点收集投票。

COMMANDER — 当超过半数对等节点投票支持时进入此状态。广播 LEADER 公告,从对等节点广播中重建蜂群状态表,并恢复任务分发。

选举优先级分数

当多架无人机同时触发选举时,优先级分数最高的获胜。实用的评分函数:

def priority_score(drone) -> float:
    battery_weight   = 0.5
    reach_weight     = 0.3
    role_weight      = 0.2

    battery_score = drone.battery_pct / 100.0
    reach_score   = len(drone.visible_peers) / MAX_SWARM_SIZE
    role_score    = 1.0 if drone.mission_role == "SCOUT" else 0.5

    score = (battery_weight * battery_score +
             reach_weight   * reach_score   +
             role_weight    * role_score)

    # 使用无人机UUID作为决胜局 — 确定性,永不平局
    return (score, drone.uuid)

脑裂解决

若蜂群分裂为两个断开连接的组,每组将各自选出一位指挥。重新连接时,两位指挥比较 (election_term, timestamp) 元组。轮次较高者胜出。同一轮次则时间戳较新者胜出。失败者降格为FOLLOWER,并向胜者请求完整的任务状态同步。


Layer 3:任务状态同步

任务计划的每次变更都携带单调递增的版本号。当新指挥接管时:

  1. 广播携带最后已知版本号的 SYNC_REQUEST
  2. 追随者用自身版本号和任务状态哈希回应
  3. 指挥识别最高版本的权威状态,并将其作为规范计划重新广播
  4. 所有无人机确认接收 — 指挥在恢复任务分发前将蜂群标记为已同步

任务本身被设计为幂等状态机。若无人机在任务执行中途失去通信,它将执行到任务中定义的最近安全检查点,然后悬停等待重新连接。不会中止,也不会从头重试。

图4 — 指挥故障转移后的任务状态同步

flowchart TD
  A["Commander fails\nHeartbeat timeout detected by followers"]
  B["Election completes\nNew commander elected"]
  C["New commander broadcasts\nSYNC_REQUEST + last known version"]
  D["All followers respond\nversion number + state hash"]
  E["New commander identifies\nhighest-version authoritative state"]
  F["Rebroadcast canonical\nmission plan to all drones"]
  G["All drones ACK\nMission resumes"]

  A --> B
  B --> C
  C --> D
  D --> E
  E --> F
  F --> G

Layer 4:抗干扰(物理层安全)

信号干扰是无人机操作中最常见的物理层攻击。攻击者用噪声淹没工作频率,使无人机陷入"聋哑"状态。

基本防御在于让频率变得不可预测。

跳频扩频(FHSS)

蜂群中所有无人机共享预先约定的伪随机跳频序列——通常在900 MHz或2.4 GHz频段每秒跳频50至100次。干扰机必须同时覆盖整个频段才能奏效,这需要比定向窄带干扰机多出数量级的功率。

Time:  T0        T1        T2        T3        T4
Freq:  920 MHz → 2412 MHz → 915 MHz → 2437 MHz → 922 MHz ...
         ↑ 任务加载时蜂群所有成员共享的序列

直接序列扩频(DSSS)

DSSS使用扩频码将信号扩展至宽带宽。对外部观察者——以及干扰机——而言,信号看起来像噪声。解码需要正确的码序列。这与GPS信号使用的原理相同。

双频段运行

900 MHz用于远距离网状骨干网(更好的障碍物穿透力,更难被宽带干扰),2.4/5.8 GHz用于高带宽短距离协同。针对单一频段的干扰机无法切断所有通信。

干扰检测与自主降级

SNR_THRESHOLD = -85  # dBm
JAM_DETECTION_WINDOW_MS = 300

if rolling_avg_snr(window=JAM_DETECTION_WINDOW_MS) < SNR_THRESHOLD:
    switch_to_backup_hop_sequence()
    reduce_coordination_to_position_broadcast_only()
    execute_last_valid_mission_segment()

图5 — 抗干扰检测与优雅降级流程

flowchart TD
  A["Normal operation\nFHSS primary hop sequence\nFull mesh coordination"]
  B{"SNR below\nthreshold\n> 300ms?"}
  C["Jam detected\nSwitch to backup hop sequence"]
  D["Reduce comms\nPosition broadcast only"]
  E["Execute last valid\nmission segment autonomously"]
  F{"SNR\nrecovered?"}
  G["Restore full\nmesh coordination"]
  H["Safe hover or RTH\nif T_safe exceeded with no signal"]

  A --> B
  B -- "No" --> A
  B -- "Yes" --> C
  C --> D
  D --> E
  E --> F
  F -- "Yes" --> G
  G --> A
  F -- "No, timeout" --> H

Layer 5:密码认证

干扰拒绝通信。欺骗污染通信。能够向网状网络注入数据包的攻击者可以发出虚假任务指令、触发虚假领导者选举或报告虚假位置。

单机非对称签名(Ed25519)

每架无人机拥有在制造时生成并存储于硬件安全元件(HSE,如ATECC608A)中的Ed25519密钥对。私钥在物理上不可提取。

任务加载时,所有公钥分发给所有无人机。每个数据包都用发送方的私钥签名。未知ID或签名无效的数据包将被静默丢弃。

这意味着即使被俘获并重新编程的无人机也无法冒充合法蜂群成员。

重放攻击防护

每个数据包包含单调递增的序列号和随机随机数。接收方为每个发送方维护一个可接受序列号的滑动窗口。

数据包格式:
[ Drone ID (4B) | Seq+Nonce (12B) | Encrypted Payload | HMAC Tag (16B) | Ed25519 Sig (64B) | Hop TTL (2B) ]

国密适配建议: 在面向国内关键基础设施或政府项目部署时,可考虑将Ed25519替换为SM2椭圆曲线签名算法,将AES-256-GCM替换为SM4-GCM,以满足等保2.0对商用密码产品的合规要求。

载荷加密(AES-256-GCM)

所有载荷数据使用AES-256-GCM加密。GCM模式是一种AEAD密码——在单次处理中同时提供机密性和认证,这对计算资源有限的嵌入式目标至关重要。在无AES硬件加速的ARM Cortex-M平台上,ChaCha20-Poly1305是更轻量的替代选择。

图6 — 数据包接收认证流水线

flowchart TD
  A["Packet received\nover mesh"]
  B{"Drone ID\nin known list?"}
  C["Drop silently\nLog unknown sender"]
  D{"Sequence number\nin valid window?"}
  E["Drop silently\nReplay or out-of-order"]
  F{"Ed25519 signature\nvalid?"}
  G["Drop silently\nFlag sender as suspect"]
  H{"AES-GCM auth\ntag valid?"}
  I["Drop silently\nDecryption failure"]
  J["Decrypt payload\nPass to mission layer"]

  A --> B
  B -- "No" --> C
  B -- "Yes" --> D
  D -- "No" --> E
  D -- "Yes" --> F
  F -- "No" --> G
  F -- "Yes" --> H
  H -- "No" --> I
  H -- "Yes" --> J

Layer 6:GPS欺骗防护

广播虚假GPS信号的攻击者可以完全重定向无人机的导航——而无需触碰网状通信。

多星座GNSS — 使用同时追踪GPS(美国)、GLONASS(俄罗斯)和Galileo(欧盟)的接收机。同时独立欺骗所有三个系统需要复杂得多的设备。

通过扩展卡尔曼滤波器(EKF)的IMU交叉验证 — 将GPS与加速度计、陀螺仪和气压计数据融合。若GPS报告100ms内50米的位置跳变但IMU未报告相应加速度,则GPS更新被拒绝并回退至纯惯性推算导航。

信号质量监控 — 真实GPS信号来自多颗卫星,具有预期的信噪比和多普勒频移值。欺骗者通常产生单一异常强源信号,接收机可自动标记并拒绝。

图7 — GPS欺骗检测与EKF降级流程

flowchart TD
  A["GNSS fix received\nGPS + GLONASS + Galileo"]
  B{"Multi-constellation\nconsistent?"}
  C["Flag spoofing\nDiscard GNSS fix"]
  D{"Position delta vs\nIMU prediction\nwithin threshold?"}
  E["Reject GPS update\nLog anomaly"]
  F{"Signal SNR and\nDoppler normal?"}
  G["Flag strong single\nsource spoofing"]
  H["Accept GPS fix\nFuse into EKF\nwith accelerometer + baro"]
  I["Dead reckoning\nIMU-only navigation\nuntil GNSS recovers"]

  A --> B
  B -- "No" --> C
  C --> I
  B -- "Yes" --> D
  D -- "No (jump detected)" --> E
  E --> I
  D -- "Yes" --> F
  F -- "No (anomalous)" --> G
  G --> I
  F -- "Yes" --> H

密钥管理

密码系统的强度取决于密钥管理的严格程度。现实系统中最薄弱的环节不是算法本身,而是密钥的分发与存储方式。

制造时: 为每架无人机生成Ed25519密钥对。将私钥存储在硬件安全元件中。将FHSS跳频序列和网状网络参数作为锁定的配置包烧录。

任务加载时: 生成任务范围的AES-256-GCM会话密钥。通过安全USB或可信气隙配置站将所有公钥分发给所有无人机。以随机偏移量作为序列号起始值以防止猜测攻击。

任务结束 / 被俘风险时: 无人机应按命令从RAM中清零会话密钥,或在超过可配置的 T_timeout 未收到有效指令后自动执行(死人开关)。

无人机被攻陷时: 通过当前指挥签名广播撤销被攻陷无人机的公钥,所有对等节点将该ID加入本地黑名单。

图8 — 密码密钥生命周期

flowchart TD
  MFG["Manufacturing\nGenerate Ed25519 keypair\nStore private key in ATECC608A HSE\nFlash FHSS hop sequence"]
  LOAD["Mission load\nGenerate AES-256-GCM session key\nDistribute all public keys to all drones\nSet random sequence number offset"]
  FLY["In-flight\nSign every outgoing packet\nVerify every incoming packet\nRotate nonces per packet"]
  END{"Mission end\nor capture risk?"}
  ZERO["Zeroize session keys from RAM\nDead man switch if T_timeout exceeded"]
  COMP{"Drone\ncompromised?"}
  REV["Commander broadcasts\nsigned key revocation\nAll peers add to blocklist"]
  DONE["Keys invalidated\nDrone excluded from swarm"]

  MFG --> LOAD
  LOAD --> FLY
  FLY --> END
  END -- "Yes" --> ZERO
  END -- "No" --> COMP
  COMP -- "Yes" --> REV
  REV --> DONE
  COMP -- "No" --> FLY

实现起点

推荐技术栈
飞行控制器 通过MAVLink的PX4或ArduPilot
网状无线硬件 Doodle Labs RM-915-XT或同类FHSS SDR
网状路由 OLSR或BATMAN-adv(Linux)
选举/共识 C++或Rust实现的自定义Raft-inspired方案
Pub/sub协同 DDS(FastDDS/Cyclone)或自定义UDP多播
密码原语 libsodium(Ed25519、ChaCha20-Poly1305、AES-GCM);国密合规场景可替换为SM系列
密钥存储HSE Microchip ATECC608A
GPS接收机 u-blox F9P(多星座、抗欺骗标志)

总结

为自主对抗性通信环境设计无人机蜂群软件,需要从层次化视角思考。

网状层提供无中央依赖的点对点连接。选举层确保蜂群始终有且仅有一名指挥,并在故障发生后数秒内晋升替代者。任务状态层确保无论其他机体发生什么情况,每架无人机都能继续执行任务。物理安全层(FHSS/DSSS)使通信难以被干扰。密码层(Ed25519 + AES-GCM + 序列号)确保只有合法蜂群成员才能发出或接收指令。GPS保护(多GNSS + IMU融合)关闭导航攻击面。

在中国合规背景下,将无人机蜂群应用于关键信息基础设施须通过网络安全等级保护(等保2.0)三级或以上测评,通信加密模块建议选用经国家密码管理局认证的商用密码产品。数据跨境传输须符合《数据安全法》《个人信息保护法》的相关要求。

好消息是:所有基础原语都以经过验证的开源组件形式可用。工程挑战在于如何在真实无人机硬件的重量、功耗和算力约束下正确集成——这正是最有价值的工作所在。


Simplico 构建分布式嵌入式系统、AI基础设施及安全IoT平台。如果您正在从事自主系统或蜂群机器人领域,需要技术合作伙伴,欢迎访问 simplico.net 联系我们。


Get in Touch with us

Chat with Us on LINE

iiitum1984

Speak to Us or Whatsapp

(+66) 83001 0222

Related Posts

Our Products