CallbackIsolatedExecutor#
CallbackIsolatedExecutor is a ROS 2 executor — and a matching component container — that assigns a
dedicated OS thread to each CallbackGroup, enabling per-callback scheduling control (policy,
priority, and CPU affinity) handled entirely by the Linux kernel.
It is a standalone rclcpp-based package: it requires no changes to rcl or rclcpp and can be
installed and used on its own.
Why#
Standard ROS 2 executors share a pool of threads across callbacks — you cannot control which callback runs on which CPU or at what priority.
Standard Executor: CallbackIsolatedExecutor:
CallbackGroup A ─┐ CallbackGroup A → Thread (FIFO, prio=90, CPU0)
CallbackGroup B ─┼→ Thread Pool CallbackGroup B → Thread (FIFO, prio=80, CPU1)
CallbackGroup C ─┘ CallbackGroup C → Thread (CFS, nice=0)
No per-callback control Full OS-level scheduling control
With CallbackIsolatedExecutor, each CallbackGroup maps to exactly one OS thread. Scheduling is then
delegated to the Linux kernel: you assign SCHED_FIFO, SCHED_RR, SCHED_DEADLINE, or CFS
(SCHED_OTHER / SCHED_BATCH) parameters per CallbackGroup through a single YAML file, applied by the
cie_thread_configurator.
For the design rationale and evaluation, see the RTAS 2025 paper Middleware-Transparent Callback Enforcement in Commoditized Component-Oriented Real-Time Systems.
This package continues the development of sykwer/callback_isolated_executor, the original implementation accompanying that paper.
Supported Environments#
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble (only with the rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy Jellyfish) |
This reflects the current status; support is expected to expand in the future.
Pages#
- Integration Guide — Build, install, switch the executor, and set up the thread configurator
- YAML Specification — Complete reference for the thread configuration file
- Non-ROS Threads — Managing scheduling for threads outside the ROS 2 executor
- Tutorial — End-to-end walkthrough with the sample application
- Comparison with Other Executors — Real-time properties versus other ROS 2 executors
Relation to Agnocast#
Agnocast provides an Agnocast-compatible port of this
executor (agnocast::CallbackIsolatedAgnocastExecutor) that additionally schedules Agnocast's zero-copy
callbacks. If you use Agnocast, refer to the
CallbackIsolatedExecutor section of the Agnocast documentation.
This site documents the original, rclcpp-only CallbackIsolatedExecutor.
Citation#
If you find CallbackIsolatedExecutor useful in your research, please consider citing:
T. Ishikawa-Aso, A. Yano, T. Azumi, and S. Kato, "Work in Progress: Middleware-Transparent Callback Enforcement in Commoditized Component-Oriented Real-Time Systems," in Proc. of 31st IEEE Real-Time and Embedded Technology and Applications Symposium (RTAS), 2025, pp. 426–429.
BibTeX
@inproceedings{ishikawa2025work,
title={Work in Progress: Middleware-Transparent Callback Enforcement in Commoditized Component-Oriented Real-Time Systems},
author={Ishikawa-Aso, Takahiro and Yano, Atsushi and Azumi, Takuya and Kato, Shinpei},
booktitle={Proc. of 31st IEEE Real-Time and Embedded Technology and Applications Symposium (RTAS)},
pages={426--429},
year={2025},
organization={IEEE}
}