ROS2 communication between a docker container on AWS and a local Desktop environment

Hello,

I have started recently a ROS2 project that operates remotly in a docker development container on AWS. My objective is to establish a direct bidirectional communication between ROS2 in this container and another ROS2 environment that was installed on a local Jetson. For additional context, ros2 will be used as part of isaac-sim ros2 bridge to communicate data from and to a robot placed in the simulation environment as part of a robotic digital twin project.

In the docker container:

Ubuntu version: 20.04

ROS2 version: foxy

ROS2 Environment variables:

ROS_MASTER_URI= http://172.17.0.1:11311

ROS_IP =52.60.66.162

ROS_DOMAIN_ID =0

FASTRTPS_DEFAULT_PROFILES_FILE =~/.ros/fastdds.xml

“172.17.0.1” is the IP address found on the local computer that I am supposed to communicate with using the terminal command. This IP address appears under docke0 inet (I used this local IP address since the docker container was created on top of the host network stack as you will later see in the command that created the container). 11311 was assumed to be the port that ROS2 uses (I might be wrong so feel free to correct me) (I also tried port 11511)

“52.60.66.162” is the public IP address of the AWS EC2 instance that I am connected to on both the computer that is starting the remote docker container on AWS and the local Jetson
The fastdds.xml file was created in the <~/.ros> directory with the following content:

<?xml version="1.0" encoding="UTF-8" ?>

<license>Copyright (c) 2022, NVIDIA CORPORATION.  All rights reserved.
NVIDIA CORPORATION and its licensors retain all intellectual property
and proprietary rights in and to this software, related documentation
and any modifications thereto.  Any use, reproduction, disclosure or
distribution of this software and related documentation without an express
license agreement from NVIDIA CORPORATION is strictly prohibited.</license>

<profiles xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles" >
    <transport_descriptors>
        <transport_descriptor>
            <transport_id>CustomUdpTransport</transport_id>
            <type>UDPv4</type>
        </transport_descriptor>
    </transport_descriptors>

    <participant profile_name="udp_transport_profile" is_default_profile="true">
        <rtps>
            <userTransports>
                <transport_id>CustomUdpTransport</transport_id>
            </userTransports>
            <useBuiltinTransports>false</useBuiltinTransports>
        </rtps>
    </participant>
</profiles>

After pulling the following isaac-sim docker using the following command:

docker pull nvcr.io/nvidia/isaac-sim:2022.2.1

The docker container is created as follows in VSCode:

docker run --name isaac-ros-bridge-3 --entrypoint bash -it --gpus all -e "ACCEPT_EULA=Y" --network=host --ipc=host --pid=host     -v ~/docker/isaac-sim/cache/kit:/isaac-sim/kit/cache/Kit:rw     -v ~/docker/isaac-sim/cache/ov:/root/.cache/ov:rw     -v ~/docker/isaac-sim/cache/pip:/root/.cache/pip:rw     -v ~/docker/isaac-sim/cache/glcache:/root/.cache/nvidia/GLCache:rw     -v ~/docker/isaac-sim/cache/computecache:/root/.nv/ComputeCache:rw     -v ~/docker/isaac-sim/logs:/root/.nvidia-omniverse/logs:rw     -v ~/docker/isaac-sim/data:/root/.local/share/ov/data:rw     -v ~/docker/isaac-sim/documents:/root/Documents:rw          -v /dev/shm:/dev/shm     public.ecr.aws/nvidia/isaac-sim:2022.2.1

On local Jetson:

Ubuntu version: 20.04

ROS2 version: foxy

ROS2 Environment variables:

ROS_MASTER_URI= http:// 52.60.66.162:11311 (I also tried port 11511)

ROS_IP = 172.17.0.1

ROS_DOMAIN_ID =0

FASTRTPS_DEFAULT_PROFILES_FILE =~/.ros/fastdds.xml

The fastdds.xml was the same as previously discussed and tried with and without it on the local Jetson.

When I start a simple talker node in the docker container using the following command:

ros2 run demo_nodes_py talker

and list the ros2 topic using: , I can see the topic /chatter listed.

But when I start a simple listener on the local machine using the following command:

ros2 run demo_nodes_py listener

I do not received the published messages and other way around gives the same behaviour (i.e. Talker started on local machine and listener started in the docker container on AWS).

For additional information: when I change the ROS_DOMAIN_ID to another number like 2 or 42… (while keeping it the same on both the container and the local Jetson environment) è I cannot see the /chatter topic listed anymore.

Also, when I start the talker on the Jetson I cannot see the /chatter topic listed in the AWS container

Any insights or guidance to help me solve this problem? Thanks in advance.

Hey, was your problem solved?

I am having the same issue. I am running docker on jetson nano and trying to communicate between ros2 on docker with ros2 in my device (laptop).
I am getting only topic name in docker when I ran talker on my device and ros2 topic list on docker but I can’t get the topic data.
When I try the other way talker on docker and listener on my device then I can’t even get the topics name.

DETAILS:-
ROS2 - Humble
RMW_IMPLEMENTATION=rmw_fastrtps_cpp (on both)
ROS_DOMAIN_ID=5 (on both)