Javelina-RT — Humble Desert Pork¶
What's in this version¶
Run periodic tasks over DDS¶
Define a task as a C++ class, declare its frequency, and the framework handles when it runs. Each task has typed subscriptions and publications declared at compile time. Data flows in before Execute() and out after — no manual pub/sub calls, no scheduler logic in application code.
Typed publish/subscribe¶
Topics are declared with a type, a name, and a queue depth. Type mismatches and unknown topic names are caught at compile time. Incoming samples are timestamped and accessible in reverse-chronological order. The data path has no runtime string comparison.
Typed parameters with static defaults¶
Parameters are declared as tag types with typed defaults. A task inherits a ParametersProvider and calls GetParameterValue<Tag>() — returns a scalar or an array, depending on the declaration. No string keys, no dynamic lookup.
Declare topics and parameters in YAML, get C++ headers¶
Topics and parameters are declared in YAML. The generator produces typed C++ headers: topic name constants, TopicList type aliases, and a fully instantiated ParametersProvider with defaults. BUILD integration is a one-liner macro.
What comes next¶
Real-time scheduling¶
ExecutionEngine is a cooperative scheduler — a single background thread sleeping on a condition_variable. It's the equivalent of a ROS2 timer callback: adequate for most use cases, not hard real-time. Integration with cactus-rt is the path to actual real-time guarantees: SCHED_FIFO, CPU isolation, and latency tracking.
Parameter updates over the network¶
SetParameterValue is intentionally protected. The hook for a parameter server is in place; the transport is not. A future version will allow parameters to be updated at runtime over a lightweight RPC channel — without restarting the application.
DDS context thread safety¶
DDSContextProvider is safe under the current assumption of single-threaded application startup. Before extraction as a standalone library, the contract needs to be either enforced explicitly or the implementation made thread-safe.