DDS vendor interop -- anybody tried it lately?

I recently attempted to make ROS2 on CoreDX talk to ROS2 on FastRTPS. I also attempted to use ROS2 on OpenSplice to talk to ROS2 on FastRTPS. I couldn’t get anybody to talk to each other. I followed various guides I found on the internet to achieve supposed compatibility. I even captured some data on the wire, where I discovered that they all use different ports these days. Do we have some rule for utilizing the ROD_DOMAIN_ID and which port that puts you on?

1 Like

The last release (beta 3) was tested with FastRTPS, Connext, and OpenSplice and our test suite already performs cross vendor testing between all available rmw implementation. So in general: yes it works.

Recent changes on the master branches broke OpenSplice support (see rmw_opensplice#217) but that is something we will hopefully be able to resolve soon.

I can’t speak for CoreDX since we don’t test with it on our CI system.

In general you must use the same ROD_DOMAIN_ID / DDS domain id in order for participants to talk to each other. The rmw implementations already take care about other configuration settings (e.g. enable loopback and not only used vendor-specific shared memory).

Last time I checked, rmw_coredx was not implementing the ROS namespaces in DDS partitions so couldnt match with ROS topics created with other vendors (as even empty ROS namespaces result in a specific partition on the wire, see http://design.ros2.org/articles/topic_and_service_names.html section “ROS Specific Namespace Prefix” for more details).
Every other vendor we provide are performing cross-vendor communication in our test suite so I’d say it should work (for pub/sub, not for services at the moment).