rclc Executor. Here we introduce the rclc Executor, which is a ROS 2 Executor implemented based on and for the rcl API, for applications written in the C language. Often embedded applications require real-time to guarantee end-to-end latencies and need deterministic runtime behavior to correctly replay test data. However, this is difficult with the default ROS 2 Executor because of its complex semantics, as discussed in the previous section. First, we will analyse the requirements for such applications and, secondly, derive simple features for an Executor to enable deterministic and real-time behavior. Then we will present the API of the RCLC-Executor and provide example usages of the RCLC-Executor to address these requirements.
rclc Executor. The default ROS 2 Executor concept, as described in the previous section, is not deterministic nor has real-time capabilities. Dynamic memory allocation due to C++ default data types are very common in the rclcpp Executor. Therefore we developed an Executor for the C client library for micro-ROS, the rclc Executor. It supports deterministic execution and provides mechanisms for domain-specific scheduling for robotic use-cases. Deterministic execution is achieved by providing an API to the user, which allows the configuration of the execution order of ROS 2 callbacks. Further more, domain-specific scheduling targets the support for sense-plan-act control loops, sensor fusion of data with multiple rates and processing high-priority paths.
rclc Executor. The rclc Executor is a ROS 2 Executor based on the rcl-layer in C programming language. As discussed above, the default rclcpp Executor is not suitable to implement real-time applications because of three main reasons: timers are preferred over all other handles, no priorization of callback execution and the round-xxxxx to completion execution of callbacks. On the other hand, several processing patterns have been developed as best practices to achieve non-functional requirements, such as bounded end-to-end latencies, low jitter of response times of cause-effect chains, deterministic processing and short response times even in overload situations. These processing patterns are difficult to implement with the concepts availabe in the default ROS 2 Executor, therefore we have developed a flexible Executor: the rclc Executor.