DDS: Data Distribution Service

DDS is a standard, realtime, platform & language agnostic, distributed communication-system; based on pub-sub. It was developed by/for Thales radar systems; then called “splice”. Later become a standard, with several vendors, both commercially and opensource. It is widely used: in finance, technical and scientific environments. It is also very suited for and populair in the IoT world. Also see: https://en.wikipedia.org/wiki/Data_Distribution_Service

Recently, the Eclipse foundation has approved an proposal to have a (true) open-source implementation, called Cyclone DDS. It is based on a Community Edition of a commercial vendor.

  • All sources are on github.
  • There is also a python-binding (also on github).
  • Java and other language bindings are probably available, or upcoming.

Cyclone DDS (cdds)

This implementation is used for the IPSC experiments (other are tried, but not (yet) working).

  • It does work on my Mac, and the RaspberryPi (Model 2, “stretch” (9.1 Debian)
  • All code is natively compiled, both on Mac and RaspberryPi (no cross-compiler needed!)
  • Documentation is available, but limited. And often not updated to the Cyclone version.

Note

Don’t mix it up!

CycloneDDS is based on an earlier “community edition” of ADLINK; which has also put other versions on github; mostly in there “atolab” account. Although related; they are not the same!

  • In some cases, there docs (and code) is almost the same. Or point to each other.
  • This is confusing; be warned!
  • An earlier version of this document even pointed to the wrong repro :-)
  • The python-binding python-cdds is even part of the atolab account.
  • That account has another python-binding (pydds) too; that is NOT working/compatible

Build & Install

Base (C/C++)

Just clone the sources, run cmake and install; as described on https://github.com/eclipse/cyclonedds

Before one can compile it, one should install cmake (note make!), Marvin and Java-8 (or newer)

On Linux/raspberrypi:

> sudo apt-get install  cmake
> sudo apt-get install  oracle-java8-jdk
> sudo apt-get install  maven

Check if the right java version is used. It should say something like:

> java -version
java version "1.8.0_65"

if not, then set the proper version with:

> sudo update-alternatives --config java

Python bindings

Again, clone, and build; See: https://github.com/atolab/python-cdds

One needs (python3) jsonpickle (note the typo on the page: the C is missing). And cdds (see above):

> sudo apt-get install python3
> sudo pip install jsonpickle