Raspberry Pi 无法订阅从基本 PC 发布的 ros 主题,但反之亦然?

Raspberry Pi is not able to subscribe to ros topic published from base PC but vice-verse is working?

我正在为 RPi 3B+ 使用 ubiquityrobotics Raspberry Pi image,即 Ubuntu Xenial 和 ROS Kinetic。我的基础计算机是 运行ning Ubuntu 18.04 并且安装了 ROS Melodic。 我在基础 PC 中创建了 subo_base 工作区,在 RPi 中创建了 subo_rpi 工作区(通过 ssh 评估 RPi)。 然后我在基础 PC 和 RPi 中创建了一个包,并在每个包中添加了发布者和订阅者 (http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28python%29) 文件。 当我 运行 来自 RPi 的发布者时,基础 PC 能够订阅,但是当我从基础 PC 发布时,RPi 不显示任何输出并保持卡住(即使主题在 RPi 上可见使用 rostopic list).

Base PC is able to subscribe to RPi

RPi unable to subscribe to topic from PC

部分代码用于基础 PC

aakash@aakash:~$ mkdir -p ~/subo_base/src
aakash@aakash:~$ cd ~/subo_base/
aakash@aakash:~/subo_base$ catkin_make
aakash@aakash:~/subo_base$ source devel/setup.bash
aakash@aakash:~/subo_base$ echo $ROS_PACKAGE_PATH
aakash@aakash:~/subo_base$ cd ~/subo_base/src/
aakash@aakash:~/subo_base/src$ catkin_create_pkg motion_plan std_msgs rospy roscpp

连接树莓派

aakash@aakash:~/subo_base/src/motion_plan/scripts$ export ROS_MASTER_URI=http://ubiquityrobot.local:11311
aakash@aakash:~/subo_base/src/motion_plan/scripts$ export ROS_IP='hostname -I'

此外,我可以通过 ssh scp 与基本 PC 之间传输文件 scp 所以我猜 netwkr 可能不是问题所在?

问题很可能是主机名解析 and/or ROS 网络变量配置。

我不喜欢在变量中使用主机名,所以我将仅使用 IP 给出示例。

此外,'hostname -I' 绝对不适合在所有情况下设置您的 ROS_IP 变量。所以这也可能是您问题的根源之一。

来自主机名手册页

-I, --all-ip-addresses>

Display all network addresses of the host. This option enumerates all configured addresses on all network interfaces. The loop‐back interface and IPv6 link-local addresses are omitted. Contrary to option -i, this option does not depend on name resolution. Do not make any assumptions about the order of the output.

您会想要使用您需要的任何特定 ip 地址,因此只需使用它或找到更好的方法来确定要设置的 ip。 echo $ROS_IPprintenv | grep ROS 会告诉您当前设置的变量,以便您验证它是否设置正确。

为了证明一切正常,您可以尝试以下操作:

假设您的树莓派 ip 是 192.168.0.2,PC ip 是 192.168.0.3

您将需要决定哪台机器将成为主机,对于本示例,我假设 PC 将成为主机。

In a terminal on the PC run the following commands:

roscore

在不同的终端运行(这用来代替 subscriber/publisher 节点来测试是否正常)

rostopic pub /test/topic std_msgs/String 'Hello World from PC' -r 1

现在在 RPi 的 SSH 终端上 运行:

export ROS_MASTER_URI=http://192.168.0.3:11311 && export ROS_IP=192.168.0.2

现在您应该可以从 SSH window.

回显在 PC 上发布的主题

rostopic echo /test/topic

ctrl+c 退出回显,您可以尝试在 RPi 上发布一些消息,例如:

rostopic pub /test2/topic std_msgs/String 'Hello World from RPi' -r 1

现在在 PC 上打开一个新终端并尝试从 RPi 回显主题,任何使用 ROS 安装空间的终端,通常 source /opt/ros/kinetic/setup.bash,应该可以工作:

rostopic echo /test2/topic

ROS wiki page on running ROS on multiple machines

ROS answer regarding setting up multiple machines

ROS1

机器 1 [大师]:

  • 会 运行 roscore,但在配置完成之前不要 运行 它。
  • IP 为 192.168.1.10

1- 运行 终端中的以下内容:

1.1- export ROS_MASTER_URI=http://192.168.1.10:11311.

1.2- export ROS_IP=192.168.1.10.

2- 现在,运行 roscore.

机器 2 [从机]

  • 不会 运行 roscore.
  • 拥有 IP 192.168.1.15

1- 运行 终端中的以下内容:

1.1- export ROS_MASTER_URI=http://192.168.1.10:11311.

1.2- export ROS_IP=192.168.1.15.

2- 现在,您已连接到 Master。


ROS2

ROS2 将立即填充 LAN 上的信息,无需任何配置。