docs: design dedicated Fast DDS 164 link
This commit is contained in:
176
docs/crucial_change/2026-07-23-fastdds-164-network-change.md
Normal file
176
docs/crucial_change/2026-07-23-fastdds-164-network-change.md
Normal file
@@ -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 参数。
|
||||||
|
- 所有实际修改、验证和回滚方式均记录在本文件中。
|
||||||
Reference in New Issue
Block a user