ROS 2 Feature Comparison

Comparison of micro-ROS features with ROS 2 features. The following list has been compiled from and, and the features have been organized into sub-tables according to the macrocategories defined in the Features and Architecture page.

Microcontroller-optimized client API supporting all major ROS concepts

ROS 2 Feature   Availability in micro-ROS
Common core client library that is wrapped by language-specific libraries ✓∘ Use of the client support library rcl from ROS 2 as-is. The rclc package provides convenience functions and an executor for use of rcl+rclc as client library for the C programming language. Roadmap: migrate all functionalities to the rclc, so as to make it an independent abstraction layer on top of the rcl that serves as user’s API.
Composition of node components at compile-, link- or dlopen-time Composition at compile-time only. Composition at runtime would depend highly on the RTOS.
Support for nodes with managed lifecycles The rclc_lifecycle package provides an rclc_lifecycle_node type which bundles an rcl node with the lifecycle state machine as well as corresponding convenience functions.
Utilities for handling types and topics memory statically and dynamically The micro_ros_utilities provides an API for handling types memory using micro-ROS allocators or static memory pools.

Seamless integration with ROS 2

ROS 2 Feature   Availability in micro-ROS
Publish/subscribe over topics Available, but only fixed-size message types supported to avoid dynamic memory allocations.
Clients and services Available, but only fixed-size message types supported to avoid dynamic memory allocations.
ROS 1 – ROS 2 communication bridge Standard ROS 1 – ROS 2 bridge or SOSS-mediate bridge can be used via micro-ROS Agent to communicate with micro-ROS nodes.
Actions Available at RCLC level.
Parameters ✓∘ Parameter server is implemented in micro-ROS Client. Parameter client is not available yet.
Node Graph Available as in ROS 2.
Discovery ✓+ Discovery between entities available as in ROS 2. Further discovery mechanism available for the Clients to discover Agents on the network.
Inter- and intra-process communication using the same API ✓∘ Shared-memory interprocess communication on the MCU is available in micro-ROS client. Also the middleware can implement thread-safe operation.
Command-line introspection tools using an extensible framework Thanks to graph support, standard ROS 2 tools can be used to introspect the topology of the ROS 2 dataspace, via the Agent, from a microprocessor running a micro-ROS node . At the same time, standard ROS 2 nodes can fetch information regarding the micro-ROS entities present on the network.
Launch system for coordinating multiple nodes No launch system for the micro-ROS nodes on an MCU available. Such a system would depend highly on the RTOS. The system-modes concept developed with micro-ROS allows runtime configuration/orchestration of ROS 2 and micro-ROS nodes together.
Namespace support for nodes and topics Available as in ROS 2.
Static remapping of ROS names Should be available if passed as argument via standard rcl API – to be checked.
Support of rate and sleep with system clock rcl timers use POSIX API. Tested successfully on NuttX, but the resolution is very low. A higher resolution could be achieved with hardware timers – which highly depends on the MCU and possibly the RTOS. This feature requires further investigation.
Support for simulation time Might be supported out of the box, but needs to be checked. We consider HIL setups with simulation time to be corner cases.

Extremely resource-constrained but flexible middleware

ROS 2 Feature   Availability in micro-ROS
Transport and serialization over DDS-XRCE and DDS ✓+ Available transports: UDP, serial (UART) and custom transports as enabled by Micro XRCE-DDS. Serialization between Client and Agent provided by Micro-CDR and between Agent to standard DDS by Fast-CDR.
Support for multiple DDS implementations, chosen at runtime Support via the Micro XRCE-DDS Agent is possible in principle, but at compile-time only.
Quality of service settings for handling non-ideal networks ✓+ For communication over the DDS-XRCE wire protocol, two QoS semantics, reliable and best-effort, are provided and can be set at compile-time. As for communication with the ROS 2 dataspace, micro-ROS entities can benefit from the whole set of QoS allowed by DDS when created by Reference.
DDS-Security support ✓- Security is not yet supported in the communication process between the Client and the Agent. However, the micro-ROS Agent can benefit from Fast DDS security capabilities during the creation of DDS entities. Roadmap: Implementation of security mechanisms in Micro XRCE-DDS are planned for future releases.
IDL ✓+ micro-ROS supports the same IDL types as ROS 2. Generation of C code from IDLs as handled by the Client is performed by the Micro-XRCE-DDS-Gen library, whereas generation of the C++ types handled by the Agent is handled by Fast-DDS-Gen.
Logging Could be available as part of the standard logging mechanism in principle but not supported by Micro-XRCE-DDS due to dynamic message size. To be checked …

Multi-RTOS support with generic build system

Feature   Availability in micro-ROS
Build system micro-ROS provides two ways of building a micro-ROS application. The first uses the micro_ros_setup tool integrated in a ROS 2 workspace. With this approach, the build systems of NuttX, FreeRTOS, and Zephyr are integrated with colcon. The other provides micro-ROS as a component for external development frameworks (e.g., ESP-IDF and Zephyr build system).
Supported hardware micro-ROS officially supports four boards. For the moment, all official ports are based on the STM32 series from ST and on the ESP32 from Espressif. Find more info here. More ports have been carried out by users, check the complete list.
Supported Operating Systems micro-ROS is supported by the RTOSes FreeRTOS, Zephyr, NuttX, in addition to Linux and Windows.

micro-ROS specific features

Feature   Availability in micro-ROS
Demos of an all-ROS 2 mobile robot Demos of several ROS 2 + micro-ROS robots available. See
Support for real-time code Real-time behaviour is key to micro-ROS typical usages. The rclc Executor provides mechanisms for implementing real-time-critical applications. At lower levels, the Micro XRCE-DDS library exhibits real-timeness and determinism for being dynamic memory free and for providing functions to perform tasks within well-defined periods of time.
Support for “bare-metal” microcontrollers Bringing ROS 2 onto MCUs is all that micro-ROS is about. The standard approach to micro-ROS assumes an RTOS underneath (e.g., FreeRTOS, Zephyr, or NuttX). Recent developments aim at loosening this requirement, with the integration into Arduino IDE being a first step towards true micro-ROS bare-metal support.
Continuous Integration ✓∘ Currently, the CI for micro-ROS is distributed to GitHub and GitLab. Until the end of 2020, all CI should be moved migrated completely to the new CI actions of GitHub. Please note that those packages that are released for standard ROS 2 are also built and tested on
Documentation High-level documentation at For detailed information please consult the files in the relevant micro-ROS repositories at For information on the middleware implementation, take a look at the Micro XRCE-DDS documentation.
Peer-to-peer functionality ✓∘ Prototypical peer-to-peer functionality implemented over broadcast. No QoS available for the moment. Roadmap: improve prototype to achieve true point-to-point connection.
Memory footprint A comprehensive profiling of the memory consumption of typical micro-ROS applications can be found here.

Below, you can find the legend of the symbols used in the tables above.

Symbols legend  
✓+ Available both on Agent-DDS and Client-Agent sides of the communication.
✓- Available on Agent-DDS side of the communication but not on Client-Agent side.
✓∘ Available with some WIP feature.
To be implemented soon.
Further investigation required.
Currently unavailable.