MCU/DSP 与 ROS2 如何通信?XRCE-DDS 实现 rostopic 与嵌入式 Msg 无缝映射(附架构图)

在机器人 / 无人机 / 自动驾驶系统中,一个典型架构是:

  • 上层:Linux SoC(运行 ROS2)
  • 下层:MCU(实时控制)

比如:

  • 飞控(MCU) + AI 计算(ROS2)
  • MCU 控电机 + ROS2 做 SLAM
  • MCU 采集传感器 + ROS2 做决策

但核心问题是:

❓ ROS2 的 rostopic,如何和 MCU 的 msg 打通?

传统方案:

  • 串口协议 ❌
  • 自定义协议 ❌
  • MAVLink(偏遥测)⚠️

👉 都无法"原生兼容 ROS2"


🚀 解决方案:XRCE-DDS

XRCE-DDS 是专门为 MCU 设计的 DDS 轻量通信协议。

一句话理解:

让 MCU 也能"接入 ROS2 网络"


一、整体架构(核心图)

MCU
Linux SoC (ROS2)
UART / UDP / SPI
ROS2 Nodes
DDS Middleware
XRCE-DDS Agent
XRCE-DDS Client
MCU Application (Msg)

📌 解释:

  • ROS2 使用 DDS 通信
  • MCU 不跑 DDS,而是使用 XRCE Client
  • Linux 侧通过 XRCE Agent 做桥接

二、rostopic 与 MCU msg 的本质关系

在 ROS2 中:

bash 复制代码
ros2 topic list

常见:

text 复制代码
/cmd_vel
/imu/data
/odom

而在 MCU 中:

c 复制代码
typedef struct
{
    float linear;
    float angular;
} CmdVel;

👉 本质关系:

text 复制代码
ROS2 Topic  <->  MCU Msg

XRCE-DDS 做的事情:

✔ 自动序列化

✔ 自动类型映射

✔ 自动转发


三、数据流(最关键理解)

✅ MCU → ROS2

MCU Msg
XRCE Client
XRCE Agent
DDS
ROS2 Topic

👉 示例:

MCU 发布 IMU:

bash 复制代码
ros2 topic echo /imu/data

即可看到数据。


✅ ROS2 → MCU

ROS2 Topic
DDS
XRCE Agent
XRCE Client
MCU Msg

👉 示例:

bash 复制代码
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist

MCU 接收:

c 复制代码
void cmd_vel_callback(CmdVel *msg)
{
    motor_control(msg->linear, msg->angular);
}

四、通信时序图(高质量理解)

ROS2 Agent Client MCU ROS2 Agent Client MCU Publish Msg XRCE协议发送 DDS Publish Topic Publish XRCE数据 回调处理


五、工程实现步骤(实战)

1️⃣ 定义 IDL

idl 复制代码
struct CmdVel
{
    float linear;
    float angular;
};

👉 生成:

  • ROS2 msg
  • MCU 序列化代码

2️⃣ MCU 发布数据

c 复制代码
CmdVel msg;

msg.linear = 1.0;
msg.angular = 0.5;

uxr_write_topic(
    &session,
    stream,
    publisher,
    &msg,
    sizeof(msg));

3️⃣ MCU 订阅数据

c 复制代码
void topic_callback(const CmdVel *msg)
{
    printf("linear=%f\n", msg->linear);
}

4️⃣ Linux 启动 Agent

bash 复制代码
MicroXRCEAgent udp4 -p 8888

或串口:

bash 复制代码
MicroXRCEAgent serial --dev /dev/ttyUSB0

5️⃣ ROS2 测试

bash 复制代码
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist
ros2 topic echo /imu/data

六、典型应用场景(无人机/机器人)

MCU
Linux (ROS2)
数据
轨迹
路径
目标
SLAM
Navigation
AI Vision
Sensor
Control
Motor Driver


七、为什么 XRCE-DDS 是最优解?

方案 问题
串口协议 不通用
自定义协议 成本高
MAVLink 偏遥测
XRCE-DDS 原生 ROS2

优势:

  • ✅ 原生 ROS2 兼容
  • ✅ 发布订阅模型
  • ✅ 自动序列化
  • ✅ 支持多 Topic
  • ✅ 易扩展

八、总结(核心记住这张图)

ROS2 Topic
DDS
XRCE Agent
Transport
XRCE Client
MCU Msg


🎯 最重要一句话

XRCE-DDS 本质就是:把 MCU 拉进 ROS2 网络


🚀 适用场景

  • 飞控系统(PX4 / 自研)
  • 机器人系统
  • 自动驾驶
  • MCU + Linux 异构 SoC

相关推荐
DLGXY2 小时前
STM32(二十八)——FLASH闪存
stm32·单片机·嵌入式硬件
9稳3 小时前
基于plc的自动化立体仓库控制系统设计
开发语言·网络·数据库·嵌入式硬件·plc
ToneChip3 小时前
USBi 调试 与 MCU 运行 共存方案总结
单片机·嵌入式硬件·音频
学嵌入式的小杨同学3 小时前
STM32 进阶封神之路(二十一):DMA 深度解析 —— 从直接内存访问到无 CPU 干预数据传输(底层原理 + 寄存器配置)
stm32·单片机·嵌入式硬件·mcu·硬件架构·硬件工程·智能硬件
Hello World . .3 小时前
51单片机基础
单片机·嵌入式硬件·51单片机
’长谷深风‘3 小时前
51单片机入门(3:串口通信)
单片机·嵌入式硬件·51单片机·串口·串口通信
9稳3 小时前
基于智能巡检机器人与PLC系统联动控制设计
开发语言·网络·数据库·嵌入式硬件·plc
BackCatK Chen3 小时前
STM32U3B5/3C5深度解析:HSP加速器赋能边缘AI与DSP,超低功耗新标杆
人工智能·stm32·嵌入式硬件
_Ningye12 小时前
STM32 — 2.2 新建工程
stm32·单片机·嵌入式硬件