对于一个项目,我有一个运行带有 ROS1 Melodic 的 Ubuntu 18.04 的机器人和一个运行带有 ROS2 Humble 的 Ubuntu 22.04 的桌面。为了使用 ROS1 桥,我使用带有 3 个容器的 Docker,如下所示: 容器 1 -> ROS2 Humble 容器 2 -> ros1_bridge Container 3 -> ROS1 Melodic(仅用于 ssh 到机器人并更改内部计算机上的文件,即树莓派和 jetson nano)
docker 容器(没有机器人)之间的通信正常,并使用 ros1_bridge github 中的示例进行了测试(https://github.com/ros2/ros1_bridge#example-1-run-the-bridge-and -说话者和听众的例子)。
现在我将机器人连接到我的桌面。所有容器都在机器人的网络上运行(通过以太网连接),即: IP 地址容器 = 192.168.123.51 IP地址树莓派=192.168.123.161
我更改了计算机的 .bashrc 文件以包含以下代码行: 导出 ROS_MASTER_URI=://192.168.123.161:11311 导出ROS_IP=192.168.123.51
机器人的 .bashrc 文件也已更改为包含以下代码行: 导出 ROS_MASTER_URI=://raspberrypi:11311 导出ROS_IP=192.168.123.161
我发现的问题是,当我启动 ros1_bridge 时,出现以下错误: [错误] [1700558900.455340475]:无法解析发布者主机[raspberrypi] 无法连接树莓派:55903 [错误] [1700558900.461922158]:无法解析发布者主机[192.168.123.15 192.168.11.110] 无法连接到 192.168.123.15
在启动ros1_bridge之前,我首先获取了env,然后导出了ROS_MASTER_URL(尝试了不同的ROS_MASTER_URL,例如ROS_MASTER_URL://raspberrypi:11311或ROS_MASTER_URL://192.168.123.15:11311或ROS_MASTER_URL://192.168.123.51)
我期望发生的是,主题将在不同的 ROS 版本之间进行桥接,就像示例中所做的那样
任何帮助都会非常有帮助。
这是跨多台机器使用 ROS 时非常常见的问题。确实如此常见,以至于我很久以前就写过一篇关于它的要点: https://gist.github.com/chfritz/8c2adab45a94e091be77c55b0432ad2e
关键的一点是,仅设置
ROS_MASTER_URL
和ROS_IP
是不够的,还需要设置ROS_HOSTNAME
。后者是机器在主站上宣传自己时使用的名称。如果其他机器无法解析该名称,那么你们就无法通信。
或者,在您的情况下,您可能只需将 raspberrypi 添加到容器内的
/etc/hosts
,这样他们就知道如何解析该名称。