Understanding DDS and the ROS_DOMAIN_ID Variable

DDS and the ROS_DOMAIN_ID are important when you have more than one robot using the same WiFi network. In this tutorial, I cover these two fundamental concepts.

If you prefer learning through video rather than text, check out the YouTube video below where I walk you through the entire tutorial step by step. Otherwise, keep reading.

How DDS Works?

dds-overview

When you’re working with robots, you need a way for all the different parts of the robot to talk to each other. That’s where something called DDS comes in. DDS stands for Data Distribution Service, and it’s like a super-advanced messaging system for robots and computers.

Think of it like this: imagine you have a bunch of robots in a factory, and they all need to work together to build cars. Each robot has a specific job, like welding doors or painting bumpers. To do their jobs, they need to be able to send messages to each other, like “I’ve finished welding this door” or “I need more paint over here!”

DDS is what makes this communication possible. It is a set of rules that all the robots agree to follow so they can send messages quickly and reliably. It is kind of like a big chat room where robots can post and read messages, but instead of just being for fun, these messages contain important information that the robots need to do their jobs.

ROS 2 uses DDS under the hood to help all the different parts of a robot communicate. You can think of DDS as the glue that holds everything together in a ROS 2 system.

What is the ROS_DOMAIN_ID?

Now, here’s where something called the ROS_DOMAIN_ID comes in. In a DDS system, you can have multiple “chat rooms,” each with its own ID number. These “chat rooms” are called domains in DDS language. The ROS_DOMAIN_ID is just a number that tells ROS which domain to use.

By default, ROS uses 0 for the ROS_DOMAIN_ID. It is fine if we keep the default since we are working in simulation. However, in the real world, you might have a facility with multiple robots, all running ROS 2. If all these robots use the default settings, they’ll all be talking in the same “chat room” – domain 0. 

This is fine if you want all your robots to be able to communicate with each other. But let’s say you have two different teams of robots in your factory, and you don’t want them to get confused by hearing each other’s messages. You could put one team in domain 1 and the other team in domain 2. They’re all still using DDS to communicate, but the two teams can’t hear each other because they’re in different domains.

The easiest way to choose a ROS_DOMAIN_ID is to pick a number between 0 and 101, or between 215 and 232. These numbers are less likely to conflict with other programs that might be using DDS.

In my tutorials, we’ll be sticking with the default ROS_DOMAIN_ID of 0. This means all our robots will be able to communicate with each other. But if you ever need to work with multiple groups of robots that shouldn’t be talking to each other, remember that you can use different ROS_DOMAIN_IDs to keep their conversations separate.

If you did want to change the ROS_DOMAIN_ID, you can do it by typing this command:

export ROS_DOMAIN_ID=<your_chosen_number>

Replace <your_chosen_number> with the ROS_DOMAIN_ID you want to use. For example, if you want to use a ROS_DOMAIN_ID of 42, you would add in the terminal window before the commands you want to run:

export ROS_DOMAIN_ID=42

Remember, if you have multiple robots on the same WiFi network and you want them to be able to talk to each other, they should all have the same ROS_DOMAIN_ID. But if you have groups of robots that shouldn’t be communicating, give each group its own ROS_DOMAIN_ID.

Example

Let’s look at an example:

Open a new terminal, and type this:

ros2 run demo_nodes_cpp talker

This “talker” program publishes messages to the ROS 2 system. 

Open another terminal window, and type:

ros2 run demo_nodes_py listener

You can see both programs are able to talk to each other freely because they have the same ROS_DOMAIN_IDs.

1-talk-freely

Now close both nodes by pressing CTRL+C in both terminal windows.

Now in a the first terminal window, type this:

export ROS_DOMAIN_ID=8

In that same terminal window, type:

ros2 run demo_nodes_cpp talker

Now in your second terminal window, type:

ros2 run demo_nodes_py listener

You can see this node can’t receive messages from the other node.

2-node-cannot-receive-messages

You can now close this listener using CTRL + C.

Now set the ROS_DOMAIN_ID to match our publisher node.

