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

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

我正在为RPi 3B +使用泛泛性的Raspberry Pi image,这是Ubuntu Xenial和ROS Kinetic。我的基本计算机正在运行Ubuntu 18.04,并安装了ROS Melodic。我在基本PC上创建了subo_base工作区,并在RPi中创建了subo_rpi工作区(通过ssh评估RPi)。然后,我在基本PC和RPi中都创建了一个程序包,并在每个程序包中添加了Publisher和Subscriber(http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28python%29)文件。当我从RPi运行发布者时,基本PC可以订阅,但是当我从基本PC进行发布时,RPi不会显示任何输出,并且会停留(即使使用rostopic list在RPi上可以看到主题)。

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

连接到RPi

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进行文件传输,所以我猜netwkr可能不是问题吗?

ssh ubuntu-16.04 raspberry-pi3 ubuntu-18.04 ros
1个回答
0
投票

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

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

而且'hostname -I'绝对不适合在所有情况下设置ROS_IP变量。因此,这也可能是您遇到问题的原因之一。

从主机名手册页

-I,--all-ip-addresses>

显示主机的所有网络地址。此选项枚举所有网络接口上的所有已配置地址。省略了环回接口和IPv6链接本地地址。与选项-i相反,此选项不依赖于名称解析。不要对以下顺序做任何假设输出。

您将要使用所需的任何特定IP地址,因此只需使用该IP地址或找到一种更好的方法来确定要设置的IP。 echo $ROS_IPprintenv | grep ROS会告诉您变量当前设置为什么,因此您可以验证其设置是否正确。

为了获得最有效的证据,您可以尝试以下操作:

假设您的RPi ip为192.168.0.2,而PC ip为192.168.0.3

您需要确定哪台计算机将成为主计算机,在本例中,我将假定PC将成为主计算机。

在PC的终端中,运行以下命令:

roscore

在不同的终端运行中(用于代替订户/发布者节点来测试是否正常)

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窗口回显在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

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