Skip to content

第15章 多机器人系统与通信

15 第 15 章 多机器人系统与通信

当单个机器人的能力无法满足任务需求时,多机器人协作成为必然选择。多个机器人如何高效通信、如何协调行动、如何分配任务——这些问题构成了多机器人系统(Multi-Robot Systems, MRS)的核心挑战。本章从通信基础出发,到协同算法,再到 ROS2 多机器人工程实践,系统构建多机器人系统的知识框架。

学习目标:

  • 理解多机器人系统的分类、架构与通信模型;
  • 掌握 ROS2 多机器人通信配置(命名空间、DDS 域、Topic 重映射);
  • 了解多机器人协同的核心算法(编队控制、任务分配、共识);
  • 了解无线通信技术在多机器人系统中的应用(WiFi、MQTT、Mesh、LoRa);
  • 能设计并实现基于 ROS2 的多机器人协作系统。

15.1 多机器人系统概述

15.1.1 为什么需要多机器人

表 15-1 单机器人在以下场景中能力受限:

场景 单机器人的局限 多机器人的优势
大面积搜索救援 耗时长、覆盖慢 并行搜索,大幅缩短时间
仓储物流 单点吞吐瓶颈 多 AGV 并行搬运,提高吞吐
环境监测 空间采样稀疏 分布式传感,密集覆盖
协作搬运 载重受限 多机协作搬运大型物体
对抗/竞赛 单兵作战 战术配合、角色分工

多机器人系统的核心优势:并行性(同时执行任务)、冗余性(单体故障不影响全局)、可扩展性(增减机器人适应任务规模)。

15.1.2 系统分类

图 15-1 上图直观呈现了系统分类的组成要素与数据通路,有助于理解系统整体的工作机理。


15.2 多机器人系统架构

15.2.1 集中式架构

一个中央控制器收集所有机器人的状态,统一规划决策,再将指令下发。

R1 R2 R3

图 15-2 上图以框图形式描绘了集中式架构的系统架构,清晰呈现了各模块之间的连接关系与信号流向。

表 15-2 集中式架构

特点 说明
优势 全局最优决策、容易实现
劣势 单点故障、通信瓶颈、可扩展性差
适用 小规模(<10 台)、通信可靠环境

上表对集中式架构中各方案的特性进行了横向对比,便于读者根据实际需求选择最合适的技术路线。

15.2.2 分布式架构

每个机器人独立决策,仅通过局部通信与邻居交换信息。

R1 R2 R3 R4

图 15-3 该框图展示了分布式架构的核心结构,读者可以从中把握各功能单元的层次划分与协作方式。

表 15-3 分布式架构

特点 说明
优势 鲁棒性强、可扩展、无单点故障
劣势 难以获得全局最优、算法复杂
适用 大规模集群、通信受限环境

通过上表的对比可以看出,不同方案在特点、说明等方面各有优劣,实际选型时应结合具体应用场景综合权衡。

15.2.3 混合式架构

分层结构:上层少量协调器负责全局任务分配,下层小组内分布式协作。

R1 R2 R3 R4 长L1 长L2

图 15-4 上图直观呈现了混合式架构的组成要素与数据通路,有助于理解系统整体的工作机理。

结合了集中式的全局视野和分布式的鲁棒性,是实际工程中最常用的架构。


15.3 多机器人通信技术

15.3.1 通信需求分析

表 15-4 通信需求分析

需求 说明
低延迟 实时协调需要 <100ms 端到端延迟
可靠性 控制指令不可丢失
带宽 点云/图像共享需要高带宽
覆盖范围 室外场景需要远距离通信
可扩展 支持动态增减机器人

上表对通信需求分析的核心信息进行了结构化整理,读者可根据需要快速查阅相关内容。

15.3.2 ROS2 DDS 通信

ROS2 基于 DDS(Data Distribution Service)标准,天然支持多机器人分布式通信:

  • 去中心化发现:无需中央服务器,节点自动发现彼此;
  • QoS 可配置:不同数据流使用不同可靠性等级;
  • Topic 隔离:通过命名空间和 Domain ID 隔离不同机器人。

15.3.3 WiFi 与 MQTT

WiFi 是多机器人室内通信的首选,提供高带宽和低延迟:

  • 802.11ac/ax 支持 Gbps 级带宽
  • 覆盖范围 50-100m(室内)
  • 支持 ROS2 DDS 直接通信

MQTT 适合跨网络/跨域的多机器人管理:

  • 轻量级发布-订阅协议
  • 支持 QoS 0/1/2
  • 通过云端 Broker 实现 NAT 穿透
  • 适合状态上报、远程监控、命令下发

