§ SENSING & LOOP
The loop is closed. The default walker runs blind — the grid never reads the legs it moves — but a controller that feels its body now recovers from a shove the open-loop one can't.
The evolved controller walking the real fly, live. It runs blind: the grid emits the same rhythm every control step, never reading the legs it just moved — the proprioception overlay shows exactly the body state it throws away.
The loop, closed
The forward path is real and wired (green): the 8×8×4grid ticks once per control step, channel 0 of the top-left sub-grid becomes 42joint targets, and the MuJoCo fly steps at 250 Hz. The return arc — 42 joint angles and 6 foot contacts written back into the cells — is the one thing a closed loop adds, and it is now solid: wired, trained, and live across the behaviors. (The default walker above still runs it open — that is the null model — but the closed controller is built, and its A/B is one tab over.) The same controller slot also takes the top rung, the real connectome brain; that loop is the Embodied page.
Open vs closed, settled
The two loops walk identically on flat ground and diverge exactly when something goes wrong. Shove the fly mid-stride — a lateral impulse, or yank a foot — and the open-loop walker above has no error signal to correct against: it plays a fixed motor program, so when the world pushes back, nothing in the grid knows. A controller that feels the disturbance in its proprioceptive input can adjust.
That closed loop is built and trained, and the A/B is live: on the Perturbation tab a controller that feels its body halves its post-shove heading error (56.6°→26.5°) against this open-loop one. This tab shows the body state the open loop throws away; that one shows what feeling it back buys.
What we chose
Open-loop. The controller runs blind. The grid never receives body state — it emits the same rhythm every control step regardless of what the legs actually do. No proprioception, no reflexes, no error correction.
Why
Simplest possible first cut. Stripping out feedback isolates one question: can a single local rule, shared across an 8×8×4 grid (660 params), generate a coordinated gait at all? It can — CMA-ES found one worth 86.6 mm at native gain. Sensing is the next thing to add, not the thing to start with.
Alternatives
Feed proprioception in as extra input channels (joint angles, foot contacts appended to each cell’s state), or carve out dedicated sensor cells in the grid whose state is body-driven rather than rule-driven. Or wire fast local reflex loops — contact triggers a stereotyped correction without going through the whole controller.
The biological / frontier version
Real flies are saturated with mechanosensors — campaniform sensilla (cuticular strain), hair plates (joint position), chordotonal organs (stretch and vibration) — feeding continuous body state into the VNC. Closing the loop is done (Stage 2): the open-loop gait survives flat ground, but only a controller that feels can recover from a shove — now wired and trained as the first closed-loop behavior, live on the Perturbation tab (it halves post-shove heading error). It's the second rung on the Embodied ladder, between the null model and the real connectome.
The math behind this — equations and constants — is in the appendix.