diff --git a/docs/crucial_change/2026-07-23-fastdds-164-network-change.md b/docs/crucial_change/2026-07-23-fastdds-164-network-change.md new file mode 100644 index 0000000..88390cf --- /dev/null +++ b/docs/crucial_change/2026-07-23-fastdds-164-network-change.md @@ -0,0 +1,176 @@ +# Fast DDS `.164` 专用链路设计与回滚规格 + +- 日期:2026-07-23 +- 适用环境:RDKx5(ROS 2 Humble)与 WSL(ROS 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 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 + +```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 参数。 +- 所有实际修改、验证和回滚方式均记录在本文件中。