使用 Docker 与外部机器人运行 ros1_bridge 时出现问题

问题描述 投票:0回答:1

对于一个项目,我有一个运行带有 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 版本之间进行桥接,就像示例中所做的那样

任何帮助都会非常有帮助。

docker networking ros robot
1个回答
0
投票

这是跨多台机器使用 ROS 时非常常见的问题。确实如此常见,以至于我很久以前就写过一篇关于它的要点: https://gist.github.com/chfritz/8c2adab45a94e091be77c55b0432ad2e

关键的一点是,仅设置

ROS_MASTER_URL
ROS_IP
是不够的,还需要设置
ROS_HOSTNAME
。后者是机器在主站上宣传自己时使用的名称。如果其他机器无法解析该名称,那么你们就无法通信。

或者,在您的情况下,您可能只需将 raspberrypi 添加到容器内的

/etc/hosts
,这样他们就知道如何解析该名称。

© www.soinside.com 2019 - 2024. All rights reserved.