Problem
An Ackermann-steered vehicle had to hold a lane from a single forward camera, with steering commands issued over a serial link to the microcontroller — no LiDAR, no GPS, no prior map.
What was the vehicle for, and what failed before this system existed? One paragraph on why lane-holding was the bottleneck.
Constraints
- 50 ms per frame — the control loop runs at 20 Hz, and a late frame is a missed actuation, not a slow one.
- One camera — no depth, no redundancy — every geometric estimate comes from a single monocular view.
- Serial actuation — steering goes out over PySerial, so loop timing is bounded by the link, not just by vision.
- Commodity compute — no GPU inference budget, so the pipeline is classical CV by necessity rather than preference.
Add the hardware: which board, which camera, what serial baud rate? Those specifics are what make constraints credible.
Architecture
Replace the stage sketch with the real pipeline — ideally a Mermaid diagram rendered to static SVG. Name each stage as it exists in your code.
Key Decisions
Two or three decisions, each naming the alternative you rejected — e.g. pure pursuit over Stanley control, and why. This section is what separates a writeup from a README.
Measured Outcome
Frame time against budget
A 20 Hz loop allows 50 ms per frame. Mean processing took 7.9 ms.
The numbers are already provenance-tagged. Add how the benchmark was captured: one run or many, which track, and what counted as a detection.
What I'd Improve Next
The highest-value section on the page. What breaks first — night, rain, sharp curvature, occlusion? Name the failure mode you already know about.