No description
Find a file
Erik Boasson 60a87ab4ab Optional reporting of late messages
Signed-off-by: Erik Boasson <eb@ilities.com>
2019-09-11 10:00:46 +02:00
.github initial commit 2018-07-09 13:22:25 +02:00
cyclonedds_cmake_module Ensure all packages in the repository have the same version 2019-08-30 11:26:42 +02:00
rmw_cyclonedds_cpp Optional reporting of late messages 2019-09-11 10:00:46 +02:00
CONTRIBUTING.md initial commit 2018-07-09 13:22:25 +02:00
LICENSE initial commit 2018-07-09 13:22:25 +02:00
README.md Multi-domain support 2019-09-11 10:00:46 +02:00

A ROS2 RMW implementation for Eclipse Cyclone DDS

With the code in this repository, it is possible to use ROS2 with Eclipse Cyclone DDS as the underlying DDS implementation.

Getting, building and using it

All it takes to get Cyclone DDS support into ROS2 is to clone this repository and the Cyclone DDS one in the ROS2 workspace source directory, and then run colcon build in the usual manner:

cd ros2_ws/src
git clone https://github.com/atolab/rmw_cyclonedds
git clone https://github.com/eclipse-cyclonedds/cyclonedds
cd ..
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

This seems to work fine on Linux with a binary ROS2 installation as well as when building ROS2 from source. On macOS it has only been tested in a source build on a machine in an "unsupported" configuration (macOS 10.14 with SIP enabled, instead of 10.12 with SIP disabled), and apart from a few details that are caused by the machine configuration, that works fine, too. There is no reason why it wouldn't work the same on Windows, but I haven't tried.

That said, Cyclone DDS has some prerequisites because it currently relies on Java and Maven to build its IDL preprocessor, and so it is probably advisable to check its README for details. On an Ubuntu 18.04 system, sudo apt-get install maven default-jdk will likely address that.

If you want to use a pre-existing installation of Cyclone DDS, you don't need to clone it, but you may have to tell CMake where to look for it using the CycloneDDS_DIR variable. That also appears to be the case if there are other packages in the ROS2 workspace that you would like to use Cyclone DDS directly instead of via the ROS2 abstraction.

Known limitations

There are a number of known limitations:

  • Cyclone DDS does not yet implement DDS Security. Consequently, there is no support for security in this RMW implementation either.

  • Deserialization only handles native format (it doesn't do any byte swapping). This is pure laziness, adding it is trivial.

  • Deserialization assumes the input is valid and will do terrible things if it isn't. Again, pure laziness, it's just adding some bounds checks and other validation code.