embeddedRTPS: the new experimental middleware for micro-ROS

The micro-ROS team has been hearing requests for a micro-ROS middleware implementation that does not rely on a client-agent architecture for a long time.

Although the DDS-XRCE standard was originally chosen for major reasons and it has fulfilled its function exceptionally (for example being port to a wide variety of Arduino boards or being used on top of even low bandwidth radio transports), the current trends in the MCUs capabilities also allows the usage of more complex middleware solutions, that is why new solutions are emerging like mRos.

Middleware implementations such as embeddedRTPS, bring the possibility of using RTPS communication layers on mid to high range MCU with networking capabilities.

Thanks to the layer to layer compatibility of micro-ROS with the ROS 2 architecture, testing those new middlewares is just a matter of writing a new RMW implementation. As well as making some porting adjustments due to the embedded nature of micro-ROS.

From the eProsima’s micro-ROS team we want to provide the same features to the official ROS 2 embedded solution. So, we have created a basic rmw_embeddedrtps for micro-ROS, that, although it is not complete, allows the basic functionality of publishing, subscribing and using ROS 2 services. All of this using the well-known micro-ROS C99 API: rclc.

We have prepared a PoC based on FreeRTOS and LwIP. Therefore, users will be able to test their existing micro-ROS applications on top of a RTPS-compatible middleware:

  • The first repo integrates this experimental RMW in the Expressif ESP-IDF. micro-ROS nodes can interface wirelessly with ROS 2 thanks to the wireless capabilities of the ESP32 family
  • The second repo integrates the new solution in STMCubeIDE. So, although we have used a ST Nucleo F746ZG, virtually all STMicroelectronics STM32 MCUs with networking capabilities and enough resources could run it.

In both approaches, apps can use the full-featured micro-ROS stack (rclc executors, typesupport optimized for embedded, tooling for C type introspection and static memory configuration…) on top of a middleware like embeddedRTPS, that natively speaks ROS 2. No agents.

Even though it is only a PoC and much remains to be developed and improved, we strongly believe that it will be very well received by the community and will drive involvement to maintain it.

As a result, micro-ROS can be compiled either with Micro XRCE-DDS for low-mid MCUs or with embeddedRTPS for larger devices that are used in critical applications. So, the developer can easily choose the preferred middleware for any application.

21 Likes

Maintainer of embeddedRTPS here. Great work!

4 Likes

I am one of the developers of mROS 2 that employs embeddedRTPS by @AKampmann . His work is so interesting and wonderful.
What an incredible news from micro-ROS team!! (but it’s pretty sad one to us :sob: )

3 Likes

Thanks, @AKampmann and @takasehideki! Much remains to be developed though! Hopefully, the community will find it interesting.

Maybe it is interesting to join efforts here and work together in improving this RMW for micro-ROS. As you can see there is a lot of work to do in rmw_embeddedrtps and also we found it difficult to configure LwIP for making embeddedRTPS work properly, so maybe documentation can be improved.

At eProsima, we will continue developing micro-ROS layers and the related tooling for cross-compiling. As you can see, with this PoC it should be easy to port micro-ROS + embeddedRTPS to other architectures such as Zephyr, Azure RTOS, or Nuttx (where micro-ROS is currently supported).

If you are interested just talk with @mamerlan or me and we can schedule a quick meeting. Also, remember that we organize a monthly Embedded Working Group where a discussion about new micro-ROS RMW implementations would be super interesting.

Thanks a lot for your contributions!

Very good decision. This is very exciting @mamerlan and very aligned with what was written at micro-ROS enabled robot and kinematics - #4 by vmayoral before.

Well done @mamerlan and team at eProsima. Kudos to @AKampmann for his pioneering work in embeddedRTPS. A very high quality piece of embedded work.

I like the recomendation in here. @mamerlan and @pablogs, do you guys have any preliminary benchmarks or results available comparing side by side (in the same hardware) Micro XRCE-DDS and embeddedRTPS?

2 Likes

Thanks @vmayoral, no bechmarking has been done so far at eProsima, I agree that can be an interesting exercise.

I’m happy to discuss improvements, accept pull requests etc. embeddedRTPS has been developed as a by-product for the software in UNICARagil. I’m currently the only developer for embeddedRTPS and I make improvements or add features that arise through the use in this project. Certainly there are many things to improve, both code-wise and on the documentation side.

1 Like

@mamerlan - I don’t know how I missed this post. My ESP32 presentation has out-dated info!!

This looks awesome. Looking fwd to following this development.

Jack

2 Likes

Hi everyone! You can now find more info about embeddedRTPS in the talk delivered by @AKampmann and @pablogs at the Embedded Working Group, in which they give an overview of embeddedRTPS and rmw_embeddedrtps for micro-ROS.

5 Likes