1
0
forked from zbw/yiliao2026

docs: record Fast DDS validation findings

This commit is contained in:
2026-07-23 18:02:09 +08:00
parent e7c3fe91b2
commit 169c531559

View File

@@ -979,3 +979,69 @@ unset _wsl_dds_profile
- 修正:在 RDKx5 和 WSL profile 的 `<builtin>` 中加入 `<avoid_builtin_multicast>true</avoid_builtin_multicast>`,保留双端 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 均只在 `<builtin>` 下新增:
```xml
<avoid_builtin_multicast>true</avoid_builtin_multicast>
```
- 两端 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 环境重新启动。