none node · 2026-06-11 investigation robot

# robot-ooda-speed

Two axes from Jake's memo: cut time per loop · do more per loop. Timings below are measured from last night's run artifacts, not vibes.

You are here

[[robot-framework]] ▸ this node measures the loop, then ranks levers to tighten it / fatten it ▸ feeds the next live session's harness + the font pipeline

Measured: the live loop runs at 0.02 Hz — median 47–53s per step (n=105 real photo gaps, three 2026-06-10 sessions). Of each ~50s: camera ~0.8s, robot motion 1–5s, Fable thinking ~44s. The idle dash-pi gemini loop already does 3.7s/step (real transcripts) — 13× faster, parked since May.

# | axis | lever | expected saving | effort | risk
--- | --- | --- | --- | --- | ---
1 | time | Demote routine strokes to the fast loop — bake letters/ calibration into dash-pi/system.md; Fable = escalation only | 50s → ~5s per routine step (10×) | M | M — cheap model's camera calls can be overconfident (knock R5/R6); Fable keeps verify checkpoints
2 | time | Telemetry-first observe — /telemetry yaw (~100 units/°) + prox answer "did the turn land" in ms | skips whole 50s vision cycles | S | L
3 | more/loop | Batched stroke programs w/ guard conditions — one JSON per round (cmds + expected yaw/prox); server aborts on deviation. Knock rounds already converged to 3-command shape | 3–6× fewer model calls | M | M — deliberately deletes system.md's "no chains" rule
4 | more/loop | Deterministic glyph executor + sim preview (Jake's memo idea) — LLM only at glyph boundaries; preview predicted ink in sim before inking | ~8min/glyph → ~40s | M | L — pen-lift makes batch mistakes inkless
5 | time | Persistent server-side camera + /record — kill cold open + 3 warmup frames per snapshot | 0.5–2s/loop + the thermal fix | S | L
6 | both | Phone-on-head sensors (BUILT tonight: phone-head/, web) — 5 Hz absolute compass + accel/gyro, ~1.4 fps POV cam, /history accel forensics = hit-vs-stall detector | turn-verify: 50s vision cycle → ~0.2s compass read; solves hit-vs-stall | S (built) | L
7 | time | Persistent model session / prompt cache — stop cold-spawning `pi --no-session` per step | est 0.5–1.5s/step + cost | S | L
8 | more/loop | Macro-verbs — stroke(bearing,len), spotlight_then_shoot, pen_up/down; plan in maneuvers not motor packets | fewer, richer actions | S | L
9 | more/loop | Think-during-act pipelining — plan step n+1 during the 1–5s motion; diff-check prediction gates the prequeue | hides motion time entirely | M | M
10 | time | Crop to paper bbox before sending — cv2 diff-crop already specced in letters/07 | est 20–40% off vision latency | S | L

Prior art says split the brain, not shrink it: dual-system VLA robots run a 7–9 Hz VLM over a 200 Hz reactive policy, asynchronously (Figure Helix, async fast-slow VLA). Our analog: Fable = System 2, deterministic executor + phone IMU guards = System 1 — and the blown-up loop stays walkable: every round still emits photos, predictions, and a checkable plan.