【问题标题】:Raspberry Pi is not able to subscribe to ros topic published from base PC but vice-verse is working?Raspberry Pi 无法订阅从基本 PC 发布的 ros 主题,但反之亦然?
【发布时间】:2019-12-28 14:16:58
【问题描述】:

我将 ubiquityrobotics Raspberry Pi image 用于 RPi 3B+,即 Ubuntu Xenial 和 ROS Kinetic。我的基础计算机运行的是 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

部分代码在base 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】:

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

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

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

    来自主机名手册页

    -I, --all-ip-addresses>

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

    您会想要使用您需要的任何特定 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

    【讨论】:

    • 在我在 RPi (master) 中明确设置 ROS_IP 后它工作了。非常感谢!
    猜你喜欢
    • 2011-11-03
    • 2014-01-04
    • 2020-10-29
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2018-02-19
    相关资源
    最近更新 更多