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?
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).