Does micro-ROS support multiple DDS implementations, in particular CycloneDDS? I have been testing various confiugrations and don’t seem to get messages from the agent when running CycloneDDS.
You’ll probably get responses asking you to (re)post this on ROS Answers, but to point you to it already: ros2/rmw_cyclonedds#184.
Summarising: it’s not about micro-ROS, that’s not the problem.
The issue is (de)serialisation of message and service payloads (at the RMW level, so not the ROS 2 message contents) is not standardised, so all RMWs “just do whatever works for them”.
If your entire application uses only a single RMW, that’s not a problem.
If you don’t control all nodes (and by extension, the RMW they use), you can run into situations described in the linked issue.
To be clear, this isn’t true. There is a very well-defined serialization protocol and deserialization protocol for DDS/RTPS. And in fact when you are using just straight-up ROS 2 topics, interoperability between all of our supported DDS vendors (Fast-DDS, RTI Connext, and CycloneDDS) works just fine. We know this because we run tests for that nightly.
What does not work is service calls between DDS vendors (and by extension actions, since actions are partially built on services). In that case, the vendors don’t all do RPC the same way, and hence they don’t interoperate. This is a weakness of the DDS specification, which may or may not be fixed by an specification extension called DDS-RPC.
Going back to the original question, it isn’t clear what the problem is, but it does bear opening a question on ROS answers and giving more details about your setup.
while technically true, there is really no point in being this pedantic about it.
In my experience ROS applications will almost always use a mix of message and service based interaction.
Without services, 2 out of 3 of the interaction patterns we have in ROS don’t work (reliably), without any indication other than “messages disappearing” and service invocations hanging “for no apparent reason”. I won’t repeat what I already commented on the issue I linked above, but it’s a serious problem and saying “but topics work fine” isn’t really helpful here.
Thanks! I will take a deeper look at our setup to double check that we’re using Cyclone everywhere and try to get some better debugging info.
The micro-ros Agent is built on top of Fast DDS, and the Micro-ROS underlying protocol is based on the Fast DDS extension for Microcontrollers: Micro XRCE-DDS.
We recommend using Fast DDS in all your nodes if you plan to use Micro-ROS, as its agent is going to be use Fast DDS always.