1
0
forked from zbw/yiliao2026

docs: design dedicated Fast DDS 164 link

This commit is contained in:
2026-07-23 15:31:55 +08:00
parent 70e7360ba2
commit 51a3b3ff0b

View File

@@ -0,0 +1,176 @@
# 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 参数。
- 所有实际修改、验证和回滚方式均记录在本文件中。