我和ROS一起工作。我在一台Ubuntu16.04机器上有一个检测节点充当对话者(det_talker.py),而另一个节点充当侦听器(det_listener.py)。我打算在主(一台Ubuntu14.04机器)上运行侦听器来接收从说话者发送的消息。当我从主程序上的侦听器后面的终端运行对话器时,我可以看到在主机上接收到的消息。
但是,当我运行同一个talker节点时,我会在bash脚本中放置必要的命令来获取setup.bash文件,并为主服务器配置IP,然后从启动时(通过在启动应用程序中添加脚本)运行这个脚本,我无法在主服务器上看到任何消息。
计算机上具有talker节点的配置:
作为主机的机器上的配置:
我尝试过将主服务器上的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节点时我可以看到主节点上的消息。只有在我从启动时运行它时,才没有消息(不过,该节点确实运行)。
此外,我可以在主服务器上看到节点正在运行,因为它在运行rosnode list和rostopic list命令时显示节点。我还应该提到,Ubuntu 16有Kinetic,Ubuntu 14正在运行Indigo版本的ROS。我认为不同版本不应该造成问题的原因是,在从终端执行节点时,我确实可以获得消息。
我的问题是如何通过在启动时运行对话器来获得要在主机上接收的消息。谢谢。
注意:这是我在ROS答案上问的同一个问题的交叉帖子,这里。我张贴在上面,因为我没有得到任何反应,在那里。
发布于 2018-07-06 12:42:39
在本雅明·贾法里对我问题的评论的帮助下,我设法找到了解决办法:
我在节点机器(ubuntu14)上的/etc/host文件中添加了主服务器(ubuntu16)的IP和名称,反之亦然。当我重新启动两台机器并在启动时再次运行节点时,我可以在主服务器上接收消息。
附带注意:如果有人(像我一样)试图通过运行多个节点并在主节点上获取所有节点的消息来执行类似的任务,请确保添加主主机/etc/主机中所有节点的it和名称,并且所有节点都有不同的名称,因为主节点无法在具有相同名称的节点之间进行解析。
发布于 2018-07-03 13:19:32
问题在于,您的终端与用于启动的shell (会话)不同,因此没有为您设置变量。您应该将这些值写入您使用的用户的~/..bashrc。
https://stackoverflow.com/questions/51152064
复制相似问题