Repo symbol

rmw_email repository

email ros ros2 rmw
Repo symbol

rmw_email repository

email ros ros2 rmw
Repo symbol

rmw_email repository

email ros ros2 rmw
Repo symbol

rmw_email repository

email ros ros2 rmw
Repo symbol

rmw_email repository

email ros ros2 rmw email email_examples rmw_email_cpp

Repository Summary

Description ROS 2 over email: a middleware implementation
Checkout URI https://github.com/christophebedard/rmw_email.git
VCS Type git
VCS Version rolling
Last Updated 2025-03-30
Dev Status UNKNOWN
Released UNRELEASED
Tags email ros ros2 rmw
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
email 0.8.0
email_examples 0.8.0
rmw_email_cpp 0.8.0

README

rmw_email

Latest GitHub tag GitHub workflow status License

ROS 2 over email. rmw_email contains a middleware that sends & receives strings over email and an RMW implementation that allows ROS 2 to use this middleware to exchange messages.

For an overview of the motivation and process behind this project, see this blog post: christophebedard.com/ros-2-over-email.

  1. Overview
  2. Packages
  3. Supported features
    1. Platform support
  4. Performance
  5. How to use
  6. Configuration
  7. Tracing
  8. Logging
  9. email examples

Overview

overview diagram, from ROS 2 (rcl) to the email server(s) and back up to ROS 2

rmw_email_cpp uses type support introspection to convert messages to YAML objects. This is done for both C and C++ type supports using the dynmsg package. The YAML objects are then converted to strings.

Those strings are sent via email using the email package. The topic name is used as the email subject; the email body contains the YAML string representing the message. Messages can therefore easily be read.

example of resulting emails after two 'hello world' messages on the '/chatter' topic

To receive messages, this process is repeated in the opposite direction.

Successive messages on the same topic generally end up in the same email thread (depending on the client). Service responses are email replies to the corresponding email request (this is handled by email).

example of resulting emails for a service request and then response

email also has an intraprocess communication mode to bypass actually sending and receiving emails.

Packages

This repository contains a few packages:

Supported features

The following table shows the features currently supported/unsupported by rmw_email_cpp.

ROS 2 feature Status
publishers/subscriptions :heavy_check_mark:
services, actions :heavy_check_mark:
introspection using ros2 * commands :x:
QoS, rmw events :x:

Platform support

rmw_email was primarily developed on Ubuntu. However, it should work on macOS and Windows without too much effort. See REP 2000.

Performance

We can use performance_test to compare the performance of rmw_email_cpp to another RMW implementation.

latency comparison between rmw_email_cpp and rmw_cyclonedds_cpp

See the perf_test.sh and perf_plot.sh scripts to run performance_test and generate a plot like the one above.

How to use

  1. Clone this repo into your ROS 2 workspace

```sh $ cd ~/ws/src/

File truncated at 100 lines see the full file

CONTRIBUTING

Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that license:

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

Contributors must sign-off each commit by adding a Signed-off-by: ... line to commit messages to certify that they have the right to submit the code they are contributing to the project according to the Developer Certificate of Origin (DCO).

Any contribution that you make to this repository will be under the Apache 2 License, as dictated by that [license](http://www.apache.org/licenses/LICENSE-2.0.html): ~~~ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. ~~~ Contributors must sign-off each commit by adding a `Signed-off-by: ...` line to commit messages to certify that they have the right to submit the code they are contributing to the project according to the [Developer Certificate of Origin (DCO)](https://developercertificate.org/).
Repo symbol

rmw_email repository

email ros ros2 rmw
Repo symbol

rmw_email repository

email ros ros2 rmw
Repo symbol

rmw_email repository

email ros ros2 rmw
Repo symbol

rmw_email repository

email ros ros2 rmw