Features Status

Status of micro-ROS features. The features list has been compiled from https://index.ros.org/doc/ros2/Features/ and https://index.ros.org/doc/ros2/Roadmap/.

All status in italics point to on-going works or open issues. If you could make any contribution, please open a pull request at a relevant micro-ROS repository or contact us via Slack.

Feature Status
Discovery, transport and serialization over DDS Use of resource-optimized middleware standard DDS for Extremely Resource Constrained Environments (DDS-XRCE), implemented by Micro XRCE-DDS and compatible with standard DDS via an XRCE Agent on connected stronger microprocessor.
Support for multiple DDS implementations, chosen at runtime Support is possible in principle, but at compile-time only. So far there is only one DDS-XRCE implementation available, namely Micro DDS-XRCE.
Common core client library that is wrapped by language-specific libraries micro-ROS uses the core library rcl from ROS 2 mainly as-is. The rclc package provides convenience functions and an executor for use of rcl+rclc as an API for the C programming language. The standard rclcpp, which makes extensive use of dynamic data structures, may be used on MCUs with sufficient RAM.
Publish/subscribe over topics Concept available as known from ROS 2. Convenience functions for creation of publishers and subscriptions in C provided in rclc. Note that micro-ROS supports fixed-size message types only to avoid dynamic memory allocations.*
Clients and services Concept available as known from ROS 2. Note that micro-ROS supports fixed-size message types only to avoid dynamic memory allocations. Convenience functions for clients and services as well as support by the rclc Executor are under development.
ROS 1 – ROS 2 communication bridge Not applicable, but the standard ROS 1 – ROS 2 bridge can be used via micro-ROS-Agent on a stronger microprocessor to communicate with micro-ROS nodes.
Quality of service settings for handling non-ideal networks Two QoS semantics, reliable and best-effort semantics, are provided. It can be set at compile-time.
Inter- and intra-process communication using the same API No shared-memory interprocess communication on the MCU available, but all communication is performed via the micro-ROS-Agent running on a connected microprocessor. Efficient shared-memory communication on the MCU is considered as an important feature for future releases.
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.
DDS-Security support DDS security is supported at micro-ROS-Agent. Security mechanisms in Micro XRCE-DDS are planned for future releases.
Command-line introspection tools using an extensible framework From a remote microprocessor all standard ROS 2 tools can be used to introspect the micro-ROS nodes on an MCU. micro-ROS nodes appear as ROS 2 nodes (by the micro-ROS-Agent). Note, however, that the node graph API is currently not available on the MCU.
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 just as in ROS 2.
Static remapping of ROS names Should be available if passed as argument via standard rcl API – to be checked.
Demos of an all-ROS 2 mobile robot Demos of several ROS 2 + micro-ROS robots available. See https://micro-ros.github.io/docs/tutorials/demos/.
Support for real-time code The rclc Executor provides mechanisms for implementing real-time-critical applications with micro-ROS.
Support for “bare-metal” microcontrollers Bringing ROS 2 onto MCUs is all that micro-ROS is about. A crucial difference to this requirement from the early design phase of ROS 2 is that micro-ROS assumes an RTOS (e.g., FreeRTOS, Zephyr, or NuttX).
IDL Same message IDL as with ROS 2, but use of resource-optimized CDR serialization implementation named Micro-CDR.
Build system Build systems of NuttX, FreeRTOS, and Zephyr are integrated with colcon. Furthermore, micro-ROS is provided as a component for ESP-IDF also as a standalone Zephyr module. The build system is likely the most fragile part of micro-ROS w.r.t. the long-term maintenance, due to the many dependencies.
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 build.ros2.org.
Documentation High-level documentation at micro-ros.github.io. For detailed information please consult the README.md files in the relevant micro-ROS repositories at github.com/micro-ROS/.
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 …
Time-related: 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.
Time-related: 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.