MQTT MQTT Broker Rob t 1 Rob t 2 pub state pub state sub state sub cmd sub cmd pub cmd

图 15-5 上图以框图形式描绘了 WiFi 与 MQTT 的系统架构,清晰呈现了各模块之间的连接关系与信号流向。

15.3.4 Mesh 网络与 LoRa

表 15-5 Mesh 网络与 LoRa

技术 带宽 范围 适用场景
WiFi Mesh 室内扩展 仓储 AGV、室内服务机器人
Zigbee 100m 传感器网络
LoRa 极低 1-15km 农业、环境监测
5G/4G 蜂窝覆盖 户外无人机编队

15.4 ROS2 多机器人编程

15.4.1 命名空间隔离

ROS2 通过命名空间(Namespace)区分不同机器人的 Topic 和 Node:

# 机器人 1:所有话题自动加 /robot1 前缀
ros2 run my_robot_pkg controller --ros-args -r __ns:=/robot1

# 机器人 2
ros2 run my_robot_pkg controller --ros-args -r __ns:=/robot2

# 结果:
# /robot1/cmd_vel, /robot1/odom, /robot1/scan
# /robot2/cmd_vel, /robot2/odom, /robot2/scan

15.4.2 Domain ID 隔离

DDS Domain ID 实现网络级隔离,不同 Domain 的节点完全不可见:

# 组 A(仿真环境)
export ROS_DOMAIN_ID=10
ros2 launch simulation.launch.py

# 组 B(真实机器人)
export ROS_DOMAIN_ID=20
ros2 launch real_robot.launch.py

跨域通信需要专门的桥接工具(如 domain_bridge)。

15.4.3 多机器人 Launch 文件

# launch/multi_robot.launch.py
from launch import LaunchDescription
from launch_ros.actions import Node, PushRosNamespace, GroupAction

def generate_launch_description():
    robots = ['robot1', 'robot2', 'robot3']
    nodes = []

    for robot_name in robots:
        group = GroupAction([
            PushRosNamespace(robot_name),
            Node(
                package='my_robot_pkg',
                executable='controller',
                name='controller',
                parameters=[{
                    'robot_id': robot_name,
                    'initial_x': robots.index(robot_name) * 2.0,
                }],
                remappings=[
                    ('cmd_vel', 'cmd_vel'),
                    ('odom', 'odom'),
                ],
            ),
            Node(
                package='my_robot_pkg',
                executable='sensor_node',
                name='sensor',
            ),
        ])
        nodes.append(group)

    return LaunchDescription(nodes)

15.4.4 多机器人 TF 管理

每个机器人需要独立的 TF 树,通过命名空间自动隔离:

