1
0
forked from zbw/yiliao2026
Files
yiliao2026/docs/crucial_change/2026-07-23-fastdds-164-network-change.md

6.5 KiB
Raw Blame History

Fast DDS .164 专用链路设计与回滚规格

  • 日期2026-07-23
  • 适用环境RDKx5ROS 2 Humble与 WSLROS 2 Humble
  • ROS Domain22
  • 状态设计已确认DDS 配置尚未部署

1. 目标

将 WSL 与 RDKx5 之间的 ROS 2/DDS 数据固定在以下链路:

WSL 192.168.10.151 <-> RDKx5 192.168.10.164 (wlx200db0c3fca5)

RDKx5 的 192.168.10.210wlan0)继续用于 SSH 和 VS Code不承担 WSL 与 RDKx5 之间的 DDS 数据。

本次不开发 obstacle_nav_web,只优化 DDS 网络选择。

2. 已确认的现状

RDKx5

  • 主机:sunrise@192.168.10.210
  • ROS 2Humble
  • 默认 RMWrmw_fastrtps_cpp
  • ~/.bashrc 已设置 ROS_DOMAIN_ID=22
  • DDS 专用网卡:wlx200db0c3fca5,地址 192.168.10.164/24
  • 管理网卡:wlan0,地址 192.168.10.210/24
  • 两张网卡处于同一子网,普通路由优先级为 .210 的 metric 600、.164 的 metric 601。因此不能依赖普通路由保证 DDS 使用 .164

WSL

  • 用户:hikos
  • 默认 RMWrmw_fastrtps_cpp
  • ROS 2 接口:eth4,地址 192.168.10.151/24
  • .164.210 均经 eth4 直连
  • WSL 端配置必须放在 /home/hikos/Yiliao2026/

3. 采用方案

继续使用 Fast DDS不修改系统路由、网卡 metric 或防火墙。双方通过 Fast DDS 默认 participant profile 显式选择接口,并设置对端 discovery peer。

跨主机 UDP

  • RDKx5 的自定义 UDPv4 transport 只允许本地地址 192.168.10.164
  • WSL 的自定义 UDPv4 transport 只允许本地地址 192.168.10.151
  • RDKx5 discovery peer 指向 192.168.10.151
  • WSL discovery peer 指向 192.168.10.164
  • 不对单个 DDS 端口做端口转发DDS 发现和数据端口由 Fast DDS 按 Domain 和 participant 管理。

同主机通信

配置保留 SHM transport。RDKx5 内部 ROS 节点之间及 WSL 内部 ROS 节点之间优先使用共享内存,避免将同主机的大流量消息无意义地送入无线链路。

生效范围

只有从指定环境脚本启动的 ROS 2 participant 才受该配置约束。为保证实际 Nav2 数据都走 .164RDKx5 的底盘、雷达、obstacle_scanner 和 Nav2 必须从同一个已加载 RDK 环境脚本的终端或其子进程启动WSL 现有软件必须从已加载 WSL 环境脚本的终端或其子进程启动。

4. 计划新增文件

RDKx5

/home/sunrise/yiliao_ws/config/dds/fastdds_rdk_164.xml
/home/sunrise/yiliao_ws/config/dds/use_rdk_dds_164.sh

WSL

/home/hikos/Yiliao2026/config/dds/fastdds_wsl_151.xml
/home/hikos/Yiliao2026/config/dds/use_wsl_dds_164_link.sh

变更与回滚记录

/home/sunrise/yiliao_ws/docs/crucial_change/2026-07-23-fastdds-164-network-change.md

当前设计规格即保存在上述变更文档中。实施时必须在同一文档中追加实际文件内容、执行命令、验证结果、文件校验值和回滚结果,不另建无法互相对应的零散说明。

5. 环境脚本行为

两个脚本均设计为由 Bash source 加载,不作为独立子进程执行。

