From 169c531559feb4e880125a52173369d4dad427d9 Mon Sep 17 00:00:00 2001 From: Orange <2314753575@qq.com> Date: Thu, 23 Jul 2026 18:02:09 +0800 Subject: [PATCH] docs: record Fast DDS validation findings --- .../2026-07-23-fastdds-164-network-change.md | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) 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 index 47eba27..0d728b2 100644 --- a/docs/crucial_change/2026-07-23-fastdds-164-network-change.md +++ b/docs/crucial_change/2026-07-23-fastdds-164-network-change.md @@ -979,3 +979,69 @@ unset _wsl_dds_profile - 修正:在 RDKx5 和 WSL profile 的 `` 中加入 `true`,保留双端 initial peer 进行单播发现。 - 范围:只修改两个已批准的 Fast DDS XML;不修改系统网卡的多播设置、路由、防火墙或 ROS package。 - 修正后的必要验收:双向消息仍成功,`.164` Domain 22 抓包大于零,`.210` Domain 22 抓包为零。 + +### WSL 接口名修正结果 + +- 修正提交:`9349f53cbc78851d9d053799af26f8055f58f9d3` +- 修正后脚本 SHA-256:`4dd272d34bbc480e7f5d112348fad7bb59532f155cdabbdc7e7b98dda7ff6155` +- 当前 WSL 接口为 `eth3`、地址仍为 `.151` 时,脚本加载通过。 +- 实际 participant socket 为 `.151:12900`、`.151:12910`、`.151:12911` 及 `.151` 上的自定义 UDP socket,没有绑定 WSL 的其他地址。 + +修正后脚本完整内容: + +```bash +#!/usr/bin/env bash + +if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then + echo "ERROR: source this file instead of executing it" >&2 + exit 64 +fi + +_wsl_dds_profile="/home/hikos/Yiliao2026/config/dds/fastdds_wsl_151.xml" + +if ! ip -o -4 addr show 2>/dev/null | grep -q 'inet 192\.168\.10\.151/'; then + echo "ERROR: no local IPv4 interface owns 192.168.10.151" >&2 + unset _wsl_dds_profile + return 1 +fi + +if [[ ! -r "${_wsl_dds_profile}" ]]; then + echo "ERROR: unreadable Fast DDS profile: ${_wsl_dds_profile}" >&2 + unset _wsl_dds_profile + return 1 +fi + +export ROS_DOMAIN_ID=22 +export RMW_IMPLEMENTATION=rmw_fastrtps_cpp +export ROS_LOCALHOST_ONLY=0 +export FASTRTPS_DEFAULT_PROFILES_FILE="${_wsl_dds_profile}" +export FASTDDS_DEFAULT_PROFILES_FILE="${_wsl_dds_profile}" + +printf 'DDS link enabled: domain=%s rmw=%s local=192.168.10.151 peer=192.168.10.164 profile=%s\n' \ + "${ROS_DOMAIN_ID}" "${RMW_IMPLEMENTATION}" "${_wsl_dds_profile}" +unset _wsl_dds_profile +``` + +### 关闭发现多播的文件结果 + +- RDKx5 XML: + - 新 SHA-256:`9c7acb168af9eacd93b41e03e02f8554570c94853ab5cd485782ba9483b72be8` + - commit:`e7c3fe9` +- WSL XML: + - 新 SHA-256:`990904e92ff54c76e04b70a7aa27fc9331484b2292635f1c22dddaeb0b16d52d` + - commit:`4b11f35` +- 两个 XML 均只在 `` 下新增: + +```xml +true +``` + +- 两端 XML well-formed 检查通过,Fast DDS/RMW participant 实际创建通过,没有 profile 或 transport 解析错误。 + +### 双向与网卡验证过程 + +1. 首次使用 `ros2 topic` CLI 测试时,既有 Domain 0 daemon 干扰等待逻辑,改用不依赖 CLI daemon 的临时 `rclpy` 发布/订阅节点。 +2. 关闭发现多播前的受控测试:双向消息成功,`.164` 捕获 189 个 Domain 22 包,`.210` 只捕获 3 个 SPDP 多播包,没有 `.210` 单播。 +3. 关闭发现多播后的首次重测开始前,RDKx5 上出现一套由其他终端启动的未配置 `obstacle_nav2`,其 Domain 22 socket 绑定 `0.0.0.0`,破坏了“无其他 participant”的受控前提。该次消息超时不作为 XML 结论。 +4. 当前运行命令确认为 `ros2 launch obstacle_nav2 obstacle_nav2.launch.py enable_motion:=true`,来源终端 `pts/3`;进程环境只有 `ROS_DOMAIN_ID=22`、`ROS_LOCALHOST_ONLY=0`,没有 Fast DDS profile 变量。 +5. 因该 launch 已启用真实运动,实施者未擅自终止。最终双向和双网卡验证等待该 launch 停止,或获得明确授权后用专用 DDS 环境重新启动。