Advantech Robotic Suite/ROS DOMAIN ID
Contents
Introduction
ROS 2 uses for communication is DDS. In DDS, the primary mechanism for having different logical networks share a physical network is known as the Domain ID. ROS 2 nodes on the same domain can freely discover and send messages to each other, while ROS 2 nodes on different domains cannot. All ROS 2 nodes use domain ID 0 by default. To avoid interference between different groups of computers running ROS 2 on the same network, a different domain ID should be set for each group.
The ROS2 Suite offers a convenient method for modifying the ROS domain ID (default is 0).
Prerequisite
Please make sure that ROS2 Suite v1.3.0 or higher have been installed in your environment.
How to
Set ROS_DOMAIN_ID of the ROS2 suite application
Script for set ROS_DOMAIN_ID of the ROS2 suite application. Note: Currently, this function only supported in ROS2 Suite v1.3.0 on x86.
$ cd /usr/local/Advantech/ros $ ./change-ros-domain-id.sh
Confirm whether the variable is modified successfully in host.
$ echo $ROS_DOMAIN_ID
Confirm whether the variable is modified successfully in container.
$ docker exec -it edge-ros2-foxy bash $ echo $ROS_DOMAIN_ID
Set ROS_DOMAIN_ID in host manually
Please refer to Q&A : How to set ROS_DOMAIN_ID in host
Set ROS_DOMAIN_ID in docker container manually
Step1: Open docker-compose.yml
$ cd /usr/local/Advantech/ros/container/docker/docker-compose/<docker_container_name> $ vim docker-compose.yml
Step2: Set ROS_DOMAIN_ID=<your_domain_id> in docker-compose.yml
Note: If you want to follow the host's ROS_DOMAIN_ID variable, please set ROS_DOMAIN_ID=${ROS_DOMAIN_ID}
.
.
.
environment:
- ROS_DOMAIN_ID=<your_domain_id>
.
.
.
Step3: Restart container for update environment variables of docker container
$ cd /usr/local/Advantech/ros/container/docker $ ./stop.sh <docker_container_name> $ ./launch.sh <docker_container_name>
Step4: Confirm whether the variable is modified successfully in container
$ docker exec -it <docker_container_name> bash $ echo $ROS_DOMAIN_ID