Skip to content

Commit 591dd60

Browse files
committed
Finalized first version of features list.
Signed-off-by: Ralph Lange (CR/AEE1) <ralph.lange@de.bosch.com>
1 parent 2de57cb commit 591dd60

1 file changed

Lines changed: 27 additions & 28 deletions

File tree

_docs/overview/features/index.md

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,32 @@ permalink: /docs/overview/features/
55

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

8+
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](https://github.com/micro-ROS/) or contact us via [Slack](https://micro-ros.slack.com/).
9+
810
Feature | Status
911
-- | --
10-
Discovery, transport and serialization over DDS | Implemented by XRCE-DDS.
11-
Support for multiple DDS implementations, chosen at runtime | Possible in principle at compile-time. So far there is only one XRCE-DDS implementation, namely Micro-DDS-XRCE.
12-
Common core client library that is wrapped by language-specific libraries | micro-ROS uses rcl from ROS 2, but provides convenience functions by rclc for use as a C API. rclcpp may be used on MCUs with sufficient RAM.
13-
Publish/subscribe over topics | Implemented, fixed-size message types only.
14-
Clients and services | Implemented, fixed-size message types only.
15-
Set/retrieve parameters | Implemented. No convenience functions yet.
16-
ROS 1 - ROS 2 communication bridge | N/A, possible via agent on microprocessor
17-
Quality of service settings for handling non-ideal networks | Reliable and best-effort semantics available to be set at compile time. WIP
18-
Inter- and intra-process communication using the same API | No shared-memory interprocess communication on the MCU but all communication is performed via the agent. We consider efficient shared-memory communication on the MCU as an important feature for the future.
19-
Composition of node components at compile-, link- or dlopen-time | Composition at compile-time.
20-
Support for nodes with managed lifecycles | tbd
21-
DDS-Security support | DDS security is supported in agent. Some simple security in XRCE is planned.
22-
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 agent), the node graph API is not available on the MCU.
23-
Launch system for coordinating multiple nodes | No launch system for the micro-ROS nodes on an MCU available (as this highly depends on the RTOS). System-modes concept developed in micro-ROS allows runtime configuration/orchestration of ROS 2 and micro-ROS nodes together.
24-
Namespace support for nodes and topics | Just as in ROS 2.
25-
Static remapping of ROS names | Should be available if passed as argument via standard rcl API - to be checked.
26-
Demos of an all-ROS 2 mobile robot | Demo of an all ROS 2 + micro-ROS mobile robot (link to video)
27-
Support for real-time code | micro-ROS offers rclc Executor which allows for deterministic, real-time guarantees.
28-
Support for “bare-metal” microcontrollers | Bringing ROS 2 onto microcontrollers is all that micro-ROS is about - but with the difference that micro-ROS assumes an RTOS.
29-
30-
IDL | Same as with ROS 2, but own serialization named Micro CDR from XRCE-DDS standard
31-
Building - build system | Build system for NuttX and FreeRTOS integrated with colcon. Integration with Zephyr WIPThis is the most fragile/risky part of micro-ROS w.r.t. the long-term maintenance. If the build system breaks with future updates of rcl, colcon, NuttX, FreeRTOS, Zephyr, then developers may get frustrated very soon and prefer small hand-written solutions over micro-ROS.
32-
Building - CI | Currently distributed to GitHub and Gitlab.Until the end of 2020, all CI should be moved completely to GitHub, which offers CI actions since a few months.
33-
Documentation | High-level documentation at micro-ros.github.io
34-
Logging | Might 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 ...
35-
Time-related: Support of rate and sleep with system clock | rcl timers use POSIX API. Tested successfully on NuttX, but resolution is very low. Higher resolution could be achieved with hardware timers - which highly depends on the MCU and possibly the RTOS. To be analyzed and implemented by at least one example. (Bosch)
36-
Time-related: Support for simulation time | Might be supported out of the box. To be checked ... We consider HIL setups with simulation time to be corner cases.
37-
12+
Discovery, transport and serialization over DDS | Use of resource-optimized middleware standard [DDS for Extremely Resource Constrained Environments (DDS-XRCE)](https://www.omg.org/spec/DDS-XRCE/), implemented by [Micro-XRCE-DDS](https://github.com/eProsima/Micro-XRCE-DDS) and compatible with standard DDS via agent on connected stronger microprocessor.
13+
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](https://github.com/eProsima/Micro-XRCE-DDS).
14+
Common core client library that is wrapped by language-specific libraries | micro-ROS uses the core library [rcl](https://github.com/ros2/rcl/) from ROS 2 mainly as-is. The [rclc](https://github.com/micro-ROS/rclc) package provides convenience functions and an executor for use of rcl+rclc as an API for the C programming language. The standard rclcpp may be used on MCUs with sufficient RAM.
15+
Publish/subscribe over topics | Concept available as known from ROS 2. Convenience functions for creation of publishers and subscriptions in C provided in [rclc](https://github.com/micro-ROS/rclc). *However, currently, micro-ROS supports fixed-size message types only.*
16+
Clients and services | Concept available as known from ROS 2. *Convenience functions not yet provided and current implementation supports fixed-size message types only.*
17+
ROS 1 - ROS 2 communication bridge | Not applicable, but the standard ROS 1 - ROS 2 bridge can be used via agent on a stronger microprocessor to communicate with micro-ROS nodes.
18+
Quality of service settings for handling non-ideal networks | Reliable and best-effort semantics available. Can be set at compile time. *Still under development.*
19+
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 agent running on a connected microprocessor. *Efficient shared-memory communication on the MCU is considered as an important feature for future releases.*
20+
Composition of node components at compile-, link- or dlopen-time | Composition at compile-time only. Composition at runtime would depend highly on the RTOS.
21+
Support for nodes with managed lifecycles | Very basic support provided by [rcl_lifecycle](https://github.com/ros2/rcl/tree/master/rcl_lifecycle/) out of the box for micro-ROS. *Further convenience functions are planned.*
22+
DDS-Security support | DDS security is supported at agent. *Security mechanisms in Micro-XRCE-DDS are planned for future releases.*
23+
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 agent). Note, however, that the node graph API is currently *not* available on the MCU.
24+
Launch system for coordinating multiple nodes | No launch system for the micro-ROS nodes on an MCU available. Such 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.
25+
Namespace support for nodes and topics | Available just as in ROS 2.
26+
Static remapping of ROS names | *Should be available if passed as argument via standard rcl API - to be checked.*
27+
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/).
28+
Support for real-time code | The [rclc Executor](https://github.com/micro-ROS/rclc/tree/master/rclc) provides mechanisms for implementing real-time-critical applications with micro-ROS.
29+
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](https://www.freertos.org/), [Zephyr](https://docs.zephyrproject.org/), or [NuttX](http://nuttx.apache.org/)).
30+
IDL | Same message IDL as with ROS 2, but use of resource-optimized CDR serialization implementation named [Micro-CDR](https://github.com/eProsima/Micro-CDR).
31+
Build system | Build systems of NuttX and FreeRTOS integrated with colcon. *Integration of Zephyr's build system with colcon is in progress.* The build system is likely the most fragile part of micro-ROS w.r.t. the long-term maintenance, due to the many dependencies.
32+
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/).
33+
Documentation | High-level documentation at [micro-ros.github.io](https://micro-ros.github.io/). For detailled information please consult the README.md files in the relevant micro-ROS repositories at [github.com/micro-ROS/](https://github.com/micro-ROS/).
34+
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 ...*
35+
Time-related: Support of rate and sleep with system clock | rcl timers use POSIX API. Tested successfully on NuttX, but resolution is very low. Higher resolution could be achieved with hardware timers - which highly depends on the MCU and possibly the RTOS. *This feature requires further investigation.*
36+
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.

0 commit comments

Comments
 (0)