Robotics & Autonomous SystemsField engagement

A high offline score says little about a robot in a world the simulator never modelled, running on a clock the benchmark never measured.

Fractional CTO and lead engineer.
hardware
in the loop
every cycle
inside the deadline
real
distribution, not a benchmark
SensorsPerceptionStateControlActuationthe physical world
Perception feeds control on a clock, and the loop closes through the physical world. It only works if it fits inside the deadline, every cycle.
What was at stake

When a robotics system fails in the field, it does not produce a worse benchmark. Depending on the application it produces a collision, a stuck robot, a safety incident, or a deployment nobody trusts to run unattended. An untrusted robot is not deployed at all, and the programme has spent its budget on something that will not ship.

How this works

A robot's perception is one stage of a control loop, and a control loop runs on a clock.

A robot that acts on what it senses is running a loop. Sensors capture the world, perception turns raw data into a description of what is there, state estimation combines that description with what the robot knows about its own motion, control decides what to do next, and actuators do it. The world changes in response and the loop runs again. It runs at a fixed period, and each pass has to finish before the next one is due.

That clock changes what good perception means. On a benchmark a perception model is scored on accuracy alone, and a slower, larger model that scores higher counts as a better model. In the loop, a result that arrives after the deadline is worse than useless, because the controller either acts on stale information or acts on nothing. Averages hide this. A stack that uses most of its budget on a typical cycle and occasionally overruns will occasionally do the wrong thing, and in a closed loop one wrong action shapes the next cycle's input, so errors can feed on themselves. Engineers therefore budget for the worst case and reserve headroom for jitter, the variation from one cycle to the next in how long each stage takes.

The second reality is the gap between the data a system is developed on and the world it meets. Simulators and benchmark datasets contain the conditions someone thought to include. The field contains glare, dust, reflections, unusual objects, and sensors that drift with temperature and age and differ slightly from one unit to the next. A model's score on its test set says how well it handles the test set. It says little about how far performance falls on conditions the test set lacks, and that fall cannot be predicted from the score. Robustness to those conditions usually costs computation, which is exactly what the deadline is short of, so the two constraints have to be traded against each other by design.

Sensors
real units, real calibration, real drift
Perception and inference
raw data into a description of the scene
State estimation
perception fused with the robot's own motion
Control
decides the next command
Actuation
the world responds, and the loop runs again
Jitter headroom
reserved up front, never spent by a stage
A late answer is a wrong answer. The budget is set for the worst cycle, not the typical one.
FigureOne pass of the loop, which has to finish inside the control period on every cycle. The period is divided across these stages before anything is built, with headroom held back for jitter, because a stage that is quick on average and late now and then makes the robot wrong now and then.
The constraint

Two realities shaped everything, and neither appears on a leaderboard. The first is the distribution. The field is full of conditions the simulator never modelled, so a high offline score does not transfer, and how far it falls short cannot be predicted from the score itself. The second is the clock. Perception has to finish inside the control loop period on every cycle, with headroom left for jitter, and a stack that fits on average but overruns now and then does the wrong thing now and then, which in a closed loop is the whole problem. The two fight each other, because robustness usually costs computation and computation is exactly what the deadline lacks.

perception + inference
control + actuation
jitter headroom
where the design lives
must not be eaten
One control loop period is the whole budget. Perception that does not fit it is not deployable, whatever its offline score.
Where it usually breaks

Robots that score well offline fail in the field in two predictable ways.

The first is distribution. Development data covers what someone thought to collect or simulate, and the field always contains more. A perception stack can perform superbly on its test set and degrade sharply on lighting, surfaces or objects it has never seen, and nothing in the offline score warns of it. The failure shows up as a robot that hesitates, misjudges a distance, or stops for something that is not there.