laser laser map( rob t2 base link robot1 robot2 robot1/odom robot2/odom robot1/ base_link robot1/ robot2/ camera camera 人TF

图 15-6 该框图展示了多机器人 TF 管理的核心结构,读者可以从中把握各功能单元的层次划分与协作方式。


15.5 多机器人协同算法

15.5.1 编队控制(Formation Control)

编队控制使多个机器人保持预设的几何构型移动。

领航-跟随法(Leader-Follower)

一个领航机器人规划路径,跟随者保持相对位置。

# follower_controller.py
import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist, PoseStamped
import math

class FollowerController(Node):
    def __init__(self):
        super().__init__('follower_controller')
        # 期望相对位置(在 leader 坐标系下)
        self.desired_dx = -1.0  # leader 后方 1m
        self.desired_dy = 0.5   # leader 左侧 0.5m

        self.leader_pose = None
        self.my_pose = None

        self.create_subscription(
            PoseStamped, '/leader/pose', self.leader_cb, 10)
        self.create_subscription(
            PoseStamped, 'pose', self.my_pose_cb, 10)
        self.cmd_pub = self.create_publisher(Twist, 'cmd_vel', 10)
        self.create_timer(0.1, self.control_loop)

    def leader_cb(self, msg):
        self.leader_pose = msg.pose

    def my_pose_cb(self, msg):
        self.my_pose = msg.pose

    def control_loop(self):
        if self.leader_pose is None or self.my_pose is None:
            return

        # 计算目标位置
        target_x = self.leader_pose.position.x + self.desired_dx
        target_y = self.leader_pose.position.y + self.desired_dy

        # 计算误差
        dx = target_x - self.my_pose.position.x
        dy = target_y - self.my_pose.position.y
        distance = math.sqrt(dx*dx + dy*dy)
        angle = math.atan2(dy, dx)

        # 简单比例控制
        cmd = Twist()
        cmd.linear.x = min(0.5, 0.8 * distance)
        cmd.angular.z = 2.0 * angle
        self.cmd_pub.publish(cmd)

虚拟结构法(Virtual Structure)

将编队视为一个刚体,每个机器人是该刚体上的一个点。刚体的运动定义编队的整体运动,每个机器人追踪其在刚体上的目标点。

基于势场的方法

为机器人间定义虚拟弹簧力,平衡排斥(防碰撞)和吸引(保持队形):

$$ F_i = \sum_{j \neq i} \left[ f_{attract}(d_{ij} - d_{ij}^*) + f_{repel}(d_{ij}) \right] $$

15.5.2 任务分配(Task Allocation)

表 15-6 多机器人任务分配(MRTA)问题:将 $M$ 个任务分配给 $N$ 个机器人,优化总代价。

方法 类型 特点
匈牙利算法 集中式 最优分配,$O(n^3)$
拍卖法(Market-Based) 分布式 机器人竞价,去中心化
贪心分配 集中/分布 简单快速,次优
遗传算法 集中式 大规模问题,近似最优

拍卖法原理:

T1, T2, T3 R2 R1 R2 R3 5 3 7 广 行T1

图 15-7 上图直观呈现了任务分配(Task Allocation)的组成要素与数据通路,有助于理解系统整体的工作机理。

15.5.3 共识算法(Consensus)

共识算法使分布式机器人在无中央控制器的情况下,对某个值(如目标位置、编队中心)达成一致。

平均共识

每个机器人 $i$ 维护一个状态值 $x_i$,通过与邻居的迭代更新趋向全局平均:

$$ x_i(k+1) = x_i(k) + \epsilon \sum_{j \in N_i} (x_j(k) - x_i(k)) $$

其中 $N_i$ 是 $i$ 的邻居集合,$\epsilon$ 是收敛步长。当通信图连通时,所有 $x_i$ 最终收敛到初始值的平均。

应用场景:

  • 分布式估计(多传感器融合)
  • 编队中心计算
  • 分布式决策

15.6 多机器人 SLAM 与导航

15.6.1 多机器人 SLAM

表 15-7 多机器人同时建图可大幅加速环境探索,但面临额外挑战:

挑战 说明
地图合并 不同机器人的局部地图需要对齐和融合
相对定位 机器人之间的初始相对位姿可能未知
通信带宽 原始传感器数据传输量大
数据关联 不同机器人观测到的同一区域需要正确匹配

策略:

  • 集中式:所有机器人将数据发送到中央服务器合并——简单但带宽需求高
  • 分布式:机器人间直接交换压缩地图信息——带宽节省但算法复杂
  • 相遇融合:当两个机器人在同一区域相遇时,利用共同观测对齐地图

15.6.2 多机器人导航

Nav2 原生支持多机器人导航,通过命名空间隔离:

# 机器人 1
ros2 launch nav2_bringup bringup_launch.py \
  namespace:=robot1 use_namespace:=True \
  map:=/maps/shared_map.yaml

# 机器人 2
ros2 launch nav2_bringup bringup_launch.py \
  namespace:=robot2 use_namespace:=True \
  map:=/maps/shared_map.yaml

多机器人导航的额外考虑:

  • 冲突检测与避免:防止机器人之间碰撞(交通管理)
  • 路径协调:在狭窄通道中协商通行优先级
  • 共享代价地图:将其他机器人的位置标记为动态障碍

15.7 群体机器人(Swarm Robotics)

15.7.1 群体智能原理

群体机器人从自然界的蜂群、蚁群、鱼群中汲取灵感。核心思想:简单个体 + 局部规则 = 复杂群体行为。

关键特征:

  • 简单个体:每个机器人能力有限,只有局部感知和通信;
  • 局部交互:仅与邻近个体交互,无全局信息;
  • 涌现行为:群体层面呈现出个体层面不具备的智能行为;
  • 自组织:无外部控制器,行为从局部规则自然涌现。

15.7.2 经典群体行为

Reynolds 三规则(Boids 模型)

  1. 分离(Separation):避免与临近个体碰撞
  2. 对齐(Alignment):速度方向趋向邻居平均方向
  3. 聚合(Cohesion):位置趋向邻居平均位置

Reynolds ←→ ←→

图 15-8 上图以框图形式描绘了经典群体行为的系统架构,清晰呈现了各模块之间的连接关系与信号流向。

$$ \mathbf{v}i = w_s \cdot \mathbf{f}{sep} + w_a \cdot \mathbf{f}{align} + w_c \cdot \mathbf{f}{cohesion} $$

蚁群优化(Ant Colony Optimization)

通过信息素(Pheromone)实现隐式通信。机器人在环境中留下标记,后来者根据标记强度选择路径——用于多机器人路径规划和搜索覆盖。


15.8 工程实例:多机器人协作巡检系统

15.8.1 系统架构

RViz2 DDS WiFi R1 R2 R3 R4 R5 micr ROS ROS2 SLAM ROS2) 盘+ 位+

