ROS Resources: Documentation | Support | Discussion Forum | Service Status | Q&A answers.ros.org

OSS DDS implementation for embedded systems?

Presentations at ROSCon about DDS on embedded systems got me curious and now I’m looking for an OSS implementation of DDS that targets such systems. Preferably ANSI C (target has a very limited C++ runtime) and with small to medium resource usage (memory, cpu). My target does have a unix-like OS, so bare-metal support is not needed.

There are some OSS DDS available, but especially when filtering for ANSI C I’m not left with (m)any options.

I’m aware of the work of @vmayoral (nuttx, freedds) and @codebot (freertps), but I have the impression that all of that has been discontinued / abandoned.

Does anyone have any suggestions for alternatives? Or are there no OSS implementations in C for DDS?

1 Like

Greetings,

I would suggest getting in touch with the folks at eProsima (such as @Jaime_Martin_Losa) , who are working on a free implementation of DDS-XRCE.

I think the XRCE approach has a better long-term path than trying to cram a “full” RTPS implementation onto microcontrollers. For example, XRCE defines much smaller headers than “classic” RTPS, with structures that are also simpler/faster to parse. The whole thing is designed with small systems in mind.

Cheers,
Morgan

1 Like

What is is standardization status of DDS-XRCE?

Is is formal yet, or is it still in flux?

Rohan

It has not been ratified yet, and I believe there are even two competing proposals still.

Thanks for the suggestion @codebot. My platform(s) isn’t (aren’t) so limited that I think I’d absolutely need an XRCE implementation, though it might be nice.

The ANSI C preference seems to be a limiting factor here: ‘enough’ OSS DDS, but those are all C++/Java/something else.

See also here: IPC in ros2

CoreDX runs in an embedded environment. See http://www.twinoakscomputing.com/coredx/embedded . It’s not OSS, but it is less expensive than some other options. Use ASI’s middleware fork for it.

RTI (disclaimer, I work for RTI) also has a DDS implementation (Connext DDS Micro) optimized for small-footprint environments. See https://www.rti.com/products/micro. It is ANSI C and only has about 30000 lines of code. The heap memory footprint is also quite small. You an get some details on heap use here.

RTI Connext DDS Micro is available in source so you can build it for your own environment and it can also run in systems without an OS. Note that is not OSS as you wanted. However RTI offers no-cost licenses for Universities and qualified research projects so maybe it can still fit your need.