6.5 KiB
Fast DDS .164 专用链路设计与回滚规格
- 日期:2026-07-23
- 适用环境:RDKx5(ROS 2 Humble)与 WSL(ROS 2 Humble)
- ROS Domain:
22 - 状态:设计已确认,DDS 配置尚未部署
1. 目标
将 WSL 与 RDKx5 之间的 ROS 2/DDS 数据固定在以下链路:
WSL 192.168.10.151 <-> RDKx5 192.168.10.164 (wlx200db0c3fca5)
RDKx5 的 192.168.10.210(wlan0)继续用于 SSH 和 VS Code,不承担 WSL 与 RDKx5 之间的 DDS 数据。
本次不开发 obstacle_nav_web,只优化 DDS 网络选择。
2. 已确认的现状
RDKx5
- 主机:
sunrise@192.168.10.210 - ROS 2:Humble
- 默认 RMW:
rmw_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 - 默认 RMW:
rmw_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 数据都走 .164,RDKx5 的底盘、雷达、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 加载,不作为独立子进程执行。
脚本必须:
- 检查当前主机是否存在预期的本地 IP;不存在时输出明确错误并返回非零。
- 检查 XML 文件存在且可读。
- 设置
ROS_DOMAIN_ID=22。 - 设置
RMW_IMPLEMENTATION=rmw_fastrtps_cpp。 - 将 Humble 使用的
FASTRTPS_DEFAULT_PROFILES_FILE指向对应 XML;如当前 Fast DDS 同时支持新变量,则将FASTDDS_DEFAULT_PROFILES_FILE指向同一文件。 - 输出本次选择的 Domain、RMW、配置文件和本地 DDS 地址,便于启动前人工核对。
- 不修改
~/.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. 精简验证
实施后只执行以下必要验证:
- 双端加载环境脚本,确认本地 IP、XML、
ROS_DOMAIN_ID=22和rmw_fastrtps_cpp正确。 - 使用唯一命名的临时 ROS 2 话题验证 WSL 与 RDKx5 能互相发现并收发消息。
- 从该环境启动实际
ros2 launch,确认 WSL 能看到关键话题;观察 DDS 数据经过.164,.210上的 SSH 保持正常,并且没有 WSL 相关 DDS 数据使用.210。
验证记录应包含执行命令、成功或失败、关键输出摘要。无需进行长时间带宽统计、完整 Nav2 功能回归或 costmap 性能调优。
8. 失败保护和回滚
快速回滚
- 停止从专用 DDS 环境启动的 ROS 2 节点。
- 关闭已加载环境脚本的终端,或在当前终端取消 DDS 配置变量。
- 新开终端,仅加载原有 ROS 2 和工作空间环境,然后按原命令重新启动。
- 验证默认 ROS graph 恢复。
文件级回滚
配置验证失败且不再保留时,只删除本规格第 4 节列出的四个新增配置文件;如果目录为空,再删除新增的 config/dds 目录。不得删除工作空间、现有 package、路由表或其他用户文件。
实施文档必须记录精确的删除命令。在执行删除前,应再次解析并核对绝对路径分别位于:
/home/sunrise/yiliao_ws/config/dds//home/hikos/Yiliao2026/config/dds/
不需要回滚的项目
因为本方案不修改以下项目,所以回滚不得操作它们:
- RDKx5 与 WSL 的路由表
- 防火墙规则
- 网卡 metric
~/.bashrc与~/.profileobstacle_nav2、obstacle_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 参数。
- 所有实际修改、验证和回滚方式均记录在本文件中。