ROS 2 与 MQTT 集成
目标:让机器人内部的 ROS 2 话题与外部 MQTT 世界互通
本地示例工程:../开源项目/ros2_mqtt_client(ika-rwth-aachen/mqtt_client)
1. 为什么要桥接
| 域 | 典型中间件 |
|---|---|
| 机器人内部实时控制 / 感知 | ROS 2(DDS)、EtherCAT、CANopen |
| 厂级 SCADA / 云 / 移动 App | MQTT、HTTP、Kafka 等 |
MQTT 擅长:跨网络、跨语言、跨组织的遥测与命令;
不替代 DDS 做车内硬实时。
1 | [ROS 2 Nodes / DDS] |
2. mqtt_client 能做什么(概念)
(以仓库 README 为准)
- 将 ROS 话题桥到 MQTT Topic(及反向)
- 配置 QoS、话题映射、序列化方式
- 作为 ROS 2 包接入 launch
本地路径:../开源项目/ros2_mqtt_client
3. 集成设计要点
3.1 话题映射
明确约定,例如:
1 | ROS: /arm/joint_states |
避免直接把 ROS 命名空间无前缀暴露到公网 Broker。
3.2 序列化
| 方案 | 说明 |
|---|---|
| JSON | 易读、易与 Web 对接;体积大 |
| CDR / 自定义二进制 | 紧凑;对端要有同解码 |
| Protobuf | 跨语言契约清晰 |
桥接处是契约边界:加版本字段,避免静默不兼容。
3.3 QoS 与频率
- 高频率 TF / 点云:不要无脑桥到 MQTT
- 状态摘要、告警、任务指令:适合 MQTT
- 降采样、节流、关键字段抽取
3.4 安全
- 独立 MQTT 账号与 ACL
- TLS
- 命令 Topic 鉴权 + 应用层确认
- 安全相关急停保持在本地实时通道
4. 推荐落地步骤
- 本机起 Mosquitto,用
mosquitto_pub/sub打通 - 用 Paho Python 模拟云端订阅者
- 接入
mqtt_client,先桥一条低频率 String/JSON - 再扩到状态摘要;命令通道加幂等与超时
- 压测:慢订阅、断网重连、Retain/LWT 行为
5. 与其它仓库文档的关系
- DDS 细节:
../../ros2doc/(若有 CycloneDDS 等笔记) - 实时总线:
../../EtherCAT/、../../CANopen/ - MQTT 排障:
08-调试与运维.md
下一篇:08-调试与运维.md
正在加载留言…