I just re-ran all my tests (all possible pairs from [foxy, galactic, humble, rolling]
with demo_nodes_cpp[listener, talker]
, demo_nodes_cpp[add_two_ints_{client, server}]
and action_tutorials_cpp[fibonacci_action_{client, server}]
across all pairs) and everything still works for me.
yes, all tests were container<->container.
Iāve only tested Fast-RTPS / Fast-DDS.
That needs some care: if using --net=host
, it will assume the SHM transport can be used. Adding --ipc=host
can work, but sometimes errors. It will then fallback to non-SHM I believe (and will actually still work). I disable SHM for testing purposes (I was more interested in binary message compatibility than performance) using something like this and then things work with or without --net=host
.
Iāll see if I can make the test scripts available (itās just a set of Bash scripts using the standard ros
Docker images).
In most cases this is true. Between Foxy and Galactic however, at least control_msgs
changed and thatās definitely incompatible and will lead to problems (as in: inability to communicate, no exploding robots or anything like that).
I believe this is or will be a very common use-case rather sooner than later, as Iāve already come across packages / nodes which donāt work with one RMW, but do with another (well, behaviour is better). If a vendor for instance only supports using Cyclone (because thatās what theyāve developed against and thatās what theyāve tested), using Fast-DDS is not an option.
Another example (which is one of the contexts in which I ran into ros2/rmw_cyclonedds#184) would be micro-ROS: itās essentially only compatible with Fast-DDS, which, if weāre not supposed to mix-and-match RMWs within a single ROS 2 application / node graph, would require the entire application to be run with Fast-DDS.
In principle I would agree, but itās naive.
In real-world scenarios itās really difficult to completely control every package and every node (or at least incurs significant development/maintenance overhead). For organisations with legacy for example (and Iāve encountered companies still on Dashing fi), you canāt just say: āwell ā¦ akshually, youāre not supposed to do that, so tough luck for you and your anti-patternā.
And as I wrote above, there are situations where external factors prevent you from controlling which RMW gets used by a certain node or set of nodes.
The same goes for which ROS 2 version is supported by certain packages. Especially if that package is not available OSS.
thatās a bit dramatic I feel. I would not be comfortable doing it in general, but for certain use-cases and with (extensive) testing, it should be OK. Same as in ROS 1.