Version 1.
12 DAYS · 22 TASKS · ESP32 + 18 SERVOS · USB SERIAL · WALK 1 m
Goal: from a cold start, send F over USB serial and the robot walks
1 metre forward in under 30 seconds on a tripod gait without falling. S stops it.
LiPo below 7.2 V auto-halts the system with a buzzer. That's V1. Everything else (vision,
autonomy, personality, Telegram, Pi 5) is later.
01 · Build calendar (12 days)
| Day | Phase | What you ship that night |
|---|---|---|
| Day 0 | A · Pre-flight | Bench safe, BOM inventoried, ESP32 blinks + prints boot banner |
| Day 1 | B · Power harness | Buck output stable at 6.0 V under 5 A; LiPo charged + stored in bag |
| Day 2 | B · First PWM | I²C scan finds 0x40 + 0x41; one servo sweeps on command |
| Day 3 | B · All servos | All 18 servos pass individual bench test; duds flagged |
| Day 4 | C · ServoBus + trims | ServoBus.setAngle() works; per-servo trims captured |
| Day 5 | C · IK | Leg IK math passes host unit tests |
| Day 6 | D · One leg | One leg assembled, foot traces a 3D path correctly |
| Day 7 | D · Remaining legs | All 6 legs assembled and calibrated |
| Day 8 | D · Integration | All servos wired; robot stands on its own |
| Day 9 | E · In-air gait | Tripod gait alternates correctly while suspended |
| Day 10 | E · First step | Robot takes one weight-bearing step on the floor |
| Day 11 | F · CLI + LVC | F/B/L/R/S commands work; LVC trips at 7.2 V |
| Day 12 | F · ACCEPTANCE | 1-metre walk passes; e-stop verified live |
02 · Phase A — Pre-flight (Day 0)
/dev/cu.usbserial-* appears. Create firmware/platformio.ini with the esp32dev and native environments and the Adafruit PWM Servo Driver lib. Add a 1 Hz blink to main.cpp with a boot banner.HEXAPOD V1 / boot / hello at 115200.03 · Phase B — Power + first PWM (Days 1–3)
main.cpp.0x40 and 0x41 both reported every scan cycle.docs/servo-test-log.md.04 · Phase C — Servo abstraction + IK (Days 4–5)
ServoBusServoBus.h/.cpp wrapping both PCA9685s. Single API: setAngle(idx 0..17, deg), center(idx), centerAll(), disableAll(). Reads per-servo trims from data/trims.h. (Full code in the markdown plan.)ServoBus; no other channel twitches.kServoTrim[] in data/trims.h. Re-verify.ServoBus.center().Leg.h/.cpp with 3-DOF planar IK (coxa rotation + femur/tibia 2-link planar). Native unit tests under test/test_leg_ik/. Run on host: pio test -e native.pio test -e native reports 2/2 passing.05 · Phase D — Mechanical build (Days 6–8)
center(0..2); tune one tooth or update trim if neutral pose is off. IK demo: foot lands within 5 mm of commanded XYZ.main.cpp, call bus.centerAll(), then idle. Power up with the robot in the air, then lower it onto a flat surface. Tune trims one last time if a leg looks off.centerAll().06 · Phase E — Gait (Days 9–10)
Body — IK-based neutral stanceBody.h/.cpp holding the 6 Leg objects with their mount angles. stand() commands every foot to neutral via IK. Hook into main.cpp.Body::tick() with the tripod state machine: legs 0/2/4 alternate with 1/3/5; swing legs lift 20 mm, push legs sweep ±30 mm. Hard-code Forward in setup(). Hold the robot in the air and verify the alternation visually.Forward hard-coded. Should take 1+ tripod steps. Tune: drop kStrideMm 30 → 20 if it slips; drop kLiftMm 20 → 12 if it tips.07 · Phase F — Control + safety (Days 11–12)
Cli.h/.cpp: reads single characters from Serial, dispatches F/B/L/R to Body::setCommand() and S/\n/\r to Stop. Plug into loop().Power.h/.cpp: reads the divider, returns isLow() at < 7.2 V. In loop(), on low: stop, disableAll(), print LVC!, halt forever.T22 · ACCEPTANCE — 1-metre walk
F. When the front of the robot crosses the 1 m mark, send
S. Note elapsed time. V1 passes if:
- Robot walked ≥ 1 m
- Elapsed time < 30 s
- Robot did not fall
Shalted it within one gait phase- LiPo still above 7.5 V at the end
All five pass → V1 is done. Commit firmware, take the hero shot, tick off Phase 1 in the companion site, and start dreaming about the Pi 5 brain.
08 · What V1 explicitly does NOT include
Held back to keep the build shippable in 12 days. All of these belong to V2 and beyond: Bluetooth / WiFi gamepad control · FPV camera · obstacle avoidance · IMU stabilization · autonomous patrol · personality / mood state · Telegram messaging · LLM agent loop · Pi 5 brain · charging dock. The architecture is set up to absorb all of them without rebuilding V1 — the ESP32 stays as the spinal cord, a Pi 5 will join later as the brain.
Tonight is Day 0 · Task 1. Lay out the BOM, photograph it, set up the bench, and confirm the safety kit is in arm's reach.
The complete plan with full code for every firmware task is in
docs/superpowers/plans/2026-05-17-hexapod-v1-walking-build.md. This HTML is the
readable map; the markdown is the workshop manual you keep open in another tab while you build.