Coder Social home page Coder Social logo

eprosima / dds-router Goto Github PK

View Code? Open in Web Editor NEW
51.0 10.0 18.0 12.63 MB

The DDS Router is an application developed by eProsima that allows, using Fast DDS, to communicate by DDS protocol different networks. Looking for commercial support? Contact [email protected]

Home Page: https://eprosima.com

License: Apache License 2.0

CMake 10.10% C++ 74.10% PowerShell 0.21% Python 12.07% Shell 3.52%
router dds fastdds ros2 omg rtps middleware

dds-router's Introduction

eProsima DDS Router

License Releases Issues Forks Stars test codecov Documentation Status

eProsima DDS Router is an end-user software application that enables the connection of distributed DDS networks. That is, DDS entities such as publishers and subscribers deployed in one geographic location and using a dedicated local network will be able to communicate with other DDS entities deployed in different geographic areas on their own dedicated local networks as if they were all on the same network through the use of eProsima DDS Router. This is achieved by deploying a DDS Router on an edge device of each local network so that the DDS Router routes DDS traffic from one network to the other through WAN communication.

Furthermore, DDS Router is a software designed for various forms of distributed networks, such as mesh networks in which nodes are deployed in different private local networks that are auto-discovered without any centralized network node, or cloud-based networks where there is a data processing cloud and multiple geographically distributed edge devices.

Following are some of the key features of eProsima DDS Router:

  • WAN communication over TCP: it supports WAN over TCP communication to establish DDS communications over the Internet.
  • Distributed nature: the user may deploy intermediate DDS Router nodes to discover new entities that enter and leave the network dynamically.
  • Efficient data routing: DDS Router avoids data introspection achieving a zero-copy system in data forwarding.
  • Easy deployment: it is based on an easily configurable modular system for users with no knowledge of computer networks.
  • Topic allowlisting: it is possible to configure a DDS Router to forward just the user data belonging to a topic specified by the user.
  • Dynamic topic discovery: the user does not need to fully specify over which topics to communicate (i.e. provide concrete topic names and types). The discovery of topics matching the allowlisting rules automatically triggers the creation of all entities required for communication.

eProsima DDS Router overall architecture

Documentation

You can access the documentation online, which is hosted on Read the Docs.

Installation Guide

The instructions for installing the DDS Router application from sources and its required dependencies on a Linux environment are provided below. These installation instructions are a summarized version of the complete installation guide available online. Instructions for installing DDS Router on a Windows platform can be found here.

Requirements

eProsima DDS Router requires the following tools to be installed in the system:

CMake, g++, pip, wget and git

These packages provide the tools required to install DDS Router and its dependencies from command line. Install CMake, g++, pip, wget and git using the package manager of the appropriate Linux distribution. For example, on Ubuntu use the command:

sudo apt install cmake g++ pip wget git

Colcon

colcon is a command line tool based on CMake aimed at building sets of software packages. Install the ROS 2 development tools (colcon and vcstool) by executing the following command:

pip3 install -U colcon-common-extensions vcstool

If this fails due to an Environment Error, add the --user flag to the pip3 installation command.

Gtest

Gtest is a unit testing library for C++. By default, DDS Router does not compile tests. It is possible to activate them with the opportune CMake options when calling colcon or CMake. For a detailed description of the Gtest installation process, please refer to the Gtest Installation Guide.

PyYAML

PyYAML is a YAML parser and emitter for Python. It is used by the DDS-Router YAML Validator for loading the content of configuration files. Install pyyaml by executing the following command:

pip3 install -U pyyaml

jsonschema

jsonschema is an implementation of the JSON Schema specification for Python. It is used by the DDS-Router YAML Validator for performing validation of configuration files against a given JSON schema. Install jsonschema by executing the following command:

pip3 install -U jsonschema

Dependencies

Asio and TinyXML2 libraries

Asio is a cross-platform C++ library for network and low-level I/O programming, which provides a consistent asynchronous model. TinyXML2 is a simple, small and efficient C++ XML parser. Install these libraries using the package manager of the appropriate Linux distribution. For example, on Ubuntu use the command:

sudo apt install libasio-dev libtinyxml2-dev

OpenSSL

OpenSSL is a robust toolkit for the TLS and SSL protocols and a general-purpose cryptography library. Install OpenSSL using the package manager of the appropriate Linux distribution. For example, on Ubuntu use the command:

sudo apt install libssl-dev

yaml-cpp

yaml-cpp is a YAML parser and emitter in C++ matching the YAML 1.2 spec, and is used by DDS Router application to parse the provided configuration files. Install yaml-cpp using the package manager of the appropriate Linux distribution. For example, on Ubuntu use the command:

sudo apt install libyaml-cpp-dev

eProsima dependencies

If it already exists in the system an installation of Fast DDS library with version greater than 2.4.0, just source this library when building the DDS Router application by using the command:

source <fastdds-installation-path>/install/setup.bash

In other case, just download Fast DDS project from sources and build it together with DDS Router using colcon as it is explained in the following section.

Colcon installation

  1. Create a DDS-Router directory and download the .repos file that will be used to install DDS Router and its dependencies:
mkdir -p ~/DDS-Router/src
cd ~/DDS-Router
wget https://raw.githubusercontent.com/eProsima/DDS-Router/main/ddsrouter.repos
vcs import src < ddsrouter.repos
  1. Build the packages:
colcon build --packages-select-regex ddsrouter

This repository holds several colcon packages. These packages are:

  • ddsrouter_core: library with the main functionality of the DDS Router.
  • ddsrouter_yaml: library to configure a DDS Router from a YAML.
  • ddsrouter_tool: application to execute a DDS Router from a YAML configuration file.
  • ddsrouter_docs: package to generate the DDS Router documentation using sphinx.
  • ddsrouter_yaml_validator: application to validate DDS Router YAML configuration files.

NOTE: Those packages could be installed and use independently (according with each package dependency). In order to compile only a package and its dependencies, use the colcon argument --packages-up-to <package>. In order to explicitly skip some of these packages, use the colcon argument --packages-skip <package1> [<package2> ...].

Run an application

To run the DDS Router application, source the installation environment and execute the executable file that has been installed in <install-path>/ddsrouter_tool/bin/ddsrouter:

# Source installation
source <install-path>/setup.bash

# Execute DDS Router
./<install-path>/ddsrouter_tool/bin/ddsrouter

Validate a configuration file

To validate a DDS Router YAML configuration file, execute the following commands:

# Source installation
source <install-path>/setup.bash

# Validate a DDS Router configuration file
ddsrouter_yaml_validator --config-file ddsrouter-config.yaml

Testing

By default, DDS Router does not compile tests. However, they can be activated by downloading and installing Gtest and building with CMake option -DBUILD_TESTS=ON. Once done, tests can be run with the following command:

colcon test --packages-select-regex ddsrouter --event-handler=console_direct+

Getting Help

If you need support you can reach us by mail at [email protected] or by phone at +34 91 804 34 48.

dds-router's People

Contributors

antonrv avatar dependabot[bot] avatar elianalf avatar irenebm avatar jparisu avatar juanlofer-eprosima avatar luciaechevarria99 avatar rsanchez15 avatar tempate avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dds-router's Issues

DDS Router Docker image not compatible with arm64 systems

Hello all

I want to run the FastDDS DDS Router Docker image on an arm64 system, but the image gives this error:

exec /bin/bash: exec format error

I guess you are only building the image for amd64 systems. Would it be possible to support it in the future?
Best, Victor

DDS Router not forwarding ros2 messages before the first echo.

