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, so 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.