我正在与ROS合作。我在一台Ubuntu 16.04机器上有一个检测节点充当发话者(det_talker.py
),另一节点有一个侦听器(det_listener.py
)。我打算在主服务器(Ubuntu 14.04计算机)上运行侦听器,以接收从谈话者发送的消息。当我从终端运行讲话者,然后在主服务器上运行监听器时,我可以看到在主服务器上收到的消息。
但是,当我通过在bash脚本中放置用于获取setup.bash文件以及为主服务器配置IP的必要命令来运行相同的talker节点时,从启动时运行此脚本(通过在< em>启动应用程序),我在主服务器上看不到任何消息。
在带有对话者节点的机器上的配置:
充当主计算机的机器上的配置:
我尝试将主服务器上的ROS_IP更改为ubuntu16_ip,但结果仍然相同。 我用于从系统启动运行检测节点的脚本如下:
#!/bin/bash
cd /home/rahul
export ROS_MASTER_URI = http://ubuntu14_ip:11311
source ./catkin_ws/devel/setup.bash
cd catkin_ws
rosrun detection_node det_talker.py
我尝试从终端运行此bash脚本;它成功运行,当我运行det_listener.py节点时,可以在master上看到消息。仅当我从启动运行它时,才没有消息(但是节点确实在运行)。
此外,我可以在主服务器上看到该节点正在运行,因为当我运行rosnode list
和rostopic list
命令时,该节点会显示该节点。我还应该提到Ubuntu 16具有Kinetic,而Ubuntu 14正在运行Indigo版本的ROS。我之所以认为不同版本不应该造成问题,是因为从终端执行节点时我确实可以获得消息。
我的问题是,如何通过在启动时运行发声器来获得要在主机上接收的消息。 谢谢。
注意:这是我在ROS Answers here上问过的同一问题的交叉帖子。我将其发布在SO上,因为那边我还没有收到任何回复。
答案 0 :(得分:0)
问题是因为您的终端与用于启动的终端不在同一外壳(会话)中,因此未为您设置变量。 您应该将这些值写入所用用户的〜/ .bashrc 中。
答案 1 :(得分:0)
在Benyamin Jafari对我的问题的评论的帮助下,我设法找到了解决方法:
我在节点计算机(ubuntu16)的 / etc / hosts 文件中添加了主服务器(ubuntu14)的IP和名称,反之亦然。当我重新启动两台机器并从启动再次运行该节点时,我可以在主服务器上收到消息。
旁注:如果某人(例如我)试图通过运行多个节点并在主服务器上获取所有节点的消息来完成类似的任务,请确保在<中添加所有节点的IP和名称。主机的em> / etc / hosts 并且所有节点都有不同的名称,因为主机无法在具有相同名称的节点之间进行解析。