我在同一网络中有两台计算机(Ubuntu 20.04(,ROS_DOMAIN_ID=1,我有一个名为cloud
的主题,它是来自激光雷达传感器的点云。驱动程序正在PC=A上运行,我想在PC=B上显示云。现在,当我在PC=A上ros2 topic echo /cloud
时,我会正常接收消息。当我在PC=B上浏览2主题列表时,我会看到云主题。我只在设置ROS_DOMAIN_ID=1以确保没有该名称的先前主题可用后才能看到它。到目前为止还不错,但现在当我在PC=B上尝试ros2 topic echo /cloud
时,我一无所获。知道为什么会这样吗?据我所知,消息正在到达,如PC=A上的ros2 topic echo /cloud
所示,我可以在PC=B上看到它们,如ros2 topic list
所示。有趣的是,ros2 topic info /cloud
运行良好,告诉我发布者和订阅者分别为1和2。在PC=A上运行ros2 run demo_nodes_cpp talker
演示程序,在PC=B上运行ros2 run demo_nodes_cpp listener
演示程序也可以正常工作。这可能是因为传感器是UDP,而演示侦听器是tcp吗?
你好,我记得我在某个地方也遇到过这个问题,这是由dds版本不匹配引起的,你在两台电脑上使用相同的dds发行版(ROS2发行版(吗?ROS2有改变发行版中DDS版本的趋势,这两台电脑都是最新的吗?
您能检查您订阅的节点PC=B是否确实获得了信息吗?因为echo可能是错误的,但节点仍然可以接收。
如果您使用发现服务器,请不要忘记您必须是一个超级客户端。
我刚刚解决了这个问题"主题列表有效,主题回声不起作用;在我的Ubuntu 20.04 ROS2银河环境中。
我正在运行
- ROS2银河,结束
- Ubuntu 20.04 LTS桌面作为
- VMware Fusion 12.2.4中的虚拟机
- Mac Mini 2018运行
- macOS蒙特利12.6.1
使用CYCLONE DDS:
- TurtleBot4lite RaspberryPi4和
- 创建3
当我将虚拟机网络适配器配置为时
- "桥接适配器:WiFi";(具有高级选项:生成MAC ID(
我可以列出在两个ROS2平台上运行的节点中的主题,
但只能回显在Turtlebot4lite的RaspberryPi4上运行的结点中发布的主题。
Create3发布的主题不回显。
[我的解决方案]当我将虚拟机网络适配器更改为时
- "桥接适配器:以太网";(具有高级选项:生成的MAC ID与生成的WiFI MAC ID相同(
魔术发生了!列表和回声主题。
我在Ubuntu 22.04/ROS 2 Humble上遇到了同样的问题,只是在同一设备上的两个不同的Linux用户之间。对我来说,修复它的是将DDS中间件更改为Cyclone DDS,用于两个用户:
https://docs.ros.org/en/humble/Installation/DDS-Implementations/Working-with-Eclipse-CycloneDDS.html
默认情况下,我的Humble设置使用rmw_fastrtps_cpp
(可以通过运行ps -ax | grep rmw-implementation
来查看(,我想这可能会导致不同用户之间的通信问题。我不知道到底发生了什么,但对我来说已经足够了。