In this tutorial, we will learn how to run ROS 2 on different machines using the ROS_DOMAIN_ID environment variable.
We will use the built-in demo_nodes_cpp package as an example, running the talker node on one machine to broadcast “Hello World” messages over a topic called /chatter. We will run the listener node on another machine.
Prerequisites
- You have ROS 2 installed on multiple computers.
Directions
First, ensure both computers are on the same network.
- Connect both machines to the same WiFi network or connect them using an Ethernet cable.
We will now set the ROS_DOMAIN_ID on the first machine.
The ROS_DOMAIN_ID is like a unique channel number that allows ROS 2 nodes to communicate with each other when they are set to the same value, preventing interference from other ROS 2 systems on the same network. The default ROS_DOMAIN_ID is 0, and safe values range from 0 to 101, inclusive.
Open a terminal on the first machine.
Set the ROS_DOMAIN_ID to a valid integer value, e.g., 5:
export ROS_DOMAIN_ID=5
Run the talker node:
ros2 run demo_nodes_cpp talker
Set the ROS_DOMAIN_ID on the second machine (listener).
Open a terminal on the second machine.
Set the ROS_DOMAIN_ID to the same value as the first machine:
export ROS_DOMAIN_ID=5
Run the listener node:
ros2 run demo_nodes_cpp listener
Observe the communication. The listener node on the second machine should receive messages from the talker node on the first machine.
Press CTRL + C on the second machine (the one with the listener node).
Experiment with different ROS_DOMAIN_ID values.
Set a different ROS_DOMAIN_ID on the second machine, e.g., 8:
export ROS_DOMAIN_ID=8
Run the listener node again:
ros2 run demo_nodes_cpp listener
Observe that the listener node no longer receives messages from the talker node because they are on different ROS domains.
Make the ROS_DOMAIN_ID change permanent
Open the .bashrc file in a text editor:
gedit ~/.bashrc
Add the following line at the end of the file:
export ROS_DOMAIN_ID=5
Save the file and exit the text editor.
Source the .bashrc file or open a new terminal for the changes to take effect:
source ~/.bashrc
You can now rerun the listener.
ros2 run demo_nodes_cpp listener
Everything is working again.
By following these steps, you can run ROS 2 nodes on different machines using the ROS_DOMAIN_ID environment variable to ensure they communicate on the same ROS domain.
That’s it! Keep building!