I am working with ROS. I have a detection node acting as a talker (det_talker.py
) on one Ubuntu 16.04 machine and another node acting as a listener (det_listener.py
). I intend to run the listener on master (an Ubuntu 14.04 machine) to receive the messages being sent from the talker. When I run the talker from a terminal followed by the listener on the master, I can see the messages being received on the master.
However, when I run the same talker node by putting the necessary commands for sourcing the setup.bash file as well as configuring the IP for the master in a bash script and run this script from startup (by adding the script in Startup Applications), I cannot see any messages on the master.
Configuration on the machine with the talker node:
Configuration on the machine which acts as master:
I have tried changing the ROS_IP on master to ubuntu16_ip but the result is still the same. The script I am using to run the detection node from system startup looks like follows:
#!/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
I have tried running this bash script from a terminal; it runs successfully and I can see the messages on master when I run the det_listener.py node. Only when I run it from startup, there are no messages (the node does run, however).
Furthermore, I can see on the master that the node is running because it shows the node when I run rosnode list
and rostopic list
commands. I should also mention that Ubuntu 16 has Kinetic and Ubuntu 14 is running an Indigo version of ROS. The reason why I think different versions should not pose a problem because I can indeed get the messages when executing the node from terminal.
My question is how do I get the messages to be received on the master by running the talker from startup. Thanks.
Note: This is a cross post of the same question I asked on ROS Answers, here. I am posting it on SO as I did not get any response over there yet.
From the help of Benyamin Jafari's comment on my question, I managed to find the solution:
I added the IP and name of the master (ubuntu14) in /etc/hosts file on the node machine (ubuntu16) and vice versa. When I restarted both machines and ran the node again from startup, I can receive the messages on the master.
A side note: If someone (like me) is trying to do a similar task with running multiple nodes and getting all of the nodes' messages on the master, make sure to add the IPs and names of all the nodes in /etc/hosts of the master AND that all the nodes have distinct names since it is not possible for the master to resolve between nodes having same names.