🤖 AI Summary
ROS 2’s publish-subscribe model lacks native support for enforcing priority and data-dependency constraints in directed acyclic graph (DAG)–structured tasks, resulting in out-of-order callback execution, inconsistent multi-input matching policies, and DAG semantics sustained solely through ad hoc programming conventions—rendering systems prone to instability and crashes. To address this, we propose the Function-as-Subtask (FasS) API: a declarative interface that explicitly models data flow via function parameters and return values, thereby enforcing DAG structure at the API level and eliminating reliance on developer discipline. We implement a native DAG-aware scheduler in Rust and design a system integration layer compatible with Linux’s sched_ext subsystem. Experimental evaluation demonstrates that FasS guarantees semantic fidelity while delivering a production-ready, real-time–capable DAG scheduling infrastructure.
📝 Abstract
The Directed Acyclic Graph (DAG) task model for real-time scheduling finds its primary practical target in Robot Operating System 2 (ROS 2). However, ROS 2's publish/subscribe API leaves DAG precedence constraints unenforced: a callback may publish mid-execution, and multi-input callbacks let developers choose topic-matching policies. Thus preserving DAG semantics relies on conventions; once violated, the model collapses. We propose the Function-as-Subtask (FasS) API, which expresses each subtask as a function whose arguments/return values are the subtask's incoming/outgoing edges. By minimizing description freedom, DAG semantics is guaranteed at the API rather than by programmer discipline. We implement a DAG-native scheduler using FasS on a Rust-based experimental kernel and evaluate its semantic fidelity, and we outline design guidelines for applying FasS to Linux Linux sched_ext.