双机跑 ROS2,一台跑感知一台跑规划,话题延迟动不动上秒级,排查下来全是 DDS 默认配置的锅,记录一下:

**1. 先确认是不是 DDS 的问题**
单机回环测试话题延迟正常,双机一通信就恶化,基本锁定网络/DDS 层。用 `ros2 topic hz` 和 `ros2 topic bw` 对比单机/双机数据,量化差距。

**2. 组播没通是最常见的坑**
默认 DDS 用组播做服务发现,交换机没开 IGMP Snooping、或者跨网段没配组播路由,节点发现就会时好时坏。快速验证:设 `ROS_DOMAIN_ID` 相同后跑 `ros2 multicast receive/send`,不通就先搞网络。

**3. QoS 不匹配导致"能发现但收不到"**
发布端 RELIABLE + 订阅端 BEST_EFFORT 这种组合,DDS 会直接拒绝匹配,topic list 能看到但 echo 没数据。两边 QoS Profile 对齐是基本功,`ros2 topic info -v` 能看到实际生效的 QoS。

**4. 大消息分片与 UDP 缓冲**
点云、图像这种大 topic,UDP 分片后对丢包极敏感。调大系统 `net.core.rmem_max` 和 DDS 的接收缓冲;实在不行对大消息改用 TCP 传输(FastDDS 的 TCP 配置)。

**5. 换个 DDS 实现对比**
默认的 Fast-DDS、rmw_cyclonedds 在不同场景表现差异不小。怀疑是实现 bug 时,装个 `ros-humble-rmw-cyclonedds-cpp` 切换对比,半小时就能排除一大类问题。

一句话:ROS2 多机通信,网络和 QoS 占 90% 的故障,代码反而很少背锅。

你们多机通信用的是哪款 DDS?有没有被默认 QoS 坑过的?