|
| 1 | +--- |
| 2 | +title: Supported RTOSes |
| 3 | +permalink: /docs/overview/rtos/ |
| 4 | +--- |
| 5 | + |
| 6 | +<style> |
| 7 | +.rtoscontainer { |
| 8 | + height: auto; |
| 9 | + display: flex; |
| 10 | + flex-direction: row; |
| 11 | + justify-content: flex-start; |
| 12 | + flex-wrap: wrap; |
| 13 | +} |
| 14 | + |
| 15 | +.rtositem_image { |
| 16 | + width: 50%; |
| 17 | + display: flex; |
| 18 | + align-items: center; |
| 19 | + justify-content: center; |
| 20 | +} |
| 21 | + |
| 22 | +.rtositem_description { |
| 23 | + width: 50%; |
| 24 | +} |
| 25 | + |
| 26 | +.rtositem_image img { |
| 27 | + max-width: 70%; |
| 28 | +} |
| 29 | +</style> |
| 30 | + |
| 31 | +micro-ROS aims to **bring ROS 2 to microcontrollers** to allow having first-class ROS 2 entities in the embedded world. |
| 32 | + |
| 33 | +The standard approach to micro-ROS assumes a Real-Time Operating System underneath. |
| 34 | + |
| 35 | +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. |
| 36 | + |
| 37 | +To date, micro-ROS is supported by the RTOSes FreeRTOS, Zephyr, NuttX, in addition to Linux and Windows. |
| 38 | +All three RTOSes are downloaded natively with the [micro-ROS build system](https://github.com/micro-ROS/micro_ros_setup), and can be chosen when creating |
| 39 | +a new firmware workspace. |
| 40 | +Dedicated tutorials for running your first micro-ROS application on each of these Operating Systems can be found [here](https://micro-ros.github.io/docs/tutorials/core/first_application_rtos/). |
| 41 | +The features common to all supported RTOSes are an API compliant with POSIX to some degree, extremely low to low footprint, and availability of different scheduling algorithms to ensure determinism in micro-ROS apps behavior. |
| 42 | +Find more details about each of the supported RTOSes below, and a more comprehensive explaination on "Why an RTOS?" in the Concepts section, as this page is meant to provide a schematic overview on the matter. |
| 43 | + |
| 44 | + |
| 45 | +## Real-Time Operating Systems officially supported by the project |
| 46 | + |
| 47 | +In this section, we review the main features of the three RTOSes supported officially by the project, and link to useful documentation. |
| 48 | + |
| 49 | +<div class="rtoscontainer"> |
| 50 | + <div class="rtositem_description"> |
| 51 | + <h3><b>FreeRTOS</b></h3> |
| 52 | + <div> |
| 53 | + <b>Key features:</b> |
| 54 | + <ul> |
| 55 | + <li>Extremely small footprint</li> |
| 56 | + <li>POSIX extension available</li> |
| 57 | + <li>Memory management tools</li> |
| 58 | + <li>Standard and idle tasks available with assignable priorities</li> |
| 59 | + <li>Transport resources: TCP/IP and lwIP</li> |
| 60 | + </ul> |
| 61 | + <b>Resources:</b> |
| 62 | + <ul> |
| 63 | + <li><a href="https://www.freertos.org/blog.html">Official FreeRTOS website</a></li> |
| 64 | + <li><a href="https://www.freertos.org/2020/09/micro-ros-on-freertos.html">micro-ROS on FreeRTOS</a></li> |
| 65 | + <li><a href="https://micro-ros.github.io/docs/tutorials/core/first_application_rtos/freertos/">First micro-ROS Application on FreeRTOS</a></li> |
| 66 | + </ul> |
| 67 | + </div> |
| 68 | + </div> |
| 69 | + |
| 70 | + <div class="rtositem_image"> |
| 71 | + <img src="https://upload.wikimedia.org/wikipedia/commons/4/4e/Logo_freeRTOS.png"> |
| 72 | + </div> |
| 73 | +</div> |
| 74 | + |
| 75 | +<div class="rtoscontainer"> |
| 76 | + <div class="rtositem_description"> |
| 77 | + <h3><b>Zephyr</b></h3> |
| 78 | + <div> |
| 79 | + <b>Key features:</b> |
| 80 | + <ul> |
| 81 | + <li>Small footprint</li> |
| 82 | + <li>Native POSIX port</li> |
| 83 | + <li>Cross Architecture: Huge collection of <a href="https://docs.zephyrproject.org/latest/boards/index.html">supported boards</a></li> |
| 84 | + <li>Extensive suite of Kernel services</li> |
| 85 | + <li>Multiple Scheduling Algorithms</li> |
| 86 | + <li>Highly configurable/Modular for flexibility</li> |
| 87 | + <li>Native Linux, macOS, and Windows Development</li> |
| 88 | + </ul> |
| 89 | + <b>Resources:</b> |
| 90 | + <ul> |
| 91 | + <li><a href="https://www.zephyrproject.org/">Official Zephyr website</a></li> |
| 92 | + <li><a href="https://www.zephyrproject.org/micro-ros-a-member-of-the-zephyr-project-and-integrated-into-the-zephyr-build-system-as-a-module/">micro-ROS on Zephyr</a></li> |
| 93 | + <li><a href="https://micro-ros.github.io/docs/tutorials/core/first_application_rtos/zephyr/">First micro-ROS Application on Zephyr</a></li> |
| 94 | + <li><a href="https://micro-ros.github.io/docs/tutorials/advanced/zephyr_emulator/">First micro-ROS Application on Zephyr Emulator</a></li> |
| 95 | + </ul> |
| 96 | + </div> |
| 97 | + </div> |
| 98 | + |
| 99 | + <div class="rtositem_image"> |
| 100 | + <img src="https://upload.wikimedia.org/wikipedia/commons/2/2d/Zephyr-logo.png"> |
| 101 | + </div> |
| 102 | +</div> |
| 103 | + |
| 104 | +<div class="rtoscontainer"> |
| 105 | + <div class="rtositem_description"> |
| 106 | + <h3><b>NuttX</b></h3> |
| 107 | + <div> |
| 108 | + <b>Key features:</b> |
| 109 | + <ul> |
| 110 | + <li>POSIX compliant interface to a high degree</li> |
| 111 | + <li>Rich Feature OS Set</li> |
| 112 | + <li>Highly scalable</li> |
| 113 | + <li>Real-Time behavior: fully pre-emptible; fixed priority, round-robin, and “sporadic” scheduling</li> |
| 114 | + </ul> |
| 115 | + <b>Resources:</b> |
| 116 | + <ul> |
| 117 | + <li><a href="https://nuttx.apache.org/">Official NuttX website</a></li> |
| 118 | + <li><a href="https://micro-ros.github.io/docs/tutorials/core/first_application_rtos/nuttx/">First micro-ROS Application on NuttX</a></li> |
| 119 | + </ul> |
| 120 | + </div> |
| 121 | + </div> |
| 122 | + |
| 123 | + <div class="rtositem_image"> |
| 124 | + <img src="https://upload.wikimedia.org/wikipedia/commons/b/b0/NuttX_logo.png"> |
| 125 | + </div> |
| 126 | +</div> |
| 127 | + |
| 128 | +## Bare metal support |
| 129 | + |
| 130 | +Based on the release of micro-ROS as a standalone library + header files, and on the support provided to the Arduino IDE, micro-ROS is available as a bare-metal application, too. |
| 131 | +Fin more details in the dedicated [repo](https://github.com/micro-ROS/micro_ros_arduino). |
| 132 | + |
| 133 | +The open-source Arduino Software (IDE) is a library making it easy to program any Arduino board. |
| 134 | + |
| 135 | +<div class="rtoscontainer"> |
| 136 | + <div class="rtositem_description"> |
| 137 | + <h3><b>Arduino bare-metal support</b></h3> |
| 138 | + <div> |
| 139 | + <b>Key features:</b> |
| 140 | + <ul> |
| 141 | + <li>Inexpensive</li> |
| 142 | + <li>Cross-platform</li> |
| 143 | + <li>Simple, clear programming environment</li> |
| 144 | + <li>Open source and extensible software</li> |
| 145 | + <li>Open source and extensible hardware</li> |
| 146 | + </ul> |
| 147 | + <b>Resources:</b> |
| 148 | + <ul> |
| 149 | + <li><a href="https://www.arduino.cc/">Official Arduino Website</a></li> |
| 150 | + <li><a href="https://github.com/micro-ROS/micro_ros_arduino">micro_ros_arduino repo</a></li> |
| 151 | + </ul> |
| 152 | + </div> |
| 153 | + </div> |
| 154 | + |
| 155 | + <div class="rtositem_image"> |
| 156 | + <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/87/Arduino_Logo.svg/720px-Arduino_Logo.svg.png" width="500"> |
| 157 | + </div> |
| 158 | +</div> |
| 159 | + |
0 commit comments