46. 多机编队与 Qt 控制界面¶
46.1 学习目标¶
让多台机器人和 Qt Application Framework(Qt)界面接入既有 ROS 2 系统,不产生节点重名、话题串车或重复速度发布。Qt 用于构建桌面图形界面;本章把它当作 ROS 2 客户端使用。
图形界面框架可以显示机器人状态并通过 ROS 2 接口发送目标,但界面程序仍是普通 ROS 2 客户端,不能代替底盘驱动和安全控制器。
46.2 适用范围¶
ROS 2 多机器人编队与 Qt 控制界面。不同车型的编队接口和控制包需要分别核对。
46.3 操作前检查¶
- 单车底盘和网络分别通过。
- 每台机器有唯一名称、IP、命名空间和配置记录。
- 急停和单车停止命令不依赖编队节点。
46.4 工作原理¶
多机系统可以共享网络,但每台机器的状态和命令要有明确归属。逻辑标识符(Logical Identifier, ID)用于在配置和界面中区分机器人;命名空间给节点和话题加前缀;Domain ID可以把不同 ROS 2 通信域分开。Qt 客户端只订阅反馈并发布经过限制的目标,不再启动一套底盘驱动,也不把界面按钮状态当成机器人真实状态。
46.5 操作步骤¶
- 为每台机器人分配固定逻辑 ID 和命名空间。
- 检查节点、话题、TF frame 和参数是否带唯一前缀。
- 逐台上线,只验证状态订阅,不先发编队命令。
- 启动 Qt 后用
ros2 topic info --verbose核对发布者和订阅者。 - 使用低速单车选择测试,确认不会控制错误机器人。
- 再运行编队,记录网络延迟、丢包和掉队处理。
- 关闭界面或编队节点,确认各底盘停止或回到安全模式。
46.6 验收标准¶
- 节点、话题和 TF 无跨车冲突。
- Qt 显示来自机器人反馈,而非本地假定。
- 选择单车时其他机器人不响应。
- 网络中断和上层退出后底盘安全停止。
46.7 故障排查¶
| 现象 | 检查 |
|---|---|
| 多车互相串话题 | 命名空间、绝对话题名和 remap |
| TF 树混在一起 | frame 前缀和 robot_state_publisher |
| Qt 显示正常但车不动 | 发布话题、QoS、控制优先级和底盘订阅 |
| 掉线后继续走 | 命令超时和失联策略 |
代码资源边界
教材源码仓库没有与本章绑定的多机 Qt 控制工程;本章只给出命名空间、反馈与失联安全边界。