export ROS_DOMAIN_ID=8
ros2 run demo_nodes_py listener

You can see now that, since these nodes have the same ROS_DOMAIN_ID, they can now communicate with each other. 

3-same-ros-domain-id

That’s it. I’ll see you in the next tutorial. Keep building!

How to Install Ubuntu 24.04 Virtual Machine on a Windows PC

In this tutorial, you will install Ubuntu and Virtual Box on your personal computer. Whether you have a computer using Windows or a Mac, by the end of this tutorial, you will have Ubuntu all setup and ready to go.

If you prefer learning through video rather than text, check out the YouTube video below where I walk you through the entire process step by step. Otherwise, keep reading.

What is Ubuntu?

Ubuntu is an operating system for your computer, just like Windows or macOS, but it is based on Linux –  a free, open-source system that serves as the foundation for many computer programs. 

Ubuntu provides a user-friendly desktop environment see in the lead image for this blog post. 

Why use Ubuntu to program robots when we could use Windows or macOS?

Three reasons:

  1. It is free to use.
  2. It is open source, which means the code is publicly available for you to modify and distribute without paying thousands of dollars in license fees.
  3. It is fully supported by ROS 2, the most popular framework in the world for writing robotics software.

What is VirtualBox?

VirtualBox is a program that lets you run a different operating system inside your current one. It is like having a computer within your computer. 

VirtualBox creates a safe, isolated space where you can experiment with other operating system environments without changing anything on your main Mac or Windows-based computer.

What About a Real-World Robotics Project?

On a real-world robotics project, you will use a small computer instead of your desktop PC. Examples include the Intel NUC, Raspberry Pi, or NVIDIA Jetson boards. 

These small computers serve as your robot’s “brain,” taking care of all the decisions on what actions the robot should take based on data from sensors like cameras, LIDAR, wheel encoders, and GPS. 

We’ll be harnessing the power of Ubuntu on a desktop computer, creating a robust virtual environment for our robotics journey. This setup is not just a convenient starting point for beginners—it is actually the ideal platform for any robotics project, regardless of experience level. 

Why Simulation Matters in Professional Robotics

It is worth mentioning that even in professional robotics jobs, a significant amount of work is done in simulation environments similar to what we’re setting up. There are three reasons for this: Speed, Spend, and Safety. I call it the three S’s:

  1. Speed: You can rapidly prototype new ideas in a simulated environment before committing to physical builds.
  2. Spend: Developing and testing in a virtual environment is much cheaper than building and testing physical prototypes for every iteration.
  3. Safety: You can test potentially dangerous scenarios without damaging expensive hardware or running into people:
    1. An example would be testing a cliff sensor for a mobile robot that is designed to keep the robot from falling down stairs. 
    2. You wouldn’t want to test that logic on a real robot without doing it in simulation first!

By starting with this virtual Ubuntu setup, you’re not only learning the basics but also preparing yourself for practices used in real-world robotics development. This approach bridges the gap between beginner-friendly learning and professional-grade tools and methodologies.

Download the Ubuntu Image

Now let’s download Ubuntu. 

