A prototype is tuned by the person who built it. A fleet has to work when nobody who understands it is in the building, which is a fundamentally different software problem.
The prototype-to-production gap in robotics is wider than in almost any other software domain, because the failure modes are physical and the environment refuses to stay constant. A prototype works because parameters were tuned for this floor, this lighting, this exact obstacle layout, by an engineer who reflexively nudges things when they go wrong. Production means a different warehouse, a floor that changes daily, lighting that shifts across a shift, operators who have not read the manual, and nobody available who can interpret a stack trace.
What has to be built to close that gap is largely infrastructure. Configuration must be per-site and versioned, not compiled in, so deploying to a new facility is a data change rather than a rebuild. Calibration has to be a repeatable procedure an operator can run, because sensors drift and a robot that needs an engineer to recalibrate does not scale. Diagnostics must be automatic and specific — a robot that stops should report why in terms an operator can act on, not with an error code requiring a lookup table.
Logging needs to capture enough state to reconstruct an incident after the fact, because you will not reproduce it on demand. And there must be a safe degraded mode: a robot that encounters something it cannot handle should stop safely and ask for help, which sounds obvious and is frequently the last thing implemented.
- Per-site versioned configuration, so a new deployment is data rather than a rebuild
- Operator-runnable calibration procedures, because sensors drift and engineers do not scale
- Diagnostics phrased for operators, not error codes requiring a lookup table
- State logging sufficient to reconstruct an incident you cannot reproduce
- A safe degraded mode that stops and escalates rather than improvising