Zenoh与ROS2集成:跨环境运行turtlesim遇INVALID传输错误求助
问题分析与解决方案
核心错误原因
日志中的Received a close message (reason INVALID)通常是zenoh两端版本不兼容、网络通信失败或配置不匹配导致的连接建立失败。
修复步骤
1. 对齐zenoh组件版本
错误显示使用的是zenoh-transport-1.0.0-beta.3,2021年的教程版本与当前beta版本可能存在兼容性问题:
- 卸载Ubuntu虚拟机中的
zenoh-bridge-ros2,重新安装与本机Pythonzenoh包一致的稳定版本:sudo apt remove zenoh-bridge-ros2 # 安装对应版本的桥接工具,确保与pip安装的zenoh版本匹配 - 本机Python端重新安装匹配版本:
pip uninstall zenoh pip install zenoh==<与桥接工具一致的稳定版本>
2. 强制使用IPv4通信
日志中使用IPv6地址通信,跨虚拟机场景下IPv6可能存在路由问题:
- 虚拟机启动zenoh桥接时指定IPv4监听:
zenoh-bridge-ros2 --listen tcp/0.0.0.0:7447 --no-multicast-scouting - 本机Python脚本中指定虚拟机IPv4地址连接:
import zenoh config = zenoh.Config({"connect": {"endpoints": ["tcp://<虚拟机IPv4地址>:7447"]}}) session = zenoh.open(config)
3. 解除防火墙端口限制
- Ubuntu虚拟机开放zenoh默认通信端口:
sudo ufw allow 7447/tcp - 检查Mac本机防火墙设置,允许运行Python脚本的程序获取网络连接权限。
4. 调整虚拟机网络模式
若使用NAT模式,本机无法直接访问虚拟机服务:
- 将虚拟机网络切换为桥接模式,确保虚拟机与Mac本机处于同一局域网段,获取可直接访问的IPv4地址。
验证流程
- Ubuntu虚拟机中启动turtlesim节点:
ros2 run turtlesim turtlesim_node - 启动配置好的zenoh桥接:
zenoh-bridge-ros2 --listen tcp/0.0.0.0:7447 - 运行Mac本机的Python脚本,发送
cmd/vel消息,验证海龟是否正常移动。
内容的提问来源于stack exchange,提问作者J S
相关产品推荐
相关产品推荐