First, go to the Ubuntu Releases page (https://releases.ubuntu.com/) on the Ubuntu website to find the latest version of Ubuntu that has long term support (LTS). 

As of the date of this writing, the latest version is Ubuntu 24.04 LTS (Noble Numbat).

Click on “Ubuntu 24.04 LTS (Noble Numbat)”.

1-ubuntu-releases-2024

Click on the 64-bit PC (AMD64) desktop image.

2-64-bit-pc-desktop-image

This .iso file is large. It will take a while to download. Just go do something else and come back to it when it is finished.

When the download finishes, you can either keep the file in the default download location, which for me is my Desktop. Or, you can move the file to another directory on your computer.

Now, go to the next step.

Install VirtualBox

Let’s install VirtualBox. 

Go to the VirtualBox downloads page. Here is the link.

Select the version that is compatible with your computer. I will click “Windows hosts” since I am using a Windows-based computer.

3-download-virtual-box

Click on the executable file that you just downloaded. 

Follow the prompts to install it on your machine. 

Accept all the defaults by clicking either Next, Yes, Install, or Finish through all the prompts.

You can find detailed installation instructions for all operating systems (Windows, Mac OS, and Linux) in the instruction manual if you encounter problems.

When you are finished downloading and installing VirtualBox, you can delete the original executable file that you used to install the program. You don’t need it anymore.

Create a Virtual Machine

Now that VirtualBox is installed, we need to create a new virtual machine using the Ubuntu image we downloaded earlier.

Open Virtual Box.

Click the New button in the toolbar.

4-click-new-button

Name and Operating System

First, let’s complete the “Name and Operating System” section.

On the “Name” line, type in a descriptive name for your operating system. I will call mine “Ubuntu24.04”.

5-name-and-operating-system

On the “Folder” line, you can keep the default Folder path. This folder is where your virtual machines will be stored. 

On the “ISO Image” line, select the path to the Ubuntu .iso file you downloaded earlier.

On the “Type” line, select Linux.

On the “Subtype” line, select Ubuntu.

On the “Version” line, select Ubuntu (64-bit).

Select “Skip Unattended Installation”. By selecting this option, we will manually go through the entire installation process of the operating system. 

Hardware

Click on the arrow next to “Hardware” to expand the menu options.

6b-hardware-options

On the “Base Memory” line, move the slider to 16384 MB (megabytes). This memory size will be enough for us to run our robotics simulator, Gazebo, which requires a lot of memory.

On the “Processors” line, select 8 CPUs. If your computer supports it, you can set a higher number. I like to make sure my slider stays within the safe, green color to avoid problems.

Click on the arrow next to “Hard Disk” to expand the menu options.

6-50gb-storage

Click on the slider bar to set 50.00 GB for the storage space.

Click “Finish”.

Highlight Ubuntu24.04, and click Settings.

6c-settings

Click Display.

6d-display

Change Video Memory to 128 MB (megabytes).

Click OK.

Install Ubuntu

Highlight Ubuntu24.04, and click Start on the top menu.

7-doubleclick-start

A startup window will appear.

Select “Try or Install Ubuntu” by Pressing Enter.

8-startup-window

Choose your language. I will select “English”.

9-choose-language

Click Next.

On the “Accessibility in Ubuntu” panel, click Next.

10-accessibility-in-ubuntu

On the “Keyboard layout” panel, select your desired keyboard layout, and click Next.

11-select-keyboard-layout

On the “Connect to the internet” panel, select “Use wired connection”, and click Next.

12-connect-to-the-internet

If you get prompted to update the Ubuntu installer, do that now.

Then click the “Install Ubuntu 24.04.1 LTS” icon on the Ubuntu desktop to continue the installation.

On the “What do you want to do with Ubuntu?” panel, select “Install Ubuntu”, and then click Next.

13-install-ubuntu

On the “How would you like to install Ubuntu?” panel, select “Interactive installation”, and then click Next.

14-interactive-installation

On the “What apps would you like to install to start with?” panel, select the “Default selection”, and then click Next.

15-what-apps-start-with

On the “Install recommended proprietary software?” panel, select both checkboxes, and then click Next.

16-install-recommended

On the “How do you want to install Ubuntu?” panel, select “Erase disk and install Ubuntu”.

17-how-want-install-ubuntu

Click Next.

On the “Create your account” panel, fill in your information with your desired name (e.g. “ubuntu”). Also fill in your password.

18-create-your-account

Deselect “Require my password to log in”.

Click Next.

Select your time zone, and then click Next.

19-select-your-timezone

On the “Review your choices” panel, click Install.

20-review-your-choices

Sit back and relax while Ubuntu installs.

21-after-click-install

Click “Restart now” when the installation finishes.

22-restart-when-done

When you see a message that says “Please remove the installation medium, then press Enter”, press Enter on your keyboard.

22b-remove-installation-medium

Configure Ubuntu

You will now see a welcome screen.

23-welcome-screen

Click Next.

On the “Enable Ubuntu Pro” panel, select “Skip for now”, and click Next.

I will select “No, don’t share system data”, and click Next.

24-help-improve-ubuntu

On the “Get started with more applications” panel, click Finish.

25-click-finish

On the bottom left side of the screen, click the ring icon.

26-click-icon

Right-click the terminal icon, and click “Pin to Dash”.

27-pin-to-dash

Click the ring icon again to return to the Desktop.

Now let’s make sure your user has sudo privileges. Sudo privileges allow a user to execute commands with superuser (administrative) rights, enabling them to perform tasks that require higher levels of access on the system. 

Click the terminal icon on the left side of the screen.

30-terminal-icon

Type the following command inside the terminal window, and press Enter.

whoami

This is your username. 

Now type:

sudo adduser <username> sudo

Replace <username> with your username.

31b-add-sudo-user

Now shutdown the virtual machine by typing the following command and pressing Enter on the keyboard.

sudo shutdown -h now

Install VirtualBox Guest Additions

Now we need to install VirtualBox Guest Additions. 

VirtualBox Guest Additions are a set of applications that improve the performance and usability of virtual machines.

Highlight Ubuntu24.04, and click Start on the top menu to launch the Desktop environment.

Open a terminal window, and type the following commands to upgrade the operating system software packages:

sudo apt-get update -y

When prompted for the password, type in your password and press Enter.

sudo apt-get upgrade -y

Clear out all the logs in the terminal by typing the following command, and pressing Enter:

clear

Now reboot the machine.

reboot

When you get back to the Desktop, open a terminal window, and type the following command.

sudo apt install build-essential dkms linux-headers-$(uname -r) -y

Next, go to the menu bar at the top of the Virtual Machine.

Click “Devices”.

32-menu-bar-click-devices

Click “Insert Guest Additions CD image” to mount the Guest Additions ISO file inside your virtual machine.

Click the Files icon on the left side of the screen.

32-click-files-icon

Click VBox_GAs on the left panel.

33-vbox-gas

Right click on autorun.sh and select “Run as program”. (you can also click Run Software at the top)

34-run-as-program
34-run-software

Enter your password when the Authentication Required pop-up window appears.

Click “Authenticate.”

Once all the logs stop, press Enter to close the installation window.

34b-logs-stop

Shutdown your system with the following command inside a terminal window:

sudo shutdown -h now

Highlight Ubuntu24.04 on the left panel.

Click Machine -> Settings in the dropdown menu at the top of Virtual Box.

Go to General -> Advanced on the Settings menu.

Enable “Bidirectional” for both “Shared Clipboard” and “Drag’n’Drop”.

35-enable-bidirectional

Click OK.

Highlight Ubuntu24.04 on the left panel.

Click Start to launch the Desktop environment again.

If the environment doesn’t launch after a minute or so, click File -> Close, and power everything down, and try launching it again by pressing the Start button on the home menu.

Change the Screen Resolution

You may notice some annoying flickering that happens on your screen. This flickering happens either at random times or when I try to move windows with the virtual machine. The issue is due to the screen resolution.

Do the following steps to make this go away:

Go to the View menu at the top of the window.

36-view-autoresize

To set a specific fixed resolution, go to View -> Virtual Screen 1, and select your desired resolution (e.g. 1920 x 1080).

Congratulations, you have finished installing and setting up Ubuntu. 

I will see you in the next tutorial!

How to Check What ROS 2 Version Is Installed on Your Machine

Below are the various ways you can check to see what ROS 2 distribution is installed on your machine.

If you just want to see what version of ROS 2 you have, type:

ls /opt/ros/

Example return value:

jazzy

Alternatively, you can get the same output by typing either of the commands below:

printenv ROS_DISTRO
echo $ROS_DISTRO

If you want to see what Python version you have along with the ROS 2 distribution that is installed, type:

env | grep ROS

If you want to see a description of all the ROS 2 packages installed on your system, type:

dpkg -l | grep ros-

That’s it! Keep building!