3. 多机器人系统架构

当一台机器人扩展到多台机器人协同作业时,系统架构的选择直接决定了任务编排的复杂度、通信开销与容错能力。在 ROS2 中,多机器人系统通常被归纳为三种典型架构:集中式、分布式与混合式。它们并不是互斥的技术,而是围绕“谁来做决策、谁来协调、谁来执行”这三个问题形成的不同权衡。理解这三种架构的差异,再配合命名空间与域隔离手段,才能让行为树任务编排真正落地。

一、三种架构的核心原理

集中式架构是指存在一个中心协调节点(或中心调度器),所有机器人的状态上报、任务分配、行为树 tick 都由该中心统一处理。它的优点是全局信息完整、任务分配容易做到最优、调试时只需观察一个入口。缺点是中心节点成为单点故障,且随着机器人数量增加,通信带宽和计算负载会迅速集中到一处。

分布式架构没有全局中心,每台机器人运行自己的行为树与决策逻辑,机器人之间通过话题、服务或动作进行点对点协商。它的优点是扩展性好、单机故障不影响整体、通信路径短。缺点是全局一致性难以保证,容易出现任务冲突或资源争抢,调试时需要同时观察多个节点。

混合式架构则是在两者之间取平衡:设置一个轻量的协调层负责全局任务分解与资源分配,而每台机器人保留本地行为树负责具体执行与局部反应。协调层不直接控制每个关节或每个动作,只下发高层目标,本地行为树根据实时状态自主完成子任务。这种分层方式既保留了全局视野,又避免了中心节点过载。

多机器人系统三种架构对比 集中式 中心调度器 全局行为树 / 任务分配 机器人A 机器人B 机器人C 全局状态集中,决策统一 风险:单点故障、带宽集中 适用:小规模、强协同任务 如:多机编队搬运、集中调度 分布式 机器人A 机器人B 机器人C 各机自主决策,点对点协商 风险:全局一致性弱、易冲突 适用:大规模、松耦合任务 如:多机探索、区域覆盖 混合式 协调层 任务分解 / 资源分配 机器人A 本地行为树 机器人B 本地行为树 机器人C 本地行为树 全局协调 + 本地自主 兼顾全局视野与实时反应 适用:中大规模、分层任务 如:仓储分拣、多机巡检

二、命名空间:让同名节点与话题共存

在 ROS2 中,如果两台机器人各自运行 /cmd_vel、/odom、/scan,直接启动会发生话题名冲突,导致一台机器人的速度指令被另一台接收。命名空间(namespace)就是解决这一问题的第一层手段。通过为每台机器人分配独立前缀,所有话题、服务、动作和节点名都会自动带上该前缀。

# 启动机器人A,命名空间为 /robot_a
ros2 run my_robot bringup --ros-args -r __ns:=/robot_a

# 启动机器人B,命名空间为 /robot_b
ros2 run my_robot bringup --ros-args -r __ns:=/robot_b

# 查看话题列表,可见 /robot_a/cmd_vel 与 /robot_b/cmd_vel
ros2 topic list

在行为树中,命名空间通常通过黑板变量或参数注入。例如在 BehaviorTree.CPP 中,可以把 robot_name 作为输入端口传入动作节点,节点内部再拼接出完整话题名。这样同一棵行为树 XML 可以被多台机器人复用,只需替换命名空间参数即可。

三、域隔离:从通信层面彻底分开

命名空间解决的是“同一域内名字冲突”,而域隔离(Domain Isolation)解决的是“不同机器人组之间根本不应该互相发现”。ROS2 使用 DDS 作为底层通信中间件,每个域由 ROS_DOMAIN_ID 标识。不同域中的节点即使话题名相同,也不会互相通信。

# 机器人组1使用域10
export ROS_DOMAIN_ID=10
ros2 run my_robot bringup

# 机器人组2使用域20,与组1完全隔离
export ROS_DOMAIN_ID=20
ros2 run my_robot bringup
命名空间与域隔离通常配合使用:同一任务组内用命名空间区分个体,不同任务组之间用域隔离避免干扰。例如仓储场景中,AGV 组与机械臂组可以分属不同域,各自内部再用命名空间区分单机。

四、架构对比与选型清单

对比维度 集中式 分布式 混合式
决策位置 中心节点统一决策 各机器人自主决策 协调层决策 + 本地执行
全局一致性 强 弱 较强
容错能力 差,中心故障即瘫痪 好,单机故障影响小 较好,协调层可降级
扩展性 差,受中心带宽限制 好,近似线性扩展 较好,分层扩展
通信开销 高,全部汇聚中心 低,点对点通信 中,仅高层汇聚
典型场景 多机编队、集中调度 多机探索、区域覆盖 仓储分拣、多机巡检

五、案例:仓储分拣中的混合式落地

假设一个仓库中有 4 台 AGV 和 2 台机械臂。若采用集中式,中心节点需要同时处理 6 台设备的路径规划与抓取时序,一旦中心延迟,整条线都会停顿。若采用纯分布式,AGV 之间可能同时抢占同一个货架,机械臂也可能重复抓取同一目标。

更合理的做法是混合式:协调层运行一棵全局行为树,负责“订单分解—货架分配—AGV 与机械臂配对”;每台 AGV 和机械臂各自运行本地行为树,负责“导航到目标—避障—抓取—返回”。协调层通过 /coord/task_assign 下发目标,本地通过 /robot_x/status 上报状态。命名空间保证 6 台设备话题互不冲突,域隔离则把“分拣区”与“充电区”分成两个域,避免充电桩通信干扰分拣任务。

常见误区:认为“分布式一定比集中式好”。实际上,当任务需要强全局约束(如多机同步搬运同一物体)时,纯分布式很难保证时序一致,此时集中式或混合式反而更可靠。架构选择应服从任务语义,而不是追求技术潮流。

六、复盘:架构选型的三个判断问题

  1. 任务是否需要全局最优? 若需要统一分配资源、避免冲突,优先集中式或混合式;若任务可自然分解为独立子任务,分布式更合适。
  2. 系统能承受单点故障吗? 若不能,避免纯集中式;混合式中协调层应设计降级策略,例如失联后各机转入本地安全行为树。
  3. 通信规模是否可控? 机器人数量超过 10 台时,集中式中心带宽容易成为瓶颈,建议采用混合式分层,或按域隔离拆分为多个子群。

命名空间与域隔离是架构落地的“基础设施”:命名空间让同一域内的多台机器人可以复用同一套行为树与节点,域隔离让不同任务组在通信层面彻底解耦。二者结合,才能让集中式、分布式或混合式架构在 ROS2 中稳定运行,并为后续行为树任务编排提供清晰的通信边界。