脚本必须:

  1. 检查当前主机是否存在预期的本地 IP不存在时输出明确错误并返回非零。
  2. 检查 XML 文件存在且可读。
  3. 设置 ROS_DOMAIN_ID=22
  4. 设置 RMW_IMPLEMENTATION=rmw_fastrtps_cpp
  5. 将 Humble 使用的 FASTRTPS_DEFAULT_PROFILES_FILE 指向对应 XML如当前 Fast DDS 同时支持新变量,则将 FASTDDS_DEFAULT_PROFILES_FILE 指向同一文件。
  6. 输出本次选择的 Domain、RMW、配置文件和本地 DDS 地址,便于启动前人工核对。
  7. 不修改 ~/.bashrc~/.profile 或系统服务环境。

6. 使用流程

RDKx5

source /opt/ros/humble/setup.bash
source /home/sunrise/yiliao_ws/install/setup.bash
source /home/sunrise/yiliao_ws/config/dds/use_rdk_dds_164.sh
ros2 launch obstacle_nav2 obstacle_nav2.launch.py

WSL

source /opt/ros/humble/setup.bash
source /home/hikos/Yiliao2026/config/dds/use_wsl_dds_164_link.sh
# 在同一终端启动现有软件

7. 精简验证

实施后只执行以下必要验证:

  1. 双端加载环境脚本,确认本地 IP、XML、ROS_DOMAIN_ID=22rmw_fastrtps_cpp 正确。
  2. 使用唯一命名的临时 ROS 2 话题验证 WSL 与 RDKx5 能互相发现并收发消息。
  3. 从该环境启动实际 ros2 launch,确认 WSL 能看到关键话题;观察 DDS 数据经过 .164.210 上的 SSH 保持正常,并且没有 WSL 相关 DDS 数据使用 .210

验证记录应包含执行命令、成功或失败、关键输出摘要。无需进行长时间带宽统计、完整 Nav2 功能回归或 costmap 性能调优。

8. 失败保护和回滚

快速回滚

  1. 停止从专用 DDS 环境启动的 ROS 2 节点。
  2. 关闭已加载环境脚本的终端,或在当前终端取消 DDS 配置变量。
  3. 新开终端,仅加载原有 ROS 2 和工作空间环境,然后按原命令重新启动。
  4. 验证默认 ROS graph 恢复。

文件级回滚

配置验证失败且不再保留时,只删除本规格第 4 节列出的四个新增配置文件;如果目录为空,再删除新增的 config/dds 目录。不得删除工作空间、现有 package、路由表或其他用户文件。

实施文档必须记录精确的删除命令。在执行删除前,应再次解析并核对绝对路径分别位于:

  • /home/sunrise/yiliao_ws/config/dds/
  • /home/hikos/Yiliao2026/config/dds/

不需要回滚的项目

因为本方案不修改以下项目,所以回滚不得操作它们:

  • RDKx5 与 WSL 的路由表
  • 防火墙规则
  • 网卡 metric
  • ~/.bashrc~/.profile
  • obstacle_nav2obstacle_scanner 和其他 ROS package
  • SSH 与 VS Code 配置

9. 变更记录要求

实施时,本文件必须追加:

  • 每个新增文件的绝对路径与完整内容
  • 修改前的网络和 ROS 环境摘要
  • 实际执行命令及执行顺序
  • 每项精简验证的结果
  • 新增文件的 SHA-256
  • 完整回滚命令
  • 若发生失败,失败现象、停止位置以及是否已回滚

如果实施内容与本设计不一致,必须先在本文件记录差异及原因,再执行该项变更。

10. 验收标准

  • WSL 与 RDKx5 在 Domain 22 中能发现并收发 ROS 2 消息。
  • 由专用环境启动的跨主机 DDS 通信只使用 WSL .151 与 RDKx5 .164
  • .210 上的 SSH 和 VS Code 管理链路保持可用。
  • 未修改路由表、系统启动文件、现有 ROS package 或 Nav2 参数。
  • 所有实际修改、验证和回滚方式均记录在本文件中。