ROS 2 与 MQTT 集成

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
2
3
4
5
6
7
[ROS 2 Nodes / DDS]

mqtt_client / 自定义桥

MQTT Broker

云平台 / 手机 / 其它产线系统

2. mqtt_client 能做什么(概念)

(以仓库 README 为准)

  • 将 ROS 话题桥到 MQTT Topic(及反向)
  • 配置 QoS、话题映射、序列化方式
  • 作为 ROS 2 包接入 launch

本地路径:../开源项目/ros2_mqtt_client


3. 集成设计要点

3.1 话题映射

明确约定,例如:

1
2
ROS:  /arm/joint_states
MQTT: siteA/robot1/arm/joint_states

避免直接把 ROS 命名空间无前缀暴露到公网 Broker。

3.2 序列化

方案 说明
JSON 易读、易与 Web 对接;体积大
CDR / 自定义二进制 紧凑;对端要有同解码
Protobuf 跨语言契约清晰

桥接处是契约边界:加版本字段,避免静默不兼容。

3.3 QoS 与频率

  • 高频率 TF / 点云:不要无脑桥到 MQTT
  • 状态摘要、告警、任务指令:适合 MQTT
  • 降采样、节流、关键字段抽取

3.4 安全

  • 独立 MQTT 账号与 ACL
  • TLS
  • 命令 Topic 鉴权 + 应用层确认
  • 安全相关急停保持在本地实时通道

4. 推荐落地步骤

  1. 本机起 Mosquitto,用 mosquitto_pub/sub 打通
  2. 用 Paho Python 模拟云端订阅者
  3. 接入 mqtt_client,先桥一条低频率 String/JSON
  4. 再扩到状态摘要;命令通道加幂等与超时
  5. 压测:慢订阅、断网重连、Retain/LWT 行为

5. 与其它仓库文档的关系

  • DDS 细节:../../ros2doc/(若有 CycloneDDS 等笔记)
  • 实时总线:../../EtherCAT/../../CANopen/
  • MQTT 排障:08-调试与运维.md

下一篇:08-调试与运维.md

文章互动

阅读 --

留言

0 条留言

正在加载留言…