You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: _docs/concepts/client_library/execution_management/index.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -239,11 +239,11 @@ The need for the processing patterns, as described in the previous section, are
239
239
240
240
Real-time requirements in embedded applications are typically met using real-time scheduling. The most common is the periodic scheduling policy, in which all functions are mapped to pre-defined periods, e.g., *1 ms*, *10 ms* or *100 ms*. This scheduling policy is well supported by all real-time operating systems and formal performance analysis approaches have been well known for decades.
241
241
242
-
In contrast, ROS~2 follows an event-driven approach. Messages are communicated between nodes using the publish and subscribe paradigm. It is the responsibility of an Executor to react upon new messages. In detail, this Executor coordinates the execution of callbacks issued by the participating nodes by checking the incoming messages from the DDS queue and dispatching them to the underlying threads for execution. Currently, the dispatching mechanism is very basic: the Executor looks up wait queues, which notifies it of any pending messages in the DDS queue.
242
+
In contrast, ROS2 follows an event-driven approach. Messages are communicated between nodes using the publish and subscribe paradigm. It is the responsibility of an Executor to react upon new messages. In detail, this Executor coordinates the execution of callbacks issued by the participating nodes by checking the incoming messages from the DDS queue and dispatching them to the underlying threads for execution. Currently, the dispatching mechanism is very basic: the Executor looks up wait queues, which notifies it of any pending messages in the DDS queue.
243
243
244
-
If there are pending messages, the Executor executes the corresponding callbacks one after the other, which is also called round-robin to completion. In addition, the Executor also checks for events from application-level timers, which are always processed before messages. There is no further notion of prioritization or categorization of these callback calls. Moreover, the ROS~2 Executor from rclcpp in its current form does not leverage the real-time capabilities of the underlying operating system scheduler to have finer control on the execution order. The overall implication of this behavior is that time-critical callbacks could suffer possible deadline misses and degraded performance since they are serviced later than non-critical callbacks. Additionally, due to the round-robin mechanism and the resulting dependencies it causes on the execution time, it is difficult to determine usable bounds on the worst-case latency that each callback execution may incur [[CB2019](#CB2019)].
244
+
If there are pending messages, the Executor executes the corresponding callbacks one after the other, which is also called round-robin to completion. In addition, the Executor also checks for events from application-level timers, which are always processed before messages. There is no further notion of prioritization or categorization of these callback calls. Moreover, the ROS2 Executor from rclcpp in its current form does not leverage the real-time capabilities of the underlying operating system scheduler to have finer control on the execution order. The overall implication of this behavior is that time-critical callbacks could suffer possible deadline misses and degraded performance since they are serviced later than non-critical callbacks. Additionally, due to the round-robin mechanism and the resulting dependencies it causes on the execution time, it is difficult to determine usable bounds on the worst-case latency that each callback execution may incur [[CB2019](#CB2019)].
245
245
246
-
To address the aforementioned common processing patterns found in robotic applications with the event-driven ROS~2 execution scheme, we have developed a very flexible approach in micro-ROS named *rclc Executor*[[SLL2020](#SLL2020)].
246
+
To address the aforementioned common processing patterns found in robotic applications with the event-driven ROS2 execution scheme, we have developed a very flexible approach in micro-ROS named *rclc Executor*[[SLL2020](#SLL2020)].
247
247
248
248
It supports three main features: First, a *trigger condition* allows to define when the processing of a callback shall start. This is useful to implement sense-plan-act control loops or more complex processing structures with directed acyclic graphs. Second, a user can specify the *processing order* in which these callbacks will be executed. With this feature, the pattern of sensor fusion with multiple rates, in which data is requested from a sensor based on the arrival of some other sensor, can be easily implemented. Third, the rclc Executor allows to set scheduling parameters (e.g., priorities) of the underlying operating system. With this feature, prioritized processing can be implemented. Third, for periodic applications, the *LET Semantics* has been implemented.
249
249
@@ -256,7 +256,7 @@ Based on the real-time embedded use-case as well as the processing patterns in m
256
256
257
257
These features are now described in more detail.
258
258
259
-
The rclc Executor supports all event types as the default ROS~2 Executor, which are:
259
+
The rclc Executor supports all event types as the default ROS2 Executor, which are:
The rclc Executor has been presented at the workshop 'ROS~2 Executor: How to make it efficient, real-time and deterministic?' at [ROS World 2021](https://roscon.ros.org/world/2021/) (i.e. the online version of ROSCon)[[S2021](#S2021)]. A [Reference System](https://github.com/ros-realtime/reference-system) for testing and benchmarking ROS Executors has been developed for this workshop. The application of the rclc Executor on the reference system with the trigger condition can be found in the [rclc-executor branch of the Reference System](https://github.com/ros-realtime/reference-system/tree/rclc_executor).
529
+
The rclc Executor has been presented at the workshop 'ROS2 Executor: How to make it efficient, real-time and deterministic?' at [ROS World 2021](https://roscon.ros.org/world/2021/) (i.e. the online version of ROSCon)[[S2021](#S2021)]. A [Reference System](https://github.com/ros-realtime/reference-system) for testing and benchmarking ROS Executors has been developed for this workshop. The application of the rclc Executor on the reference system with the trigger condition can be found in the [rclc-executor branch of the Reference System](https://github.com/ros-realtime/reference-system/tree/rclc_executor).
0 commit comments