当 talker 从启动开始运行时,master 上没有收到消息
Messages not received on master when the talker runs from startup
我正在使用 ROS。我在一台 Ubuntu 16.04 机器上有一个检测节点充当说话者 (det_talker.py
),另一个节点充当监听器 (det_listener.py
)。我打算 运行 master 上的监听器(一台 Ubuntu 14.04 机器)接收从 talker 发送的消息。当我 运行 来自终端的发话者后面跟着主机上的听众时,我可以看到主机上收到的消息。
但是,当我 运行 同一个 talker 节点时,通过放置必要的命令来获取 setup.bash 文件以及在 bash 脚本中配置主机的 IP 和运行 这个启动脚本(通过在 Startup Applications 中添加脚本),我在 master 上看不到任何消息。
带有 talker 节点的机器上的配置:
- ROS_MASTER_URI = http://ubuntu14_ip:11311
- ROS_IP = ubuntu16_ip
作为主机的机器上的配置:
- ROS_MASTER_URI = http://ubuntu14_ip:11311
- ROS_IP = ubuntu14_ip
我试过将 master 上的 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 上看到消息。只有当我 运行 它从启动时,没有消息(节点 运行,但是)。
此外,我可以在 master 上看到该节点是 运行ning,因为它在我 运行 rosnode list
和 rostopic list
命令时显示该节点。我还应该提到 Ubuntu 16 具有 Kinetic,而 Ubuntu 14 是 运行ning 的 Indigo 版本的 ROS。我之所以认为不同版本应该不会造成问题,是因为我确实可以在从终端执行节点时获取消息。
我的问题是如何通过 运行从启动时启动 talker 来获取要在 master 上接收的消息。
谢谢。
注意:这是我在 ROS Answers here 上提出的同一个问题的交叉 post。我在 SO 上 post 发送它,因为我还没有收到任何回复。
问题是因为您的终端与用于启动的终端不在同一 shell(会话)中,因此没有为您设置变量。
您应该将这些值写入您使用的用户的 ~/.bashrc。
在 Benyamin Jafari 对我的问题的评论的帮助下,我设法找到了解决方案:
我在节点机器(ubuntu16)的/etc/hosts文件中添加了主机(ubuntu14)的IP和名称,反之亦然。当我重新启动两台机器和 运行 节点时,我可以在主服务器上接收消息。
旁注:如果有人(像我一样)正在尝试对 运行 多个节点执行类似任务并获取主节点上的所有节点消息,请确保添加 IP 和名称主节点 /etc/hosts 中的所有节点,并且所有节点都具有不同的名称,因为主节点不可能在具有相同名称的节点之间进行解析。
我正在使用 ROS。我在一台 Ubuntu 16.04 机器上有一个检测节点充当说话者 (det_talker.py
),另一个节点充当监听器 (det_listener.py
)。我打算 运行 master 上的监听器(一台 Ubuntu 14.04 机器)接收从 talker 发送的消息。当我 运行 来自终端的发话者后面跟着主机上的听众时,我可以看到主机上收到的消息。
但是,当我 运行 同一个 talker 节点时,通过放置必要的命令来获取 setup.bash 文件以及在 bash 脚本中配置主机的 IP 和运行 这个启动脚本(通过在 Startup Applications 中添加脚本),我在 master 上看不到任何消息。
带有 talker 节点的机器上的配置:
- ROS_MASTER_URI = http://ubuntu14_ip:11311
- ROS_IP = ubuntu16_ip
作为主机的机器上的配置:
- ROS_MASTER_URI = http://ubuntu14_ip:11311
- ROS_IP = ubuntu14_ip
我试过将 master 上的 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 上看到消息。只有当我 运行 它从启动时,没有消息(节点 运行,但是)。
此外,我可以在 master 上看到该节点是 运行ning,因为它在我 运行 rosnode list
和 rostopic list
命令时显示该节点。我还应该提到 Ubuntu 16 具有 Kinetic,而 Ubuntu 14 是 运行ning 的 Indigo 版本的 ROS。我之所以认为不同版本应该不会造成问题,是因为我确实可以在从终端执行节点时获取消息。
我的问题是如何通过 运行从启动时启动 talker 来获取要在 master 上接收的消息。 谢谢。
注意:这是我在 ROS Answers here 上提出的同一个问题的交叉 post。我在 SO 上 post 发送它,因为我还没有收到任何回复。
问题是因为您的终端与用于启动的终端不在同一 shell(会话)中,因此没有为您设置变量。 您应该将这些值写入您使用的用户的 ~/.bashrc。
在 Benyamin Jafari 对我的问题的评论的帮助下,我设法找到了解决方案:
我在节点机器(ubuntu16)的/etc/hosts文件中添加了主机(ubuntu14)的IP和名称,反之亦然。当我重新启动两台机器和 运行 节点时,我可以在主服务器上接收消息。
旁注:如果有人(像我一样)正在尝试对 运行 多个节点执行类似任务并获取主节点上的所有节点消息,请确保添加 IP 和名称主节点 /etc/hosts 中的所有节点,并且所有节点都具有不同的名称,因为主节点不可能在具有相同名称的节点之间进行解析。