https://github.com/eclipse-ecal/rmw_ecal
ROS2 middleware based on eCAL
https://github.com/eclipse-ecal/rmw_ecal
ecal middleware rmw ros2
Last synced: 4 months ago
JSON representation
ROS2 middleware based on eCAL
- Host: GitHub
- URL: https://github.com/eclipse-ecal/rmw_ecal
- Owner: eclipse-ecal
- License: apache-2.0
- Created: 2020-08-28T11:41:52.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2023-09-28T03:09:18.000Z (over 2 years ago)
- Last Synced: 2024-06-11T20:16:34.760Z (about 2 years ago)
- Topics: ecal, middleware, rmw, ros2
- Language: C++
- Homepage:
- Size: 271 KB
- Stars: 59
- Watchers: 6
- Forks: 13
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# eCAL ROS2 middleware layer

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](https://github.com/eclipse-ecal/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](https://projects.eclipse.org/projects/automotive.ecal/who)) 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](https://eclipse-ecal.github.io/ecal/getting_started/setup.html)
* Clone latest release of this repository into your [ROS2 workspace](https://index.ros.org/doc/ros2/Tutorials/Workspace/Creating-A-Workspace/)
* Source ROS2
```bash
# 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
```bash
# 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
```bash
# 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
```bash
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](https://github.com/eclipse-ecal/rosidl_typesupport_protobuf) and set variable RMW_IMPLEMENTATION to "rmw_ecal_proto_cpp".
Run all nodes using rmw_ecal_proto_cpp
```bash
# 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
```bash
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:
* A bit slower than rmw_ecal_dynamic_cpp
* Not plug&play, requires [rosidl_typesupport_protobuf](https://github.com/eclipse-ecal/rosidl_typesupport_protobuf) to be built and sourced to work
## Zero copy support
[eCAL 5.10 introduced zero copy support for publishers](https://eclipse-ecal.github.io/ecal/advanced/layers/shm.html#zero-copy-mode-optional), it's currently disabled by default since it's still in experimental stage.
You can enable it by adding this config to ecal.ini
```ini
[publisher]
memfile_zero_copy = 1
```
## Currently supported ROS2 distributions
* Foxy Fitzroy
* Galactic Geochelone
* Humble Hawksbill
## Legacy ROS2 distributions
* [Dashing Diademata](https://github.com/eclipse-ecal/rmw_ecal/tree/legacy/dashing)
* [Eloquent Elusor](https://github.com/eclipse-ecal/rmw_ecal/tree/legacy/eloquent)