I want to use DDS router to make a wan communication.
I have a public ip port-forwarded pc(server). and a pc behind a nat(client).
They are not in the same network.
dds router container is running at the server and client each.
Running in Docker(branch:main). Run with --privileged -v /dev:/dev -it --network host --ipc host --pid host
Ros humble is installed in the container with dds router.

But when i exec ros2 run demo_nodes_cpp talker in the client container, below message is printed out at the console and no more message is printed.
After that, If i exec ros2 run demo_nodes_cpp listener in the same container, every message is printed at the console. And i can check it at the server's console.
If i don't exec one of subscription(ros2 topic echo or something) for the topic, i cannot see a echo lines in the console or the server's console.
EchoParticipant just prints

New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.1.3;writer;Topic{ros_discovery_info;rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_;TopicQoS{Fuzzy{Level(40) 1};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.2.4;reader;Topic{ros_discovery_info;rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_;TopicQoS{Fuzzy{Level(40) 1};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
In Endpoint: 01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.1.3 from Participant: SimpleParticipant_domain0 in topic: ros_discovery_info payload received: Payload{00 01 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 01 c1 00 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 2f 00 00 00 07 00 00 00 74 61 6c 6b 65 72 00 00 00 00 00 00 00 00 00 00} with specific qos: SpecificEndpointQoS{Partitions{};OwnershipStrength{0}}.
New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.3.3;writer;Topic{rt/rosout;rcl_interfaces::msg::dds_::Log_;TopicQoS{Fuzzy{Level(40) 1};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
In Endpoint: 01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.1.3 from Participant: SimpleParticipant_domain0 in topic: ros_discovery_info payload received: Payload{00 01 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 01 c1 00 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 2f 00 00 00 07 00 00 00 74 61 6c 6b 65 72 00 00 00 00 00 00 01 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 03 03 00 00 00 00 00 00 00 00} with specific qos: SpecificEndpointQoS{Partitions{};OwnershipStrength{0}}.
New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.4.4;reader;Topic{rq/talker/get_parametersRequest;rcl_interfaces::srv::dds_::GetParameters_Request_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
In Endpoint: 01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.1.3 from Participant: SimpleParticipant_domain0 in topic: ros_discovery_info payload received: Payload{00 01 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 01 c1 00 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 2f 00 00 00 07 00 00 00 74 61 6c 6b 65 72 00 00 01 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 04 04 00 00 00 00 00 00 00 00 02 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 03 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 05 03 00 00 00 00 00 00 00 00} with specific qos: SpecificEndpointQoS{Partitions{};OwnershipStrength{0}}.
In Endpoint: 01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.1.3 from Participant: SimpleParticipant_domain0 in topic: ros_discovery_info payload received: Payload{00 01 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 01 c1 00 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 2f 00 00 00 07 00 00 00 74 61 6c 6b 65 72 00 00 02 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 04 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 06 04 00 00 00 00 00 00 00 00 03 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 03 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 05 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 07 03 00 00 00 00 00 00 00 00} with specific qos: SpecificEndpointQoS{Partitions{};OwnershipStrength{0}}.
In Endpoint: 01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.1.3 from Participant: SimpleParticipant_domain0 in topic: ros_discovery_info payload received: Payload{00 01 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 01 c1 00 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 2f 00 00 00 07 00 00 00 74 61 6c 6b 65 72 00 00 03 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 04 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 06 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 08 04 00 00 00 00 00 00 00 00 04 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 03 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 05 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 07 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 09 03 00 00 00 00 00 00 00 00} with specific qos: SpecificEndpointQoS{Partitions{};OwnershipStrength{0}}.
In Endpoint: 01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.1.3 from Participant: SimpleParticipant_domain0 in topic: ros_discovery_info payload received: Payload{00 01 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 01 c1 00 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 2f 00 00 00 07 00 00 00 74 61 6c 6b 65 72 00 00 04 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 04 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 06 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 08 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0a 04 00 00 00 00 00 00 00 00 05 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 03 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 05 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 07 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 09 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0b 03 00 00 00 00 00 00 00 00} with specific qos: SpecificEndpointQoS{Partitions{};OwnershipStrength{0}}.
New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.5.3;writer;Topic{rr/talker/get_parametersReply;rcl_interfaces::srv::dds_::GetParameters_Response_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.6.4;reader;Topic{rq/talker/get_parameter_typesRequest;rcl_interfaces::srv::dds_::GetParameterTypes_Request_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
In Endpoint: 01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.1.3 from Participant: SimpleParticipant_domain0 in topic: ros_discovery_info payload received: Payload{00 01 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 01 c1 00 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 2f 00 00 00 07 00 00 00 74 61 6c 6b 65 72 00 00 05 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 04 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 06 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 08 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0a 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0c 04 00 00 00 00 00 00 00 00 06 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 03 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 05 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 07 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 09 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0b 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0d 03 00 00 00 00 00 00 00 00} with specific qos: SpecificEndpointQoS{Partitions{};OwnershipStrength{0}}.
In Endpoint: 01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.1.3 from Participant: SimpleParticipant_domain0 in topic: ros_discovery_info payload received: Payload{00 01 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 01 c1 00 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 2f 00 00 00 07 00 00 00 74 61 6c 6b 65 72 00 00 06 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 04 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 06 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 08 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0a 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0c 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0e 04 00 00 00 00 00 00 00 00 07 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 03 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 05 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 07 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 09 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0b 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0d 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0f 03 00 00 00 00 00 00 00 00} with specific qos: SpecificEndpointQoS{Partitions{};OwnershipStrength{0}}.
New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.7.3;writer;Topic{rr/talker/get_parameter_typesReply;rcl_interfaces::srv::dds_::GetParameterTypes_Response_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.8.4;reader;Topic{rq/talker/set_parametersRequest;rcl_interfaces::srv::dds_::SetParameters_Request_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
In Endpoint: 01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.1.3 from Participant: SimpleParticipant_domain0 in topic: ros_discovery_info payload received: Payload{00 01 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 01 c1 00 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 2f 00 00 00 07 00 00 00 74 61 6c 6b 65 72 00 00 06 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 04 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 06 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 08 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0a 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0c 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0e 04 00 00 00 00 00 00 00 00 08 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 03 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 05 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 07 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 09 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0b 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0d 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0f 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 10 03 00 00 00 00 00 00 00 00} with specific qos: SpecificEndpointQoS{Partitions{};OwnershipStrength{0}}.
In Endpoint: 01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.1.3 from Participant: SimpleParticipant_domain0 in topic: ros_discovery_info payload received: Payload{00 01 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 01 c1 00 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 2f 00 00 00 07 00 00 00 74 61 6c 6b 65 72 00 00 07 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 04 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 06 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 08 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0a 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0c 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0e 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 11 04 00 00 00 00 00 00 00 00 08 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 03 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 05 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 07 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 09 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0b 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0d 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0f 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 10 03 00 00 00 00 00 00 00 00} with specific qos: SpecificEndpointQoS{Partitions{};OwnershipStrength{0}}.
New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.9.3;writer;Topic{rr/talker/set_parametersReply;rcl_interfaces::srv::dds_::SetParameters_Response_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.a.4;reader;Topic{rq/talker/set_parameters_atomicallyRequest;rcl_interfaces::srv::dds_::SetParametersAtomically_Request_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
In Endpoint: 01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.1.3 from Participant: SimpleParticipant_domain0 in topic: ros_discovery_info payload received: Payload{00 01 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 01 c1 00 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 2f 00 00 00 07 00 00 00 74 61 6c 6b 65 72 00 00 07 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 04 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 06 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 08 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0a 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0c 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0e 04 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 11 04 00 00 00 00 00 00 00 00 09 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 03 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 05 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 07 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 09 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0b 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0d 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 0f 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 10 03 00 00 00 00 00 00 00 00 01 0f 2e e2 3e 41 02 54 01 00 00 00 00 00 12 03 00 00 00 00 00 00 00 00} with specific qos: SpecificEndpointQoS{Partitions{};OwnershipStrength{0}}.
New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.b.3;writer;Topic{rr/talker/set_parameters_atomicallyReply;rcl_interfaces::srv::dds_::SetParametersAtomically_Response_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.c.4;reader;Topic{rq/talker/describe_parametersRequest;rcl_interfaces::srv::dds_::DescribeParameters_Request_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.d.3;writer;Topic{rr/talker/describe_parametersReply;rcl_interfaces::srv::dds_::DescribeParameters_Response_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.e.4;reader;Topic{rq/talker/list_parametersRequest;rcl_interfaces::srv::dds_::ListParameters_Request_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.f.3;writer;Topic{rr/talker/list_parametersReply;rcl_interfaces::srv::dds_::ListParameters_Response_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.10.3;writer;Topic{rt/parameter_events;rcl_interfaces::msg::dds_::ParameterEvent_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.11.4;reader;Topic{rt/parameter_events;rcl_interfaces::msg::dds_::ParameterEvent_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.3e.41.02.54.01.00.00.00|0.0.12.3;writer;Topic{rt/chatter;std_msgs::msg::dds_::String_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.

and become quiet...

New endpoint discovered: Endpoint{01.0f.2e.e2.5a.05.2e.5a.01.00.00.00|0.0.1.3;writer;Topic{ros_discovery_info;rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_;TopicQoS{Fuzzy{Level(40) 1};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.5a.05.2e.5a.01.00.00.00|0.0.3.3;writer;Topic{rt/rosout;rcl_interfaces::msg::dds_::Log_;TopicQoS{Fuzzy{Level(40) 1};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.5a.05.2e.5a.01.00.00.00|0.0.4.3;writer;Topic{rt/parameter_events;rcl_interfaces::msg::dds_::ParameterEvent_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.5a.05.2e.5a.01.00.00.00|0.0.2.4;reader;Topic{ros_discovery_info;rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_;TopicQoS{Fuzzy{Level(40) 1};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
DDS Router running.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.1.3;writer;Topic{ros_discovery_info;rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_;TopicQoS{Fuzzy{Level(40) 1};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.2.4;reader;Topic{ros_discovery_info;rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_;TopicQoS{Fuzzy{Level(40) 1};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.3.3;writer;Topic{rt/rosout;rcl_interfaces::msg::dds_::Log_;TopicQoS{Fuzzy{Level(40) 1};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.4.4;reader;Topic{rq/talker/get_parametersRequest;rcl_interfaces::srv::dds_::GetParameters_Request_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.5.3;writer;Topic{rr/talker/get_parametersReply;rcl_interfaces::srv::dds_::GetParameters_Response_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.6.4;reader;Topic{rq/talker/get_parameter_typesRequest;rcl_interfaces::srv::dds_::GetParameterTypes_Request_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.7.3;writer;Topic{rr/talker/get_parameter_typesReply;rcl_interfaces::srv::dds_::GetParameterTypes_Response_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.8.4;reader;Topic{rq/talker/set_parametersRequest;rcl_interfaces::srv::dds_::SetParameters_Request_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.9.3;writer;Topic{rr/talker/set_parametersReply;rcl_interfaces::srv::dds_::SetParameters_Response_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.a.4;reader;Topic{rq/talker/set_parameters_atomicallyRequest;rcl_interfaces::srv::dds_::SetParametersAtomically_Request_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.b.3;writer;Topic{rr/talker/set_parameters_atomicallyReply;rcl_interfaces::srv::dds_::SetParametersAtomically_Response_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.c.4;reader;Topic{rq/talker/describe_parametersRequest;rcl_interfaces::srv::dds_::DescribeParameters_Request_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.d.3;writer;Topic{rr/talker/describe_parametersReply;rcl_interfaces::srv::dds_::DescribeParameters_Response_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.e.4;reader;Topic{rq/talker/list_parametersRequest;rcl_interfaces::srv::dds_::ListParameters_Request_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.f.3;writer;Topic{rr/talker/list_parametersReply;rcl_interfaces::srv::dds_::ListParameters_Response_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.10.3;writer;Topic{rt/parameter_events;rcl_interfaces::msg::dds_::ParameterEvent_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.11.4;reader;Topic{rt/parameter_events;rcl_interfaces::msg::dds_::ParameterEvent_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.
New endpoint discovered: Endpoint{01.0f.2e.e2.66.27.0e.ec.01.00.00.00|0.0.12.3;writer;Topic{rt/chatter;std_msgs::msg::dds_::String_;TopicQoS{Fuzzy{Level(40) 0};Fuzzy{Level(40) 0};Fuzzy{Level(40) };depth(Fuzzy{Level(0) 5000});max_tx_rate(Fuzzy{Level(0) 0});max_rx_rate(Fuzzy{Level(0) 0});downsampling(Fuzzy{Level(0) 1})}(payload::rtps::v0)};SpecificEndpointQoS{Partitions{};OwnershipStrength{0}};Active;SimpleParticipant_domain0}.

Config Files

Client DDS_ROUTER_CONFIGURATION.yaml

##################################
# CONFIGURATION VERSION
version: v4.0                                                               # 0

##################################
# PARTICIPANTS
participants:

##################################
# SIMPLE PARTICIPANT DOMAIN 0
# This participant subscribes to allowlist topics in DDS Domain 0 and listen every message published in such DDS Domain

  - name: SimpleParticipant_domain0                                         # 3
    kind: local                                                             # 4
    domain: 0                                                               # 5

##################################
# SIMPLE PARTICIPANT DOMAIN 1
# This participant subscribes to allowlist topics in DDS Domain 1 and listen every message published in such DDS Domain

  - name: SimpleParticipant_domain1                                         # 6
    kind: local                                                             # 7
    domain: 1                                                               # 8

##################################
# ROS DISCOVERY SERVER
# This participant will subscribe to topics in allowlist using Discovery Server protocol as Server

  - name: ServerROS2                               # 5
    kind: local-discovery-server                   # 6
    discovery-server-guid:
      ros-discovery-server: true                   # 7
      id: 1                                        # 8
    listening-addresses:                           # 9
      - domain: localhost                          # 10
        port: 11888                                # 11


  - name: EchoParticipant                                             # 6
    kind: echo                                                        # 7
    discovery: true                                                   # 8
    data: true                                                        # 9
    verbose: true                                                     # 10


  - name: WANClient                                               # 6
    kind: wan                                                     # 7
    connection-addresses:                                         # 8
      - ip: 123.123.123.123                                       # 9
        port: 11666
        transport: tcp

Server DDS_ROUTER_CONFIGURATION.yaml

##################################
# CONFIGURATION VERSION
version: v4.0                                                          

##################################
# PARTICIPANTS
participants:

##################################
# SIMPLE PARTICIPANT DOMAIN 0
# This participant subscribes to allowlist topics in DDS Domain 0 and listen every message published in such DDS Domain

  - name: SimpleParticipant_domain0                                         # 3
    kind: local                                                             # 4
    domain: 0                                                               # 5

##################################
# SIMPLE PARTICIPANT DOMAIN 1
# This participant subscribes to allowlist topics in DDS Domain 1 and listen every message published in such DDS Domain

  - name: SimpleParticipant_domain1                                         # 6
    kind: local                                                             # 7
    domain: 1                                                               # 8

##################################
# ROS DISCOVERY SERVER
# This participant will subscribe to topics in allowlist using Discovery Server protocol as Server

  - name: ServerROS2                               # 5
    kind: local-discovery-server                   # 6
    discovery-server-guid:
      ros-discovery-server: true                   # 7
      id: 1                                        # 8
    listening-addresses:                           # 9
      - domain: localhost                          # 10
        port: 11888                                # 11


  - name: EchoParticipant                                             # 6
    kind: echo                                                        # 7
    discovery: true                                                   # 8
    data: true                                                        # 9
    verbose: true                                                     # 10

  - name: WANServer                                               # 6
    kind: wan                                                     # 7
    listening-addresses:                                          # 8
      - ip: 123.123.123.123                                       # 9
        port: 11666                                               # 10
        transport: tcp                                            # 11

DDS-Router and ROS2 nodes at the same device

How is it possible to start DDS-Router and ROS2 nodes at the same device ?
When trying to start DDS-Router and a node at the same device, I get some kind of shared memory access problem.
What is the preferred solution to avoid this issue ?

Scenario: ros2 robot in the remote lab and development/monitoring ros2 tools at homeoffice notebook

About 'wan communication over TCP' in readdocs

Readdoc guide instructs to use the code below to create docker conatiner
docker run -it -v <path/to/file>/ddsrouter_net_B.yaml:/ddsrouter_net_B.yaml ubuntu-fastdds-suite:<FastDDS-Version>
but to my knowledge, the --net=host option should be included to connect external device through WAN.
Thus I suggest that for those who have followed the guide and did not work try using this option/

DDS Router won't communicate between networks

I have a test setup of four containers; two are running the image router-base derived from the dockerfile

FROM ddsrouter
RUN apt update && apt install -y tcpdump

and the other two are derived from node-base,

FROM ros:rolling
RUN apt update && apt install -y tcpdump ros-rolling-demo-nodes-cpp

I then orchestrate them using the following Docker compose file:

version: "3.9"

networks:
  sideA:
    ipam:
      driver: default
      config:
        - subnet: "172.238.1.0/24"
  sideB:
    ipam:
      driver: default
      config:
        - subnet: "172.238.2.0/24"
services:
  node:
    image: node-base
    build:
      context: .
      dockerfile: node-base.dockerfile
    stdin_open: true
    tty: true
    profiles: ["run"]
  node-dev:
    extends: node
    volumes:
      # Mount the source code
      - ./dumps:/dumps
    command: 
            - /bin/bash
            - -c
            - |
              tcpdump -w /dumps/failure/client1.pcap &
              source /ros_entrypoint.sh && ros2 run demo_nodes_cpp listener
    environment:
      - ROS_DISCOVERY_SERVER=internal-router:11811
    profiles: ["good", "bad"]
    networks:
      sideA:
        ipv4_address: 172.238.1.3
  internal-router:
    image: ddsrouter-base
    build:
      context: .
      dockerfile: router-base.dockerfile
    command: 
            - /bin/bash
            - -c
            - |
              tcpdump -w /dumps/failure/router1.pcap &
              source ./install/setup.bash
              ddsrouter --config-path /config/config.yaml -d
    volumes:
      - ./router/:/config
      - ./dumps:/dumps
    ports:
      - 11188:11188/udp
    profiles: ["good", "bad"]
    networks:
      sideA:
        ipv4_address: 172.238.1.2
  node-dev2:
    extends: node
    volumes:
      - ./dumps:/dumps
    command: 
            - /bin/bash
            - -c
            - |
              tcpdump -w /dumps/failure/client2.pcap &
              sleep 5
              source /ros_entrypoint.sh && ros2 run demo_nodes_cpp talker
    environment:
      - ROS_DISCOVERY_SERVER=router2:11811
    profiles: ["good"]
    networks:
      sideA:
        ipv4_address: 172.238.1.13
  router2:
    image: ddsrouter-base
    command: 
            - /bin/bash
            - -c
            - |
              tcpdump -w /dumps/failure/router2.pcap &
              source ./install/setup.bash
              ddsrouter --config-path /config/config2.yaml -d
    volumes:
      - ./router/:/config
      - ./dumps:/dumps
    ports:
      - 30002:30002/tcp
      - 11166:11166/tcp
    profiles: ["good"]
    networks:
      sideA:
        ipv4_address: 172.238.1.12
  node-dev2-bad:
    extends: node
    volumes:
      - ./dumps:/dumps
    command: 
            - /bin/bash
            - -c
            - |
              tcpdump -w /dumps/failure/client2.pcap &
              sleep 5
              source /ros_entrypoint.sh && ros2 run demo_nodes_cpp talker
    environment:
      - ROS_DISCOVERY_SERVER=router2:11811
    profiles: ["bad"]
    networks:
      sideB:
        ipv4_address: 172.238.2.3
  router2-bad:
    image: ddsrouter-base
    command: 
            - /bin/bash
            - -c
            - |
              tcpdump -w /dumps/failure/router2.pcap &
              source ./install/setup.bash
              ddsrouter --config-path /config/config2.yaml -d
    volumes:
      - ./router/:/config
      - ./dumps:/dumps
    ports:
      - 30002:30002/tcp
      - 11166:11166/tcp
    profiles: ["bad"]
    networks:
      sideB:
        ipv4_address: 172.238.2.2
        aliases:
          - router2


using configs

config.yaml:

version: v4.0
specs:
  discovery-trigger: any
participants:
  - name: LocalDiscoveryServer
    kind: local-discovery-server
    discovery-server-guid:
      ros-discovery-server: true
      id: 0
    listening-addresses:
      - ip: 0.0.0.0
        port: 11811
        transport: udp
  - name: LocalWAN
    kind: wan
    connection-addresses:
      - domain: host.docker.internal        # Public IP of sever
        port: 11166                     # server port
        transport: tcp                  # Transport protocol - tcp so that we don't need a back IP addy
  - name: EchoParticipant                                             # 6
    kind: echo                                                        # 7
    discovery: true                                                   # 8
    data: true                                                        # 9
    verbose: true                                                     # 10

and config2.yaml

version: v4.0
specs:
  discovery-trigger: any
participants:
  - name: LocalDiscoveryServer2
    kind: local-discovery-server
    discovery-server-guid:
      ros-discovery-server: true
      id: 0
    listening-addresses:
      - ip: 0.0.0.0     
        port: 11811
        transport: udp
    
  - name: LocalWAN2
    kind: wan
    listening-addresses:
      - domain: 0.0.0.0        # Public IP of sever
        port: 11166                     # server port
        transport: tcp                  # Transport protocol - tcp so that we don't need a back IP addy

  - name: EchoParticipant                                             # 6
    kind: echo                                                        # 7
    discovery: true                                                   # 8
    data: true                                                        # 9
    verbose: true                                                     # 10

If I bring the ensemble up with docker compose --profile good up, everything works:

ros-flyer-node-dev2-1        | [INFO] [1710402041.253293400] [talker]: Publishing: 'Hello World: 6'
ros-flyer-router2-1          | In Endpoint: 01.0f.e0.c2.39.00.f3.57.00.00.00.00|0.0.3.3 from Participant: LocalDiscoveryServer2 in topic: rt/rosout payload received: Payload{00 01 00 00 f9 a9 f2 65 58 f3 18 0f 14 00 00 00 07 00 00 00 74 61 6c 6b 65 72 00 00 1d 00 00 00 50 75 62 6c 69 73 68 69 6e 67 3a 20 27 48 65 6c 6c 6f 20 57 6f 72 6c 64 3a 20 36 27 00 00 00 00 18 00 00 00 2e 2f 73 72 63 2f 74 6f 70 69 63 73 2f 74 61 6c 6b 65 72 2e 63 70 70 00 0b 00 00 00 6f 70 65 72 61 74 6f 72 28 29 00 00 2f 00 00 00} with specific qos: SpecificEndpointQoS{Partitions{};OwnershipStrength{0}}.
ros-flyer-router2-1          | In Endpoint: 01.0f.e0.c2.39.00.f3.57.00.00.00.00|0.0.14.3 from Participant: LocalDiscoveryServer2 in topic: rt/chatter payload received: Payload{00 
01 00 00 0f 00 00 00 48 65 6c 6c 6f 20 57 6f 72 6c 64 3a 20 36 00 00} with specific qos: SpecificEndpointQoS{Partitions{};OwnershipStrength{0}}.
ros-flyer-internal-router-1  | In Endpoint: 01.0f.45.64.01.00.9f.e7.00.00.00.00|0.0.23.3 from Participant: LocalWAN in topic: rt/chatter payload received: Payload{00 01 00 00 0f 00 00 00 48 65 6c 6c 6f 20 57 6f 72 6c 64 3a 20 36 00 00} with specific qos: SpecificEndpointQoS{Partitions{};OwnershipStrength{0}}.
ros-flyer-node-dev-1         | [INFO] [1710402041.255290700] [listener]: I heard: [Hello World: 6]

but if I bring it up with the other router and client on a different virtual network netB using docker compose --profile bad up, then it doesn't work:

ros-flyer-node-dev2-bad-1    | [INFO] [1710402141.088181800] [talker]: Publishing: 'Hello World: 2'
ros-flyer-router2-bad-1      | In Endpoint: In Endpoint: 01.0f.35.db.39.00.9f.a6.00.00.00.00|01.0f.35.db.39.00.9f.a6.00.00.00.00|0.0.3.3 from Participant: LocalDiscoveryServer2 in topic: rt/rosout0.0.14.3 payload received: Payload{00 01 from Participant:  00 00 5d LocalDiscoveryServer2aa f2 65 28  in topic: rt/chatter payload received: 8cPayload{ 41 05 1400 01 00  00 0f 00 0000  0000  4800 07 00 00  6500  6c74  6c 6f 20 57 6f61  6c 6b72 65 72 00 00 1d 00 000 6c 64 3a 20  0032  5000  75 62 6c 69 73000 }68 69 6e 67 with specific qos:  SpecificEndpointQoS{Partitions{}3a ;20 27 48 65 6c 6cOwnershipStrength{ 6f 20 57 6f0 }}.
ros-flyer-router2-bad-1      | 72 6c 64 3a 20 32 27 00 00 00 00 18 00 00 00 2e 2f 73 72 63 2f 74 6f 70 69 63 73 2f 74 61 6c 6b 65 72 2e 63 70 70 00 0b 00 00 00 6f 70 65 72 61 74 6f 72 28 29 00 00 2f 00 00 00} with specific qos: SpecificEndpointQoS{Partitions{};OwnershipStrength{0}}.

The tcpdump data that's generated shows that in both cases the routers are regularly communicating via TCP in patterns that are very similar. However, they don't appear to be cross-publishing the talker messages and thus when on different networks the clients aren't able to communicate.

DDS-Router issue

Hi there,
I managed to build DDS-Router and is up and running using DDS_ROUTER_CONFIGURATION.yaml for Server
and DDS_ROUTER_CONFIGURATION.yaml for Client as in attached Pngs file the files take take from ../../example
wan_server.yaml and wan_client.yaml
I try to send across the ; it seem to be NOT working
can you please advise accordingly. to get working?

Server_Version
Client_Version

docs: `addresses` key doesn't seem valid in `connection-addresses`

I am running ddsrouter on the main trunk. I based my configuration off the latest docs:

https://github.com/eProsima/DDS-Router/blame/main/docs/rst/user_manual/wan_configuration.rst#L161

Running the config I get:

 Error loading DDS Router configuration from yaml:
 Error reading yaml list under tag <connection-addresses> :
 Error reading yaml sequence of type <N8eprosima9ddsrouter4core5types7AddressE> :
 Address requires to specify <ip> or <domain>. -> Function main

Only after I removed the addresses key and restructured it like so:

      connection-addresses:
       # - discovery-server-guid:
       #     id: 2                         # Id of the Discovery Server of A
          - ip: 1.1.1.1                 # Public IP of Ha
            port: 11666                 # Port forwarded in Ra

Was I able to get it to work.

Messages not routing with Foxy

I've spent about a week debugging this and have come to the conclusion that messages sent from Foxy aren't getting routed, I'm not sure if that's in general or just over TCP.

I've setup the repeater scenario from the documentation with two router instances on separate internet connections and a cloud router out in a GCP VM. I'm sending a simple twist message from one side.

ros2 topic pub /cmd_vel geometry_msgs/msg/Twist '{linear: {x: -0.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1}}'

If the Twist is sent from a laptop or VM running Foxy it's not forwarded through the local DDS Router to the cloud instance. If it's sent via a Humble instance the message forwards. I've set all instances up with a local echo participant and can see the writers across the three instances for Humble, but only the local one when sending from Foxy. I've also used RTI's Admin Console and I can see in the local instance that with both Foxy and Humble the DDS Router subscribes to the topic, it just doesn't forward messages.

I suspect it's a QoS issue, however I can see from the echo participant that both Foxy and Humble are sending with Transient Local and Reliable. I'm somewhat new to ROS and DDS, but I've seen other hints in forums there was some kind of change in DDS and the default QoS between Foxy and Galactic. I'm hoping this is a known issue with an easy fix but I'm creating the issue in case I'm wrong and it's a bug in DDS Router. Thanks.

About WAN configuration and example

hello guy, you did a good job on DDS router. I want to test the use of dds router over 2 computer. I saw that the case in the tutorial needs to set my public ip and private ip, and I am confused about it. I checked my network settings, the private ip is fine, but the public ip is a "private IP" provided by my ISP (Internet Service Provider), the real public ip resources are very limited, and I can't get it. This is very common in my area, almost all network devices go online this way. How should I set my ip to run the demo of wan communication in the tutorial?

colcon build failed

during installation at a fresh environment, I've noticed, that 'colcon build' failed with some errors...
assert verb_extensions, 'No verb extensions'

after some search I found this solution:

pip3 install pytest-rerunfailures

cd ~/DDS-Router
rm -rf src

mkdir src
vcs import src < ddsrouter.repos
colcon build

Bug or feature ? ;-)

Reporting a vulnerability

Hello!

I hope you are doing well!

We are a security research team. Our tool automatically detected a vulnerability in this repository. We want to disclose it responsibly. GitHub has a feature called Private vulnerability reporting, which enables security research to privately disclose a vulnerability. Unfortunately, it is not enabled for this repository.

Can you enable it, so that we can report it?

Thanks in advance!

PS: you can read about how to enable private vulnerability reporting here: https://docs.github.com/en/code-security/security-advisories/repository-security-advisories/configuring-private-vulnerability-reporting-for-a-repository

Repeater using TCP with same domain ids

Hello, first of all thank you for the detailed examples.
I am trying to create a router network that will connect ros2 nodes that are working in different networks. The basic structure is like here, however I need to be able to set the same domain ids for the sub and pub edges in different networks. I am aware that we can do this with the repeater using udp, however I need to use tcp. I also know that a local discovery server can help, however I could not integrate a local discovery server to the repeater example. I tried starting the discovery server in router edges, but I could not listen the talker from the other network.
To sum up, I want to create this example but with using the same domain ids for the pub_edge_1 and sub_edge_2, using tcp. I would be grateful if you can provide an example or direct me to a possible solution. Thanks!

TLS config for both server and client does not work

Issue when using a WAN Participant with tls config, when the ca tag is provided (tls initialization fails). The reason for this is that in yaml reader, when constructing the TlcConfigBoth object, the parameters are supplied in the wrong order (password instead of ca as first parameter), then openssl obviously cannot open the file.

Conversely, this issue also makes the router crash when no password is provided, even though private key password should be optional.

Adding ROS 2 introspection as SUPER_CLIENT

Hi,

I have managed to connect two robots running a discovery server each by running a DDS router from a 3rd PC. Here is the config YAML:

version: v3.0

participants:

  - name: ROS_2_Domain_0
    kind: simple
    domain: 0

  - name: ROS_2_DS_Client_1
    kind: discovery-server

    discovery-server-guid:
      ros-discovery-server: true
      id: 1

    connection-addresses:
      - discovery-server-guid:
          ros-discovery-server: true
          id: 0
        addresses:
          - domain: 192.168.1.72
            port: 11811

  - name: ROS_2_DS_Client_2
    kind: discovery-server

    discovery-server-guid:
      ros-discovery-server: true
      id: 2

    connection-addresses:
      - discovery-server-guid:
          ros-discovery-server: true
          id: 0
        addresses:
          - domain: 192.168.1.190
            port: 11811

However, I also want to be able to see all of the topics offered by both robots from the 3rd PC, so is there like a super client configuration I can add to it so it can discover all of them? I tried with the default super client XML, but I realize there is no discovery server (DDS router instead) running in this 3rd PC so it makes sense that it doesn't work:

<?xml version="1.0" encoding="UTF-8" ?>
<dds>
    <profiles xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
        <participant profile_name="super_client_profile" is_default_profile="true">
            <rtps>
                <builtin>
                    <discovery_config>
                        <discoveryProtocol>SUPER_CLIENT</discoveryProtocol>
                        <discoveryServersList>
                            <RemoteServer prefix="44.53.00.5f.45.50.52.4f.53.49.4d.41">
                                <metatrafficUnicastLocatorList>
                                    <locator>
                                        <udpv4>
                                            <address>127.0.0.1</address>
                                            <port>11811</port>
                                        </udpv4>
                                    </locator>
                                </metatrafficUnicastLocatorList>
                            </RemoteServer>
                        </discoveryServersList>
                    </discovery_config>
                </builtin>
            </rtps>
        </participant>
    </profiles>
</dds>

I noticed that if I echo a topic in either of the robots, it automatically appears on the 3rd PC. Which is great, but I'd like to see them all from the first time I list the topics.

Here's a diagram to illustrate:

Screenshot from 2023-06-06 09-42-05

Procedure replication for global installation of DDS-Router

Hi
I am trying to replicate the procedure guided by following link:
https://eprosima-dds-router.readthedocs.io/en/latest/rst/developer_manual/installation/sources/linux.html#developer-manual-installation-sources-linux

But when I execute the following section:

3. Once all dependencies are installed, install DDS Router:
cd /DDS-Router
git clone https://github.com/eProsima/DDS-Router.git
mkdir DDS-Router/build
cd DDS-Router/build
cmake .. -DCMAKE_INSTALL_PREFIX=
/DDS-Router/install -DCMAKE_PREFIX_PATH=~/DDS-Router/install
cmake --build . --target install

The resulted in following error:

$ cmake .. -DCMAKE_INSTALL_PREFIX=/DDS-Router/install -DCMAKE_PREFIX_PATH=/DDS-Router/install
CMake Error: The source directory "/home/imrank/DDS-Router/DDS-Router" does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.

Can you please resolve the issue although cloned from provided link but CMaketext.txt file is missing.
Please treat as an urgent.
Thank you

DDS Router ignoring connections

I'm running a DDS Router instance in a Kubernetes cluster. The router configuration is:

version: v4.0
specs:
  discovery-trigger: any
participants:
  - name: LocalDiscoveryServer
    kind: local-discovery-server
    discovery-server-guid:
      ros-discovery-server: true
      id: 0
    listening-addresses:
      - ip: 0.0.0.0
        port: 11811
        transport: udp
  - name: echo_participant
    kind: echo
    data: true
    verbose: true
    discovery: true

with accompanying deployment configuration

kind: Service
apiVersion: v1
metadata:
  name: local-ddsrouter
  namespace: ros
spec:
  ports:
    - name: udp3k1
      protocol: UDP
      port: 11811
      targetPort: 11811
  selector:
    app: ddsrouter
  clusterIP: 10.43.2.1
  type: ClusterIP
---
kind: Deployment
apiVersion: apps/v1
metadata:
  namespace: ros
  name: ddsrouter
  labels:
    app: ddsrouter
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ddsrouter
  template:
    metadata:
      labels:
        app: ddsrouter
    spec:
      volumes:
        - name: config
          configMap:
            name: ddsrouter-config
            items:
              - key: ddsrouter.config.file
                path: DDSROUTER_CONFIGURATION.yaml
      containers:
        - name: ddsrouter
          image: ddsrouter
          ports:
            - containerPort: 11811
              protocol: UDP
            - containerPort: 30002
              protocol: UDP
          volumeMounts:
            - name: config
              mountPath: /ddsrouter/resources
          command: 
            - /bin/bash
            - -c
            - |
              source ./install/setup.bash
              ddsrouter --config-path /ddsrouter/resources/DDSROUTER_CONFIGURATION.yaml -d
      restartPolicy: Always

I have a couple of ROS2 clients (Humble) running listener/talker, with no associated output from the DDS Router logs. All I get is

2024-03-13 09:05:12.190 [DDSROUTER Info] DEBUG: Creating DDS Router. -> Function DdsRouter
2024-03-13 09:05:12.191 [DDSROUTER Info] Participant created with id: LocalDiscoveryServer and kind discovery_server. -> Function init_participants_
2024-03-13 09:05:12.191 [DDSROUTER Info] Participant created with id: echo_participant and kind echo. -> Function init_participants_
2024-03-13 09:05:12.191 [DDSROUTER Info] DDS Router configured with allowed topics: AllowedTopicList{allowed{}blocked{}} -> Function init_allowed_topics_
2024-03-13 09:05:12.192 [DDSROUTER Info] DEBUG: DDS Router created. -> Function DdsRouter
DDS Router running.
2024-03-13 09:05:12.192 [DDSROUTER Info] Starting DDS Router. -> Function start

Which seems perfectly valid, if vacuous.

I don't think it's the kubernetes configuration. When I run tcpdump -i eth0 udp I get

09:06:00.643176 IP 10.42.1.69.38984 > ddsrouter-58574ccdf9-hrnvf.11811: UDP, length 68
09:06:00.712290 IP 10.42.0.219.53813 > ddsrouter-58574ccdf9-hrnvf.11811: UDP, length 68
09:06:00.747994 IP 10.42.0.219.53813 > ddsrouter-58574ccdf9-hrnvf.11811: UDP, length 336
09:06:00.861690 IP 10.42.1.69.38984 > ddsrouter-58574ccdf9-hrnvf.11811: UDP, length 336
09:06:00.991129 IP 10.42.1.69.38984 > ddsrouter-58574ccdf9-hrnvf.11811: UDP, length 68
09:06:01.062339 IP 10.42.0.219.53813 > ddsrouter-58574ccdf9-hrnvf.11811: UDP, length 68
09:06:01.198102 IP 10.42.0.219.53813 > ddsrouter-58574ccdf9-hrnvf.11811: UDP, length 336
09:06:01.311779 IP 10.42.1.69.38984 > ddsrouter-58574ccdf9-hrnvf.11811: UDP, length 336
09:06:01.341511 IP 10.42.1.69.38984 > ddsrouter-58574ccdf9-hrnvf.11811: UDP, length 68
09:06:01.412413 IP 10.42.0.219.53813 > ddsrouter-58574ccdf9-hrnvf.11811: UDP, length 68
09:06:01.648172 IP 10.42.0.219.53813 > ddsrouter-58574ccdf9-hrnvf.11811: UDP, length 336
09:06:01.691333 IP 10.42.1.69.38984 > ddsrouter-58574ccdf9-hrnvf.11811: UDP, length 68
09:06:01.761887 IP 10.42.1.69.38984 > ddsrouter-58574ccdf9-hrnvf.11811: UDP, length 336
09:06:01.762497 IP 10.42.0.219.53813 > ddsrouter-58574ccdf9-hrnvf.11811: UDP, length 68

and so on. These IP addresses (10.42.0.219 and 10.42.1.69) correspond to the talker and listener pods. This suggests that I'm getting RTPS ack traffic in but that the local discovery server isn't responding or acknowledging it.

The endpoint nodes are running stock ros:latest though I've tried them with ros:humble and ros:iron to the same effect. Interestingly, fastdds discovery -i 0 -p 11811 -b running on the server also doesn't work (and nothing shows up in the backup JSON). fastdds discovery -i 0 running on (ROS2 humble/latest) localhost with ROS_DISCOVERY_SERVER=localhost:11811 works.

What could be doing this? The best reason I can figure out so far is that there's a version mismatch between ROS2 Humble and the built-from-source DDS Router, but there's absolutely no indication that this is happening and there doesn't seem to be an introspection mechanism for me to be able to tell. The packets just seem to be ignored for no apparent reason.

Not configuration file given, using default file DDS_ROUTER_CONFIGURATION.yaml

Hi,
I downloaded the docker image of DDS-Router, but I get this messages:

kornel@kornel-LG:~/Programs/dds_router_ws$ docker run -it --net=host -v /home/kornel/Programs/dds_router_ws/DDS_ROUTER_CONFIGURATION.yaml:/root/DDS_ROUTER_CONFIGURATION.yaml ubuntu-ddsrouter:v2.0.0
Not configuration file given, using default file DDS_ROUTER_CONFIGURATION.yaml.
Starting DDS Router Tool execution.
DDS Router running.

I am specifically worried about 'Not configuration file given, using default file DDS_ROUTER_CONFIGURATION.yaml.' that I get despite the fact of creating a mounted drive with it present.

Source of my yaml file I copied from here:
https://eprosima-dds-router.readthedocs.io/en/latest/rst/examples/echo_example.html#examples-echo-example

Which is:

################
# ECHO EXAMPLE #
################

##################################
# CONFIGURATION VERSION
version: v3.0                                                         # 0

##################################
# ALLOWED TOPICS
# Allowing FastDDS and ROS2 HelloWorld demo examples topics

allowlist:
  - name: HelloWorldTopic                                             # 1
    type: HelloWorld                                                  # 1
  - name: rt/chatter                                                  # 2
    type: std_msgs::msg::dds_::String_

##################################
# PARTICIPANTS
participants:

##################################
# SIMPLE PARTICIPANT
# This participant will subscribe to topics in allowlist in specific domain and listen every message published there

  - name: SimpleParticipant                                           # 3
    kind: local                                                       # 4
    domain: 0                                                         # 5

##################################
# ECHO PARTICIPANT
# This Participant will print in stdout every message received by the other Participants, as well as discovery information

  - name: EchoParticipant                                             # 6
    kind: echo                                                        # 7
    discovery: true                                                   # 8
    data: true                                                        # 9
    verbose: true                                                     # 10


##################################
# CONFIGURATION DESCRIPTION

# This configuration example configures a DDS Router to listen to every message published in domain 0 in topics
# HelloWorldTopic (from Fast DDS HelloWorld) and rt/chatter from ROS2 demo_nodes, and to print the received
# messages in stdout. Information regarding discovery events is also printed to stdout.

# 0: Use YAML configuration version v3.0

# 1: Allow DDS Topic Name <HelloWorldTopic> with type <HelloWorld>.

# 2: Insert new topics in order to route them.

# 3: New Participant with name <SimpleParticipant>.

# 4: Kind of SimpleParticipant: <local>.
# LAN UDP communication with default simple multicast discovery.

# 5: SimpleParticipant will use DDS Domain ID <0>.

# 6: New Participant with name <EchoParticipant>.

# 7: Kind of EchoParticipant: <echo>.

# 8: Print a trace to stdout every time an Endpoint is discovered.

# 9: Print a trace to stdout every time a new data message arrives to the router.

# 10: Display verbose information regarding received messages (receiver endpoint_guid and data payload).

Then when I run ros2 example nodes:
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
ros2 run demo_nodes_cpp listener / talker

I don't get any logs regarding communication between them.

WAN client tcp configuration without listening address

Hi,

thanks for providing a DDS Router for DDS communication over WAN.
Unfortunately the provided client configuration of the WAN configuration documentation does not work. https://eprosima-dds-router.readthedocs.io/en/latest/rst/user_manual/wan_configuration.html
According to the docs and this example a listening address for the client is only required if the server uses udp only. I configured my server and client to use tcp. However when starting the Client DDS router without a listening address the following error will occur:
[RTPS_PARTICIPANT Error] Participant RTPSParticipant with GUID 01.0f.02.00.00.00.00.00.00.00.ca.fe|0.0.1.c1 tries to use discovery server over TCP without providing a proper listening port -> Function RTPSParticipantImpl

Providing a listening address lets the client DDS router start fine. However the communication does not work as I have not forwarded any ports to the client and also don't intend to do that.

I've installed ddsrouter, fastrtps, fastcdr and foonathan_memory_vendor from source as described in the docs, therefore I'm currently using the master version of ddsrouter.

My configuration:
Client:

allowlist:
  - name: HelloWorldTopic
    type: HelloWorld
  - name: rt/chatter
    type: "std_msgs::msg::dds_::String_"

WANClientParticipant:
  type: wan
  id: 2
  connection-addresses:
    - id: 1
      addresses:
        - ip: "<public_ip_of_server>"
          port: 11666
          transport: tcp

SimpleParticipant:
  type: local
  domain: 0

Server:

allowlist:
  - name: "HelloWorldTopic"
    type: "HelloWorld"
  - name: "rt/chatter"
    type: "std_msgs::msg::dds_::String_"

WANServerParticipant:
  type: "wan"
  id: 1# Id to generate the GuidPrefix of the Discovery Server of A
  listening-addresses:
    - ip: "<public_ip_of_server>"# Public IP of host Ha
      port: 11666# Port forwarded router Ra
      transport: "tcp"# Transport protocol


SimpleParticipant:
  type: local
  domain: 0

router stops after some time

hi, while I was using DDS-router some time about 10 minutes, the dds-router is not able to gracefully end its process and just stopped. both azure and pc's dds-router application is stuck and ^c is not working properly.

my test environment is azure ubuntu 20.04 that has public ip and ubuntu pc, tcp connected. I'm sending some ros2 topics, and am not sending anything that is heavy such as videos.

Can anybody guess why it suddenly stops?

DDS Router invalid when the network is bad(or disconnected)

Hello, I am using DDSRouter recently, but I encountered a problem. I configured dds router on both my server and client, but when the network condition is very bad(or disconnected), sometimes ddsrouter will stop routing valid data. At this time, restart dds router on the client side, and the data can be transmitted again. I would like to ask what is the reason for this problem?

Latest Documentation

Hi there,
Assuming the latest and most up-to-date Documentation for the Fast-DDS and DDS-Router can be found in?
1/ After the download of the BINARY installable version of the file .tgz file:
2/ where user untars/zipped file .tgz file.
3/ ../doc/
4/ ../doc/manual
5/ ../doc/api_reference
above two stateed directory can be found? OR github.com/eProsima/Fast-DDS web Page?

Can you please clarify?
thank you,
Imran K

run example error

topic can't listening by ros2 run demo_nodes_cpp listener

parallels@ubuntu-linux-20-04-desktop:~/DDS-Router/install/ddsrouter_tool/share/resources/configurations/examples$ ddsrouter -c change_domain_allowlist.yaml 
Starting DDS Router Tool execution.
DDS Router running.

parallels@ubuntu-linux-20-04-desktop:~/FastDDSGenHelloWorld/build$ ROS_DOMAIN_ID=0 ros2 run demo_nodes_cpp talker
[INFO] [1675612035.867491964] [talker]: Publishing: 'Hello World: 1'
[INFO] [1675612036.867868934] [talker]: Publishing: 'Hello World: 2'
[INFO] [1675612037.870178882] [talker]: Publishing: 'Hello World: 3'
[INFO] [1675612038.870980998] [talker]: Publishing: 'Hello World: 4'
[INFO] [1675612039.869903435] [talker]: Publishing: 'Hello World: 5'
[INFO] [1675612040.870213935] [talker]: Publishing: 'Hello World: 6'
[INFO] [1675612041.874682112] [talker]: Publishing: 'Hello World: 7'
[INFO] [1675612042.875003580] [talker]: Publishing: 'Hello World: 8'
[INFO] [1675612043.875383813] [talker]: Publishing: 'Hello World: 9'
parallels@ubuntu-linux-20-04-desktop:~/FastDDSGenHelloWorld/build$ ROS_DOMAIN_ID=1 ros2 run demo_nodes_cpp listener
2023-02-05 23:47:18.643 [RTPS_TRANSPORT_SHM Error] Failed init_port fastrtps_port7662: open_and_lock_file failed -> Function open_port_internal
2023-02-05 23:47:18.643 [RTPS_TRANSPORT_SHM Error] Failed init_port fastrtps_port7663: open_and_lock_file failed -> Function open_port_internal

DDS-Router for Windows 10 build failed

Hi there,
I am encountering a single issue within DDS-Router build for WINDOW-10 OS version.
The compiling process succeed but one module failed to get build within multiple
modules, that "ddsrouter-yaml-validator" sems to failed as following log depict:

Can anyone give a clue what is missing from the build?

Your reply is greatly appreciated.
Thank you,
IK
==============Error log=================
C:\Users\imrank\DDS-Router>colcon build
Starting >>> ddsrouter_cmake
Starting >>> YAML_CPP
Starting >>> ddsrouter_yaml_validator
--- stderr: ddsrouter_yaml_validator
c:\users\imrank\appdata\local\programs\python\python36-32\lib\site-packages\setuptools\command\install.py:37: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
setuptools.SetuptoolsDeprecationWarning,

Finished <<< ddsrouter_yaml_validator [8.03s]
Finished <<< ddsrouter_cmake [10.0s]
Starting >>> ddsrouter_utils
Starting >>> ddsrouter_docs
Finished <<< ddsrouter_utils [8.48s]
Starting >>> ddsrouter_event
--- stderr: YAML_CPP
CMake Deprecation Warning at test/gtest-1.10.0/CMakeLists.txt:4 (cmake_minimum_required):
Compatibility with CMake < 2.8.12 will be removed from a future version of
CMake.
Update the VERSION argument value or use a ... suffix to tell
CMake that the project does not need compatibility with older versions.
CMake Deprecation Warning at test/gtest-1.10.0/googlemock/CMakeLists.txt:45 (cmake_minimum_required):
Compatibility with CMake < 2.8.12 will be removed from a future version of
CMake.
Update the VERSION argument value or use a ... suffix to tell
CMake that the project does not need compatibility with older versions.
CMake Deprecation Warning at test/gtest-1.10.0/googletest/CMakeLists.txt:56 (cmake_minimum_required):
Compatibility with CMake < 2.8.12 will be removed from a future version of
CMake.
Update the VERSION argument value or use a ... suffix to tell
CMake that the project does not need compatibility with older versions.

Finished <<< YAML_CPP [29.3s]
Finished <<< ddsrouter_event [12.0s]
Starting >>> ddsrouter_core
Finished <<< ddsrouter_core [4.38s]
Starting >>> ddsrouter_yaml
--- stderr: ddsrouter_yaml
CMake Error at C:/Users/imrank/DDS-Router/install/ddsrouter_cmake/share/ddsrouter_cmake/cmake/cpp_common/find_external.cmake:26 (find_package):
By not providing "Findyaml-cpp.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "yaml-cpp",
but CMake did not find one.
Could not find a package configuration file provided by "yaml-cpp" with any
of the following names:

yaml-cppConfig.cmake
yaml-cpp-config.cmake

Add the installation prefix of "yaml-cpp" to CMAKE_PREFIX_PATH or set
"yaml-cpp_DIR" to a directory containing one of the above files. If
"yaml-cpp" provides a separate development package or SDK, be sure it has
been installed.
Call Stack (most recent call first):
C:/Users/imrank/DDS-Router/install/ddsrouter_cmake/share/ddsrouter_cmake/cmake/cpp_common/configure_project_cpp.cmake:51 (find_external_projects)
CMakeLists.txt:56 (configure_project_cpp)

Failed <<< ddsrouter_yaml [1.03s, exited with code 1]
Aborted <<< ddsrouter_docs [26.5s]

Summary: 6 packages finished [39.7s]
1 package failed: ddsrouter_yaml
1 package aborted: ddsrouter_docs
3 packages had stderr output: YAML_CPP ddsrouter_yaml ddsrouter_yaml_validator
1 package not processed

Question: Does DDS-Router support data deduplication

Lets assume I have on one machine one publisher and on the other machine 10 subscribers. Those two machines are connected over ethernet. Is the data sent over ethernet once or 10 times?

And if deduplication is not supported yet, is it on the roadmap?

Configuration example: WAN with dynamic ipaddresses and dyndns (optional SSL/TLS)

Hi,
is there a real world internet wan configuration for home labs available ?

  1. both local networks (192.168.1.0/24 and 192.168.2.0/24) are connected to the internet via provider router, using NAT and dynamic router ip addresses
  2. both endpoint are reachable by using dyndns FQDN (dds1.dyndns.org and dds2.dyndns.org)

rviz2-manager<--->dds-gw1--->router1(dds1.dyndns.org)<---internet--->router2(dds2.dyndns.org)<---dds-gw2<--->rover

How is this possible ?
What are the keywords for using this scenario ?
Is SSL/TLS secure communication between both dds-routers available (self signed certificates) ?

I guess, such wan-home-example.yaml is very useful for all homeworkers and students.

ddsrouter-config.yaml

The file " ddsrouter-config.yaml" cannot be located!!
Can some provide me this file , please.
thank you,

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.