Networking
Ideal Network Setup for ROS
The prefererred way of networking is that you have your laptop attached to ethernet, connected to router, and your robot connected over 5.8Ghz WiFi.
The robot runs a RaspberryPI, with a USB Wireless Adapter EW-7822UTC. You can also use the built in wireless adapter, but we recomend the EW-7822UTC for faster communication.
In order for ROS networking to work, in the diagram above both hosts must be able to resolve each other.
In order for .local
domainname resolution, install libnss-mdns
on both your laptop and robot:
sudo apt install libnss-mdns
Open a terminal in your laptop and:
ping robot.local
and you should be getting replies.
Login remotely to your robot and:
ping laptop.local
and you should be getting replies.
If both sides can not ping each other ROS will not work. This is important for containerization. If your ROS node is running in a container, make sure that it can resolve and connect other nodes.
ROS_MASTER_URI
ROS_MASTER_URI
tells ROS programs where to connect to contact roscore
On the client it should point to the robot, and on the robot it should point to itself.
ROS_HOSTNAME
ROS_HOSTNAME
tells ROS programs what is the name of the current node, so others could connect to.
On the Laptop, add this to ~/.bashrc
export ROS_MASTER_URI=http://robot.local:11311
export ROS_HOSTNAME=laptop.local
On the Robot, add this to ~/.bashrc
export ROS_MASTER_URI=http://127.0.0.1:11311
export ROS_HOSTNAME=robot.local
While your robot is running roscore, execute the following command at laptop to test:
rostopic list
Should return:
/rosout
/rosout_agg
TROUBLESHOOTING
There are two modes of failure.
rostopic list
returns topics, butrostopic echo /odom
will not stream data
REASON: ROS_MASTER_URI
is set correctly, but the client is unable to contact the host:port
that publishes the /odom
SOLUTION: Use rostopic info /odom
to get information on which node publishes the odom
at which host:port
, and make sure that both hosts can communicate.
rostopic echo /odom
streams data, butrostopic pub /topic
will not send to the robot.
REASON:ROS_MASTER_URI
is set correctly, but the ROS_HOSTNAME
given could not be contacted by robot.
SOLUTION: Make sure ROS_HOSTNAME
is set correctly, and make sure value given in ROS_HOSTNAME
can be reached from robot.