ROS2 Inter-distro Communication Issue: Eloquent to Humble with Fast DDS

Hello ROS community, :wave: :wave: :wave:

I am currently facing an inter-distro communication issue between ROS2 installations. Here’s a brief summary of my setup: :man_technologist:

  • PC Setup: Ubuntu with ROS2 Humble.
  • Robot Setup: ROS2 Eloquent.

Both setups use eProsima Fast DDS and are on the same domain.

Problem: When the robot publishes a topic, my PC doesn’t seem to receive it. I suspect the issue lies within ROS2 discovery.

What I’ve Tried:

  1. Modified the XML config files for Fast DDS. No changes seemed to rectify the problem.
  2. Thought about setting up unicast publishing directly to my PC, but I’m unsure about this approach and would love some guidance.
  3. Successfully saw the topics on my PC when launching the discovery server but was unable to echo them.


  1. Has anyone faced similar issues with inter-distro communication and discovery?
  2. Could the communication challenge be due to the difference in ROS2 distributions?
  3. Does anyone have insights or solutions regarding modifying the XML config files for Fast DDS to potentially resolve this?
  4. Any suggestions on setting up unicast publishing or other potential fixes?

I would appreciate any feedback or solutions that the community might have on this issue. Thanks in advance! :pray:

I ran into this issue years ago and was told that inter-distro communication is an anti-pattern in ROS 2 and you just should not do it.

I personally feel that incompatibility between ROS 2 distributions is a huge problem that is only going to get worse as the number of ROS 2 distributions and the size of distributed systems increases. Forcing all nodes on large distributed systems to run the exact same ROS 2 distribution is going to become a crippling liability at some point. Nodes that are hard to upgrade will hold entire systems back to obsolete distributions.

This incompatibility prevents truly distributed design as some central agent will always be needed to manage upgrades of every node in the system. This may not be much of a problem on smaller systems or systems controlled by a single organization. I know companies have solved this with cloud-based management systems for their fleets of robots.

This incompatibility may be an almost impossible problem, though, for systems with lots of nodes on lots of physical devices from various vendors in multiple locations over long periods of time. For example, proprietary software on any critical devices within such a system may hold the entire system back until the developers of the software release a new version, if ever.

Then even when new versions of software are available for every single node in the system, upgrading such a system to a new distribution will be a daunting task as every single node on every single device needs to be modified at once.

Bridges to communicate between distributions will become necessary in such large systems, but they will come with their own sets of problems and incompatibility issues.

I keep hoping that at some point ROS 2 distributions will converge to at least some level of compatibility, but officially accepting it as an anti-pattern makes me think it may never happen unfortunately.

This is a very complicated problem with no easy solution and I do not intend to be negative or disparaging. The freedom to break compatibility between distributions has been key to refine and improve designs over time.

I wish that compatibility between distributions, and at the very least guaranteed compatibility between middleware options within a distribution, was a future design goal, but maybe it is just too difficult to ever happen.

1 Like

Actually, both of those are future design goals, we just aren’t there yet.

Compatibility between middleware options within a distribution mostly works, with the exception of services. That is a long-standing issue that needs to be solved at the RMW/DDS layer, and needs someone to champion it.

Compatibility between distributions, while retaining the ability to make changes, is also a future goal. The idea would be that you would have “translators” that can be run when necessary to translate between older messages and newer ones. Some of the infrastructure to do this was actually merged into ROS 2 Iron in Type Description Distribution (REP-2011 subset / REP-2016) - formerly "message definitions on-the-wire" · Issue #1159 · ros2/ros2 · GitHub and Dynamic Subscription (REP-2011 subset) · Issue #1374 · ros2/ros2 · GitHub , but we are still a long way from the actual feature working.

Just to keep things linked:

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.