Skip to content

Commit 0556c59

Browse files
committed
First iteration of features comparison rework.
1 parent 4cad89b commit 0556c59

1 file changed

Lines changed: 19 additions & 15 deletions

File tree

  • _docs/overview/ROS_2_feature_comparison

_docs/overview/ROS_2_feature_comparison/index.md

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,32 +14,36 @@ Comparison of micro-ROS features with ROS 2 features. The following list has bee
1414

1515
ROS 2 Feature | | Availability in micro-ROS
1616
-- | -- | --
17-
Transport and serialization over DDS | <span class="status_flag">&#10003;</span> | Provided by [Micro XRCE-DDS](https://github.com/eProsima/Micro-XRCE-DDS) and compatible with standard DDS via XRCE agent on connected stronger microprocessor.
17+
Transport and serialization over DDS-XRCE and DDS| <span class="status_flag">&#10003;</span> | Available transports: UDP and Serial as provided 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 from Agent to standard DDS by [Fast-CDR](https://github.com/eProsima/Fast-CDR).
1818
Support for multiple DDS implementations, chosen at runtime | <span class="status_flag">&#10003;</span> | Support is possible in principle, but at compile-time only.
19-
Common core client library that is wrapped by language-specific libraries | <span class="status_flag">&#10003;</span> | Use of the client support library [rcl](https://github.com/ros2/rcl/) from ROS 2 as-is. The [rclc](https://github.com/micro-ROS/rclc) package provides convenience functions and an executor for use of rcl+rclc as client library for the C programming language.
19+
Common core client library that is wrapped by language-specific libraries | <span class="status_flag">&#10003;</span> | Use of the client support library [rcl](https://github.com/ros2/rcl/) from ROS 2 as-is. The [rclc](https://github.com/micro-ROS/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 a proper additional abraction layer on top of the rcl that serves as user's API.*
2020
Publish/subscribe over topics | <span class="status_flag">&#10003;</span> | Available, but only fixed-size message types supported to avoid dynamic memory allocations.
2121
Clients and services | <span class="status_flag">&#10003;</span> | Available, but only fixed-size message types supported to avoid dynamic memory allocations.
22-
ROS 1 -- ROS 2 communication bridge | <span class="status_flag">&ndash;</span> | Not applicable, standard ROS 1 -- ROS 2 bridge can be used via micro-ROS Agent on a stronger microprocessor to communicate with micro-ROS nodes.
23-
Actions | <span class="status_flag">&#9675;</span> | *Not yet implemented.*
24-
Parameters | <span class="status_flag">&#10003;</span> | *To be implemented soon in rclc.*
22+
ROS 1 -- ROS 2 communication bridge | <span class="status_flag">&#10003;</span> | 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.
23+
Actions | <span class="status_flag">&#9675;</span> | *To be implemented soon in rclc.*
24+
Parameters | <span class="status_flag">&#9675;</span> | *To be implemented soon in rclc.*
2525
Node Graph | <span class="status_flag">&#10003;</span> | Available as in ROS 2.
26-
Discovery | <span class="status_flag">&#10003;</span> | Available as in ROS 2.
27-
Quality of service settings for handling non-ideal networks | <span class="status_flag">&#10003;</span> | Two QoS semantics, reliable and best-effort semantics, are provided and can be set at compile-time.
28-
Inter- and intra-process communication using the same API | <span class="status_flag">&#10003;</span> | 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.*
26+
Discovery | <span class="status_flag">&#10003;</span> | Discovery between entities available as in ROS 2. Further discovery mechanism available for the Clients to discover Agents on the network.
27+
Quality of service settings for handling non-ideal networks | <span class="status_flag">&#10003;</span> | 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](https://micro-ros.github.io/docs/tutorials/core/create_dds_entities_by_ref/).
28+
Inter- and intra-process communication using the same API | <span class="status_flag">&#10003;</span> | 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 (if any) offered by RTOS. *Efficient shared-memory communication on the MCU is considered as an important feature for future releases.*
2929
Composition of node components at compile-, link- or dlopen-time | <span class="status_flag">&#10003;</span> | Composition at compile-time only. Composition at runtime would depend highly on the RTOS.
3030
Support for nodes with managed lifecycles | <span class="status_flag">&#10003;</span> | The [rclc_lifecycle](https://github.com/micro-ROS/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.
31-
DDS-Security support | <span class="status_flag">&#10003;</span> | DDS security is supported at micro-ROS-Agent. *Security mechanisms in Micro XRCE-DDS are planned for future releases.*
32-
Command-line introspection tools using an extensible framework | <span class="status_flag">&#10003;</span> | 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).
31+
DDS-Security support | <span class="status_flag">&#10003;</span> | 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.*
32+
Command-line introspection tools using an extensible framework | <span class="status_flag">&#10003;</span> | Thanks to graph support, from a remote microprocessor running a micro-ROS node all standard ROS 2 tools can be used to introspect the topology of the ROS 2 dataspace via the Agent. At the same time, standard ROS 2 nodes can fetch information regarding the micro-ROS entities present on the network.
3333
Launch system for coordinating multiple nodes | <span class="status_flag">&#10003;</span> | 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.
3434
Namespace support for nodes and topics | <span class="status_flag">&#10003;</span> | Available as in ROS 2.
3535
Static remapping of ROS names | <span class="status_flag">&#10003;</span> | *Should be available if passed as argument via standard rcl API -- to be checked.*
3636
Demos of an all-ROS 2 mobile robot | <span class="status_flag">&#10003;</span> | 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/).
37-
Support for real-time code | <span class="status_flag">&#10003;</span> | The [rclc Executor](https://github.com/micro-ROS/rclc/tree/master/rclc) provides mechanisms for implementing real-time-critical applications with micro-ROS.
38-
Support for "bare-metal" microcontrollers | <span class="status_flag">&#10003;</span> | 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](https://www.freertos.org/), [Zephyr](https://www.zephyrproject.org/), or [NuttX](http://nuttx.apache.org/)).
39-
IDL | <span class="status_flag">&#10003;</span> | Same message IDL as with ROS 2, but use of resource-optimized CDR serialization implementation named [Micro-CDR](https://github.com/eProsima/Micro-CDR).
40-
Build system | <span class="status_flag">&#10003;</span> | 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.
37+
Support for real-time code | <span class="status_flag">&#10003;</span> | Real-time behaviour is key to micro-ROS typical usages. The [rclc Executor](https://github.com/micro-ROS/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 in that it's dynamic memory free and by provideing functions to perform tasks within well-defined periods of time.
38+
Support for "bare-metal" microcontrollers | <span class="status_flag">&#10003;</span> | 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, and integration into [Arduino IDE](https://github.com/micro-ROS/micro_ros_arduino) is a first step towards true micro-ROS bare-metal support.
39+
IDL | <span class="status_flag">&#10003;</span> | micro-ROS supports the same IDL types as ROS 2. Generation of C code as handled by the Client IDLs 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).
40+
Build system | <span class="status_flag">&#10003;</span> | 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 of external development frameworks (e.g., ESP-IDF and the Zephyr build system).
4141
Continuous Integration | <span class="status_flag">&#10003;</span> | 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/).
42-
Documentation | <span class="status_flag">&#10003;</span> | 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/).
42+
Documentation | <span class="status_flag">&#10003;</span> | 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/).
4343
Logging | <span class="status_flag">&#10003;</span> | *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 ...*
4444
Support of rate and sleep with system clock | <span class="status_flag">&#10003;</span> | 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.*
4545
Support for simulation time | <span class="status_flag">&#10003;</span> | *Might be supported out of the box, but needs to be checked.* We consider HIL setups with simulation time to be corner cases.
46+
Peer-to-peer functionality | <span class="status_flag">&#9675;</span> | Prototypical peer-to-peer functionality implemented over boradcast. No QoS available for the moment. *Roadmap: improve prototype to achieve true point-to-point connection.*
47+
Supported hardware | <span class="status_flag">&#10003;</span> | micro-ROS officially supports four boards, For the moment, all 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).
48+
Supported Operating Systems | <span class="status_flag">&#10003;</span> | micro-ROS is supported by the RTOSes FreeRTOS, Zephyr, NuttX, in addition to Linux and Windows.
49+
Memory footprint | <span class="status_flag">&#10003;</span> | A comprehensive profiling of the memory consumption of typical micro-ROS applications can be found [here](https://micro-ros.github.io/docs/concepts/memo_prof/).

0 commit comments

Comments
 (0)