图 15-9 该框图展示了系统架构的核心结构,读者可以从中把握各功能单元的层次划分与协作方式。

15.8.2 代码示例:任务分配节点

# task_allocator.py
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
import json

class TaskAllocator(Node):
    """基于简单拍卖的多机器人任务分配"""
    def __init__(self):
        super().__init__('task_allocator')
        self.robots = {}       # robot_id → pose
        self.tasks = []        # 待分配任务列表
        self.bids = {}         # task_id → {robot_id: cost}

        # 订阅机器人状态
        self.create_subscription(
            String, '/robot_status', self.status_cb, 10)
        # 发布任务分配
        self.task_pub = self.create_publisher(
            String, '/task_assignment', 10)
        # 定时触发分配
        self.create_timer(5.0, self.allocate)

    def status_cb(self, msg):
        data = json.loads(msg.data)
        self.robots[data['id']] = data['pose']
        if 'bid' in data:
            self.bids.setdefault(data['task_id'], {})[
                data['id']] = data['bid']

    def allocate(self):
        for task in self.tasks:
            if task['id'] in self.bids:
                bids = self.bids[task['id']]
                winner = min(bids, key=bids.get)
                assignment = json.dumps({
                    'task_id': task['id'],
                    'robot_id': winner,
                    'goal': task['goal'],
                })
                self.task_pub.publish(String(data=assignment))
                self.get_logger().info(
                    f"Task {task['id']}{winner}")

15.9 本章小结与拓展资源

15.9.1 关键知识点回顾

  1. 系统架构:集中式、分布式、混合式三种架构的权衡;
  2. 通信技术:ROS2 DDS 原生多机器人支持、MQTT 跨网管理、Mesh/LoRa 远程通信;
  3. ROS2 多机器人:命名空间隔离、Domain ID、多机器人 Launch 和 TF 管理;
  4. 协同算法:编队控制(领航-跟随、虚拟结构、势场)、任务分配(拍卖法)、共识算法;
  5. 多机器人 SLAM/导航:地图合并、相遇融合、冲突避免;
  6. 群体机器人:Reynolds 三规则、蚁群优化、涌现行为。

15.9.2 推荐学习资源

表 15-8 推荐学习资源

资源 说明
《Multi-Robot Systems》(Yan, Jouandeau, Cherif) 多机器人系统综述
《Swarm Intelligence》(Bonabeau) 群体智能经典
ROS2 Multi-Robot ROS2 多机器人教程
Nav2 Multi-Robot Nav2 多机器人配置
《Probabilistic Robotics》Ch. 9 多机器人 SLAM

以上内容归纳了推荐学习资源的关键要素,为后续深入学习和工程实践提供了参考依据。

15.9.3 课后练习

  1. 架构分析:比较集中式和分布式架构的优缺点。如果要管理 100 台仓储机器人,你会选择哪种架构?说明理由。
  2. ROS2 实践:用命名空间在同一台机器上启动 3 个 Turtlesim 节点,分别控制它们画出不同图案。
  3. 编队控制:实现一个领航-跟随编队控制器,让 3 个 Turtlesim 保持三角形队形移动。
  4. 任务分配:编写一个简单的拍卖法任务分配器,将 5 个巡检点分配给 3 个机器人,使总行驶距离最小。
  5. 综合挑战:在 Gazebo 中实现两个机器人的协作 SLAM——各自探索不同区域,最终合并为一张完整地图。

15.10 本章测验

Quiz results are saved to your browser's local storage and will persist between sessions.

#

1) 关于集中式多机器人架构,下列哪些描述是正确的?

#

2) ROS2 中实现多机器人 Topic 隔离的推荐方法是:

#

3) 在领航-跟随(Leader-Follower)编队控制中:

#

4) 拍卖法(Market-Based)任务分配的正确描述是:

#

5) 群体机器人的 Reynolds Boids 模型的三条基本规则是:

Quiz Progress

0 / 0 questions answered (0%)

0 correct


本章参考资料:ESP-IDF/ESP8266 SDK 文档、MQTT 协议规范 (OASIS)、STUN/TURN/ICE RFC 文档与物联网安全最佳实践。