Skip to content

eclipse-ecal/rmw_ecal

Repository files navigation

eCAL ROS2 middleware layer

Build

ROS2 middleware based on eCAL.

NOTE: Minimun eCAL compatible with RMW is 5.10.

eCAL RMW can offer:

  • High performance (shared memory is used for inter-process communication and udp multicast for inter-host communication)
  • Support for eCAL ecosystem powerful tools like eCAL recorder, eCAL player, eCAL monitor, which can be used to record, replay and monitor RMW layer
  • Communication between ROS2 nodes and eCAL tasks without need for a gateway

rmw_ecal is looking for a maintainer

We (the Eclipse eCAL Team) have reached our maximum capacity. Therefore, we currently cannot support this project as well as we would like to and need your help! 🫵

You can help by:

  • Testing it with the latest ROS versions
  • Creating Pull requests
  • Answering other users' questions

If you would like to actively maintain this project, feel free to contact us 😊

We are not abandoning this project and are happy to help and resolve any eCAL related issues.

Build instructions

  • Install eCAL
  • Clone latest release of this repository into your ROS2 workspace
  • Source ROS2
# On Linux
source /path/to/your/ros/distro/folder/setup.bash
# On Windows
call C:/path/to/your/ros/distro/folder/setup.bat
  • Run colcon build from your workspace folder
  • Setup your workspace
# On Linux
source /path/to/your/workspace/install/setup.bash
# On Windows
call C:/path/to/your/workspace/install/setup.bat

How to use

There are currently two rmw implementations

  • rmw_ecal_dynamic_cpp
  • rmw_ecal_proto_cpp

rmw_ecal_dynamic_cpp

rmw_ecal_dynamic_cpp uses custom dynamic typesupport which is builtin into rmw.
To use this implementation just set variable RMW_IMPLEMENTATION to "rmw_ecal_dynamic_cpp".

Run all nodes using rmw_ecal_dynamic_cpp

# On Linux
export RMW_IMPLEMENTATION=rmw_ecal_dynamic_cpp
# On Windows
set RMW_IMPLEMENTATION=rmw_ecal_dynamic_cpp

Run specific node (in this example demo_nodes_cpp talker) using

RMW_IMPLEMENTATION=rmw_ecal_dynamic_cpp ros2 run demo_nodes_cpp talker

Pros:

  • Faster than rmw_ecal_proto_cpp
  • Plug&Play doesn't require any additional steps/ros packages to work

Cons:

  • Doesn't integrate well into eCAL ecosystem (monitor will only show binary data for messages and native eCAL nodes won't be able to deserialize its data)

rmw_ecal_proto_cpp

rmw_ecal_proto_cpp uses protobuf based static typesupport.
To use this implementation setup rosidl_typesupport_protobuf and set variable RMW_IMPLEMENTATION to "rmw_ecal_proto_cpp".

Run all nodes using rmw_ecal_proto_cpp

# On Linux
export RMW_IMPLEMENTATION=rmw_ecal_proto_cpp
# On Windows
set RMW_IMPLEMENTATION=rmw_ecal_proto_cpp

Run specific node (in this example demo_nodes_cpp talker) using

RMW_IMPLEMENTATION=rmw_ecal_proto_cpp ros2 run demo_nodes_cpp talker

Pros:

  • Integrates well into eCAL ecosystem (monitor will show actual message data and native eCAL nodes will be able to deserialize its messages)

Cons:

Zero copy support

eCAL 5.10 introduced zero copy support for publishers, it's currently disabled by default since it's still in experimental stage. You can enable it by adding this config to ecal.ini

[publisher]
memfile_zero_copy = 1

Currently supported ROS2 distributions

  • Foxy Fitzroy
  • Galactic Geochelone
  • Humble Hawksbill

Legacy ROS2 distributions