Hi Open-RMF community,
I have working on a small proof-of-concept called CLIM — Causal Link Integrity Middleware. The goal is to explore whether a robot can report not only that it is delayed, but also why the current command-feedback execution window is no longer trustworthy.
This started from a ROS 2 /cmd_vel guard experiment, ros2_kinematic_guard, where I tested bad Wi-Fi / 5G timing effects such as stale commands, burst delivery, near-zero dt, and command-feedback phase mismatch.
After reading the Open-RMF next-generation traffic management discussion around ~/delay, progress reporting, and Plan Executor / Plan Server coordination, I wanted to test whether CLIM could act as an advisory-only evidence provider.
CLIM does not publish Open-RMF messages directly. Instead, it emits structured JSON that a Plan Executor or fleet adapter could choose to map into future RMF delay/progress interfaces.
1. Command Execution Integrity
This is the main CLIM signal. It asks:
Can the Plan Executor still trust this execution episode?
Example from a Wi-Fi collapse stress test:
{
"commandExecutionIntegrity": {
"residual": 5.391,
"residualType": "kinematic_consistency",
"latencyClass": "CRITICAL",
"causalAlignment": "BROKEN",
"executionState": "RESYNCING",
"guardAction": "BRAKE_AND_RESYNC",
"dominantCause": "PHASE",
"recommendedVehicleResponse": "RESYNC_REQUIRED",
"suggestedFleetAction": "HOLD_NEW_ORDERS",
"cleanWindowCount": 0,
"requiredCleanWindowCount": 5
}
}
In this case, CLIM is not simply saying:
The robot is late.
It is saying:
The command-feedback chain is no longer causally aligned.
The dominant cause is PHASE mismatch.
The robot is in RESYNCING.
The fleet layer should hold new orders until clean execution windows are observed.
As shown in the integrity report, CLIM automatically suggests HOLD_NEW_ORDERS when the causal residual spikes, providing a safety buffer for the fleet controller.
2. Delay Advisory
This is an Open-RMF-style advisory signal. It does not claim to be an official RMF ~/delay message.
It simply tells the Plan Executor:
This robot may need to report delay or hold progress near this progress point.
Example:
{
"delayAdvisory": {
"advisoryOnly": true,
"shouldReportDelay": true,
"planId": "demo_plan_001",
"progressPoint": 0.63,
"indefiniteDelayCandidate": true,
"delayConfidence": 0.75,
"cause": {
"code": "EXECUTION_INTEGRITY_DEGRADED",
"message": "Command-feedback causal alignment is broken. Dominant cause: PHASE.",
"dominantCause": "PHASE"
},
"recommendedVehicleResponse": "RESYNC_REQUIRED",
"suggestedFleetAction": "HOLD_NEW_ORDERS"
}
}
3. Evidence Window
This is the black-box record. It captures the short command-feedback window that caused the advisory.
Example:
{
"evidenceWindow": {
"progressPoint": 0.63,
"causalAlignment": "BROKEN",
"latencyClass": "CRITICAL",
"residual": 5.562,
"dominantCause": "TIMEFLOW",
"statusSequence": [
"RESYNCING",
"RESYNCING",
"RESYNCING"
],
"components": {
"timeflow": 5.0,
"phase": 0.923,
"cmd_odom": 0.033
}
}
}
The idea is to make delay reporting explainable instead of only timeout-based.
For example:
Was the robot actually blocked?
Was the command stream stale?
Was feedback lagging?
Did the command-feedback phase break?
4. Resync State
This explains whether the robot is still waiting for clean execution windows before being trusted again.
Example:
{
"resyncState": {
"state": "RESYNCING",
"latencyClass": "CRITICAL",
"causalAlignment": "BROKEN",
"cleanWindowCount": 0,
"requiredCleanWindowCount": 5,
"isReleaseReady": false,
"advisoryOnly": true
}
}
This could help a Plan Executor decide whether to continue, wait, request replanning, or hold progress.
Why I think this may be relevant to Open-RMF
My understanding is that future Open-RMF traffic management interfaces are moving toward clearer separation between:
- Plan Server
- Plan Executor
- robot adapter / driver
- progress reporting
- delay reporting
- resynchronization
CLIM tries to provide a quantitative signal for one question:
Should the Plan Executor still trust this execution episode?
It is intentionally advisory-only.
The Plan Executor or RMF adapter should remain responsible for deciding whether to publish a real delay, pause, request replanning, or continue.
Repository
GitHub:
CLIM(Causal Link Integrity Middleware)
Related ROS 2 guard experiment:
Stop “Ghost Commands” on Bad Wi-Fi: ros2_kinematic_guard for /cmd_vel safety
I would appreciate feedback from Open-RMF developers:
- Could a
CommandExecutionIntegrity/DelayAdvisorysignal be useful before publishing a real~/delay? - Would an
EvidenceWindowbe useful for debugging multi-vendor execution issues? - Is this better positioned as a Plan Executor plugin, a robot adapter-side diagnostic node, or a separate observability layer?