The second is time. Perception is usually developed and evaluated off the robot, where nothing has a deadline. Once it runs on the robot, sharing compute with everything else, its latency varies, and the tail of that variation is what matters. Overruns are rare, so they rarely show in a demonstration, and they are exactly what makes a robot untrustworthy unattended. Both failures tend to belong to nobody. The perception team owns the score, the controls team owns the loop, and the gap between them is where the robot fails.

01

The benchmark that did not transfer

A model with a high offline score meets conditions its data lacked and degrades by an amount the score could not predict.

02

The occasional overrun

Perception fits the cycle on average and misses it now and then. The controller acts on stale or missing information, and in a closed loop the error compounds.

03

The drifting sensor

Calibration shifts with temperature, age or handling, and the software keeps trusting the assumptions it was built on.

04

Unit-to-unit variation

The system is tuned on one sensor and deployed on others that differ slightly. A hardware property surfaces as a software failure that is nobody's ticket.

05

Robustness that broke the clock

A heavier model is added to fix field failures and pushes the loop past its deadline, trading one failure for another.

Offline benchmark
Curated test distribution
the conditions someone chose to include
No deadline
a result is correct whenever it arrives
Ideal sensor data
no drift, no unit variation
Accuracy is the whole score
bigger and slower can still win
On the robot, in the field
Conditions nobody modelled
glare, dust, the unusual object
A hard deadline every cycle
a late answer is a wrong answer
Sensors that drift and vary
a hardware property, felt in software
Behaviour in the loop is the score
the only one operators ever see
Every item on the right is invisible from the left.
The engagement was designed around the right-hand panel from the first day.
FigureThe same perception stack in two settings. On the left, everything that makes a model look good. On the right, everything the robot actually faces. The score earned on the left does not predict behaviour on the right, and the size of the gap cannot be read from the score.
The fork

The reflex, and the fix.

Road not taken

Optimise offline accuracy

Pull

It is the standard metric, and it improves cleanly with more model and more training, which makes it satisfying to work on.

Why not

A higher score survives neither the gap between simulation and the field nor the loop's deadline.

Road taken

Build for the real environment and its timing

Accepted

More work on robustness, sensor reality, latency and integration, and possibly a lower offline score.

Bought

A system that holds on the real distribution, inside the loop's deadline.

Decision

Make it work on the robot, in the world. The leaderboard is a proxy, and here it was the wrong one.

How it was built
01Sensors
›
02Perception
›
03State estimate
›
04Control
›
05Actuation
01

Perception and control as one real-time loop

Perception feeds control on a clock, and the loop closes through the physical world. It was built and tested with hardware in the loop, because that is the only place the real failure cases appear. A simulator cannot produce the failure a particular sensor shows at a particular temperature if nobody modelled it.

02

The timing budget set before anything was built

The loop period was divided explicitly across sensing, perception and inference, state estimation, control and actuation, with headroom reserved for jitter. This is an architectural input. Get it wrong and no amount of later optimisation recovers it.

03

Sensor reality as a first-class concern

Calibration, unit-to-unit variation and degradation over time, and what the system does as the real sensors drift away from the assumptions the software was built on. This is a hardware property surfacing as a software failure, which is why it is so consistently nobody's ticket.

Inside the key decisions

What each choice cost, and what it bought.

AAllocating the timing budget first

Perception could have been built for accuracy and made fast afterwards, which is the usual order. The loop period was divided across sensing, perception and inference, state estimation, control and actuation before any of them was built, with headroom reserved for jitter. That limited how much model perception could afford from the outset. It also meant the stack could not be discovered too slow at integration, a failure that later optimisation rarely recovers from.

BTesting with hardware in the loop

Simulation is cheaper, faster and repeatable. It is also blind to failures nobody modelled, such as how a particular sensor behaves at a particular temperature. Building and testing with real hardware in the loop was slower and harder to automate. It is the only place those failures appear, and finding them on a bench costs far less than finding them in the field.

CMaking sensor reality somebody's job

