micro-ROS aims to bring ROS 2 to microcontrollers to allow having first-class ROS 2 entities in the embedded world.
The standard approach to micro-ROS assumes a Real-Time Operating System underneath.
Even though recent developments aim at loosening this requirement, with the integration into Arduino IDE as an important step towards true micro-ROS bare-metal support, the RTOS-based support remains the main entrypoint to micro-ROS.
To date, micro-ROS is supported by the RTOSes FreeRTOS, Zephyr, NuttX, in addition to Linux and Windows. All three RTOSes are downloaded natively with the micro-ROS build system, and can be chosen when creating a new firmware workspace. Dedicated tutorials for running your first micro-ROS application on each of these Operating Systems can be found here. The features common to all supported RTOSes are an API compliant with POSIX to some degree, extremely low-to-low memory footprint, and availability of different scheduling algorithms to ensure determinism in micro-ROS apps behavior.
Find more details about each of the supported RTOSes below. For a more comprehensive explanation regarding the choice of working with Real-Time Operating Systems, and for a more technical comparison among these three RTOSes, please refer to the RTOS page in the Concepts section, as the present page is meant to solely provide a schematic overview.
Real-Time Operating Systems officially supported by the project
In this section, we review the main features of the three RTOSes supported officially by the project, and provide links to useful documentation.
FreeRTOS is distributed under the MIT license. It is known particularly for its simplicity and the extension a:FreeRTOS provided by Amazon. For micro-ROS, we make use of the POSIX extension.
- Extremely small footprint
- POSIX extension available
- Memory management tools
- Standard and idle tasks available with assignable priorities
- Transport resources: TCP/IP and lwIP
Zephyr is a fairly new open-source RTOS, developed in a Linux Foundation Project. The members of this project include several renowned semiconductor companies. Zephyr strives for a functional safety certification, which would make it the first open-source RTOS with such a certification.
- Small footprint
- Native POSIX port
- Cross Architecture: Huge collection of supported boards
- Extensive suite of Kernel services
- Multiple Scheduling Algorithms
- Highly configurable/Modular for flexibility
- Native Linux, macOS, and Windows Development
NuttX emphasizes its compliance with standards - including POSIX - and small footprint. It can be fit on 8- to 32-bit microcontrollers. The use of POSIX and ANSI standards, together with the mimic it does to UNIX APIs, makes it friendly to the developers that are used to Linux. NuttX is licensed under BSD license and makes use of the GNU toolchain. Please note that the uClib++ library used with NuttX comes under the stricter GNU LGPL Version 3 license.
- POSIX compliant interface to a high degree
- Rich Feature OS Set
- Highly scalable
- Real-Time behavior: fully pre-emptible; fixed priority, round-robin, and “sporadic” scheduling
Bare metal support
Based on the release of micro-ROS as a standalone library with header files, and on the support provided to the Arduino IDE, micro-ROS is available as a bare-metal application, too. Find more details in the dedicated repo.
Arduino bare-metal support
The open-source Arduino Software (IDE) is a library making it easy to program any Arduino board.
Experimentally supported Real-Time Operating Systems
Arm® Mbed™ OS
Mbed OS is an open-source RTOS intended for IoT applications with 32-bit ARM Cortex-M microcontrollers.
Disclaimer: All logos and product names are property of their respective owners. All company names, logos and product names used in this website are for identification purposes only. Their use does not imply endorsement.