Files
yiliao2026/docs/crucial_change/2026-07-23-fastdds-164-network-change.md

177 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Fast DDS `.164` 专用链路设计与回滚规格
- 日期2026-07-23
- 适用环境RDKx5ROS 2 Humble与 WSLROS 2 Humble
- ROS Domain`22`
- 状态设计已确认DDS 配置尚未部署
## 1. 目标
将 WSL 与 RDKx5 之间的 ROS 2/DDS 数据固定在以下链路:
```text
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 2Humble
- 默认 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
```text
/home/sunrise/yiliao_ws/config/dds/fastdds_rdk_164.xml
/home/sunrise/yiliao_ws/config/dds/use_rdk_dds_164.sh
```
### WSL
```text
/home/hikos/Yiliao2026/config/dds/fastdds_wsl_151.xml
/home/hikos/Yiliao2026/config/dds/use_wsl_dds_164_link.sh
```
### 变更与回滚记录
```text
/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
```bash
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
```bash
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=22``rmw_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_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 参数。
- 所有实际修改、验证和回滚方式均记录在本文件中。