diff --git a/_docs/overview/ROS_2_feature_comparison/index.md b/_docs/overview/ROS_2_feature_comparison/index.md index dd975a9e..95d1022a 100644 --- a/_docs/overview/ROS_2_feature_comparison/index.md +++ b/_docs/overview/ROS_2_feature_comparison/index.md @@ -14,70 +14,71 @@ Comparison of micro-ROS features with ROS 2 features. The following list has bee ### 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](https://github.com/ros2/rcl/) from ROS 2 as-is. The [rclc](https://github.com/ros2/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](https://github.com/ros2/rclc/blob/master/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. +| 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](https://github.com/ros2/rcl/) from ROS 2 as-is. The [rclc](https://github.com/ros2/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](https://github.com/ros2/rclc/blob/master/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](https://github.com/micro-ROS/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](https://soss.docs.eprosima.com/en/latest/getting_started.html#example-ros1-ros2-communication) can be used via micro-ROS Agent to communicate with micro-ROS nodes. -Actions | | *To be implemented soon in rclc.* -Parameters | | *To be implemented soon in rclc.* -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 | | No shared-memory interprocess communication on the MCU available, but all communication is performed via the micro-ROS-Agent running on a connected microprocessor. Possibility to leverage multi-thread functionalities offered by RTOS. *Efficient shared-memory communication on the MCU is considered as an important feature for future releases.* -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. +| 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](https://soss.docs.eprosima.com/en/latest/getting_started.html#example-ros1-ros2-communication) can be used via micro-ROS Agent to communicate with micro-ROS nodes. | +| Actions | | *To be implemented soon in rclc.* | +| 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 as enabled by [Micro XRCE-DDS](https://github.com/eProsima/Micro-XRCE-DDS). Serialization between Client and Agent provided by [Micro-CDR](https://github.com/eProsima/Micro-CDR) and between Agent to standard DDS by [Fast-CDR](https://github.com/eProsima/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](/docs/tutorials/advanced/create_dds_entities_by_ref/). -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](https://github.com/eProsima/Micro-XRCE-DDS-Gen) library, whereas generation of the C++ types handled by the Agent is handled by [Fast-DDS-Gen](https://github.com/eProsima/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 ...* +| 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](https://github.com/eProsima/Micro-XRCE-DDS). Serialization between Client and Agent provided by [Micro-CDR](https://github.com/eProsima/Micro-CDR) and between Agent to standard DDS by [Fast-CDR](https://github.com/eProsima/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](/docs/tutorials/advanced/create_dds_entities_by_ref/). | +| 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](https://github.com/eProsima/Micro-XRCE-DDS-Gen) library, whereas generation of the C++ types handled by the Agent is handled by [Fast-DDS-Gen](https://github.com/eProsima/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](https://github.com/micro-ROS/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](https://micro-ros.github.io/docs/overview/hardware/). More ports have been carried out by users, check the [complete list](https://github.com/micro-ROS/micro_ros_setup#supported-platforms). -Supported Operating Systems | | micro-ROS is supported by the RTOSes FreeRTOS, Zephyr, NuttX, in addition to Linux and Windows. +| 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](https://github.com/micro-ROS/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](https://micro-ros.github.io/docs/overview/hardware/). More ports have been carried out by users, check the [complete list](https://github.com/micro-ROS/micro_ros_setup#supported-platforms). | +| 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 [https://micro-ros.github.io/docs/tutorials/demos/](https://micro-ros.github.io/docs/tutorials/demos/). -Support for real-time code | | Real-time behaviour is key to micro-ROS typical usages. The [rclc Executor](https://github.com/ros2/rclc/tree/master/rclc) 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](https://www.freertos.org/), [Zephyr](https://www.zephyrproject.org/), or [NuttX](http://nuttx.apache.org/)). Recent developments aim at loosening this requirement, with the integration into [Arduino IDE](https://github.com/micro-ROS/micro_ros_arduino) 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 [build.ros2.org](http://build.ros2.org/). -Documentation | | High-level documentation at [micro-ros.github.io](https://micro-ros.github.io/). For detailed information please consult the README.md files in the relevant micro-ROS repositories at [github.com/micro-ROS/](https://github.com/micro-ROS/). For information on the middleware implementation, take a look at the [Micro XRCE-DDS documentation](https://micro-xrce-dds.docs.eprosima.com/en/latest/). -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](https://micro-ros.github.io/docs/concepts/benchmarking/memo_prof/). +| Feature | | Availability in micro-ROS | +| ----------------------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| 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/](https://micro-ros.github.io/docs/tutorials/demos/). | +| Support for real-time code | | Real-time behaviour is key to micro-ROS typical usages. The [rclc Executor](https://github.com/ros2/rclc/tree/master/rclc) 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](https://www.freertos.org/), [Zephyr](https://www.zephyrproject.org/), or [NuttX](http://nuttx.apache.org/)). Recent developments aim at loosening this requirement, with the integration into [Arduino IDE](https://github.com/micro-ROS/micro_ros_arduino) 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 [build.ros2.org](http://build.ros2.org/). | +| Documentation | | High-level documentation at [micro-ros.github.io](https://micro-ros.github.io/). For detailed information please consult the README.md files in the relevant micro-ROS repositories at [github.com/micro-ROS/](https://github.com/micro-ROS/). For information on the middleware implementation, take a look at the [Micro XRCE-DDS documentation](https://micro-xrce-dds.docs.eprosima.com/en/latest/). | +| 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](https://micro-ros.github.io/docs/concepts/benchmarking/memo_prof/). | Below, you can find the legend of the symbols used in the tables above. -Symbols legend | --- | -- - | Available. -✓+ | 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. +| Symbols legend | | +| ------------------------------------------------ | ------------------------------------------------------------------------------ | +| | Available. | +| ✓+ | 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. |