Calibration, unit-to-unit variation and degradation over time sit between hardware and software, so they tend to belong to nobody. Treating them as a first-class concern meant designing for what the system does as real sensors drift from the assumptions it was built on. That took effort away from improving the model. It addressed a class of field failure that a better model would never have touched.

DAccepting a possibly lower offline score

Work spent on robustness, latency and integration is work not spent raising the benchmark number, and the offline score may well be lower as a result. That cost is visible, and it is easy to read as going backwards. The return is a system that holds on the real distribution, inside the deadline, which is the only performance the robot's operators will ever experience.

The gate
Does this stage still fit its share of the loop period, under load, with jitter headroom intact?
Integrate and test with hardware in the loop
the next check is the real sensors, not the simulator
Redesign the stage
never by spending the headroom
Robustness that breaks the clock is not robustness in a closed loop.
FigureThe rule that kept robustness and timing from undermining each other. Any change to perception, including one that makes it more robust, has to fit its share of the loop with the jitter headroom intact. A change that does not fit is redesigned, and the headroom is never borrowed to make room for it.
How it was measured

A single headline number hides where a system fails. This work was scored on the dimensions that actually decide whether it holds in production, measured on real, held-out cases rather than the demo path.

Behavior on the real distributionLatency within the control-loop deadlineJitter headroom under loadFailure cases that appear only with hardware in the loop
Offline benchmark scorenecessary, and silent about the field
Simulationcovers only what someone modelled
Hardware in the loopwhere the real failure cases appeared
Real-distribution testingconditions drawn from the field
Timing under loadevery cycle inside the deadline, headroom intact
It holds inside the tested envelope. Novel scenarios and calibration drift remain flagged.
FigureEvidence, ranked by how much it says about the robot in the field. No figures are published for this engagement, so the measure is the set of tests the system had to pass. The upper layers are necessary and weak. The weight of the evidence sits in the lower ones.
figures

What it produces
Without this discipline

A high benchmark score that survives neither the field nor the clock, and looks like progress right up until deployment.

This system

Perception and action that hold reliably in the field, inside the control loop's timing, including the failure cases that only appeared with hardware in the loop.

real distributionreal-timehardware-in-the-loopjitter headroom budgeted
The operating envelope

What it owns, and what it hands to a person.

Handled with confidence
Conditions represented in the real-distribution test set
Operation inside the designed envelope
Timing within the loop deadline
Flagged for review
Novel scenarios
Sensor calibration drift
Out of scope by design
Guarantees outside the tested envelope
The honest limit

It holds on the conditions and failure modes it was built and tested against. A genuinely new scenario can still defeat perception. It depends on sensor calibration and on the operating envelope it was designed for, and the gap between simulation and the field has been narrowed, not closed. Anyone claiming otherwise is describing a system that has not met the field yet.

What it generalizes to

The deciding constraints were a hard timing budget and real sensor behaviour. Both sit below the model, and neither is something a perception specialist would have owned. The deadline is an architectural input, not a performance concern to deal with after the fact. The discipline carries to any system that closes a loop through the physical world, including the edge autonomy and hydraulic control work on this site.

What to take from this

A perception result that arrives after the control deadline is a wrong result. Judge perception in the loop, on the clock, and treat the leaderboard as a proxy.

Budget the loop period across every stage before building any of them, and reserve headroom for jitter. Timing problems found at integration are rarely fixable by optimisation.

An offline score says how well a model handles its test set. It cannot tell you how far performance falls on conditions the test set lacks.

Sensor calibration, unit variation and drift are hardware properties that show up as software failures. Give them an owner.

Hardware-in-the-loop testing is slower than simulation and finds the failures simulation cannot, because nobody modelled them.

How we engage

You have a system like this one.
Tell us where it stands.

Whether it is failing, not yet built, or about to meet a scale it has never seen, we can tell you what we see.

Start a conversation
mostafa@opulion.dev · Response within 24 hours · By inquiry