Comparison to related approaches
Micro-ROS brings ROS 2 to microcontrollers. Here, we perform an analysis of the related approaches and eventually show a comparison table.
ROSSerial is a protocol for wrapping standard ROS serialized messages and multiplexing multiple topics and services over a device such as a serial port or network socket. In addition to a protocol definition, there are three types of packages found in this suite:
Client Libraries: Client libraries allow users to easily get ROS nodes up and running on various systems. These clients are ports of the general ANSI C++ rosserial_client library.
ROS-side Interfaces: These packages provide a node for the host machine to bridge the connection from the rosserial protocol to the more general ROS network.
Examples and Use Cases.
It is worth saying that this option cannot be fully compared with micro-ROS because this approach is meant to work with ROS 1, instead of micro-ROS which is focused on ROS 2.
Reference: ROSserial Wiki
RIOT-ROS2 is a modification of the main ROS 2 stack, to make it able to run on microcontrollers thanks to the RIOT Operating System.
ROS 2 is composed of several layers. Some have been modified to be able to run on the microcontroller, this is a list of the available layers for RIOT-ROS2 project:
- ROS Client Library bindings: RCLC
- ROS Client Library: RCL
- ROS MiddleWare: rmw_ndn
- ROS IDL Generators: generator_c
- ROS IDL Type Support: CBOR
- ROS IDL Interfaces:
As a final data, it looks like the development is frozen. This consideration is due to the fact that the last commit goes back to July 2018.
|OS||bare-metal||RIOT||NuttX, FreeRTOS and Zephyr|
|Message format||ROS1||N/A||CDR (from DDS)|
|Communication links||UART||UART||UART, SPI, IP (UDP), 6LowPAN, …|
|Communication protocol||Custom||NDN||XRCE-DDS (or any rmw implementation)|
|Code Base||Independent implementation||Standard ROS 2 stack up to RCL||Standard ROS 2 stack up to RCL (RCLCPP coming)|
|Node API||Custom rosserial API||RCL,RCLC||RCL (soon RCLCPP)|
|Callback execution||Sequential, in order of messages||N/A||Choice of ROS 2 executors or MCU optimized executors|
|Timers||Not included||Not included||Normal ROS 2 timers|
|Time sync to host||Custom||N/A||NTP/PTP|
|Lifecycle||Not supported||Partial||Partial, full coming|