diff --git a/README.md b/README.md index 41011ec..2fc09dd 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,37 @@ # A ROS2 RMW implementation for Eclipse Cyclone DDS -This is an extended proof-of-concept RMW implementation for -using [*ROS2*](https://index.ros.org/doc/ros2) +With the code in this repository, it is possible to use [*ROS2*](https://index.ros.org/doc/ros2) with [*Eclipse Cyclone DDS*](https://github.com/eclipse-cyclonedds/cyclonedds) as the underlying DDS implementation. -Whatever ROS2 C++ test/demo code I could manage to run on macOS seems to work (that covers most of -the core features), and the ROS2 CLI (``ros2``) on Linux gives a reasonable indication that most of -introspection functions also work. So basically, pretty much everything works. +## 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: @@ -20,10 +44,10 @@ There are a number of known limitations: allowing it, even if it is easy to support it today. (E.g., a remote procedure call interface ...) -* Cyclone DDS does not currently support multiple domains simultaneously, and so this RMW - implementation ignores the domain_id parameter in create_node, instead creating all - nodes/participants (including the special participant mentioned above) in the default domain, - which can be controlled via CYCLONEDDS_URI. +* Cyclone DDS does not currently support multiple domains simultaneously (waiting in a PR for the + final polish), and so this RMW implementation ignores the domain\_id parameter in create\_node, + instead creating all nodes/participants (including the special participant mentioned above) in the + default domain, which can be controlled via CYCLONEDDS\_URI. * Deserialization only handles native format (it doesn't do any byte swapping). This is pure laziness, adding it is trivial.