control//state estimation//sensor fusion//delayed measurements
Delayed measurements are readings that reach a filter some time after the instant they describe, and handling them means fusing each one at its own instant instead of the instant it arrived. A GPS position typically arrives about 100 ms late, after the receiver's own processing and the serial link; a camera's visual fix later still, once the image is exposed, transferred and processed. Fused as if it were current, a 100 ms-old position on a drone flying at 10 m/s injects a metre of error, and the filter has no way to see it as noise: it looks exactly like a true discrepancy between model and world.
Delayed measurements are readings that reach a filter some time after the instant they describe, and handling them means fusing each one at its own instant instead of the instant it arrived. A GPS position typically arrives about 100 ms late, after the receiver's own processing and the serial link; a camera's visual fix later still, once the image is exposed, transferred and processed. Fused as if it were current, a 100 ms-old position on a drone flying at 10 m/s injects a metre of error, and the filter has no way to see it as noise: it looks exactly like a true discrepancy between model and world.
The fix starts before the filter. Every reading needs a timestamp taken at acquisition, on a clock shared with the other sensors (time synchronization), never the time the message reached the application; 10 ms of offset between two sensors' clocks is 10 cm of error at 10 m/s, invisible to any filter. With the timestamps in place there are two standard ways to use them.
Fuse on a delayed horizon. The filter keeps a buffer of inertial readings and runs its corrections at a point in the past, late enough that the slowest sensor's data for that instant has arrived, and then projects the estimate to the present with the buffered inertial readings. The EKF2 estimator of PX4 works this way (autopilot).
Propagate the reading to now. Push each delayed measurement forward to the current instant with the model and fuse it there (latency compensation). It costs almost nothing and often removes the largest term of a whole error budget; it is the estimation side of what a Smith predictor does for a control loop (Smith predictor).
A reading that arrives after later ones have already been fused is an out-of-sequence measurement. It is handled by keeping a short history of states and covariances and refiltering from its instant, or by a direct retrodiction formula when memory is tight.
In estimation the error usually lives earlier than the algorithm: in time and in the model.
A better receiver, a nonlinear filter or a finer tuning cannot remove a delay that was never accounted for, while a timestamp and one prediction step often can (delay as the enemy).
The latency also sets what a closed loop can do with the estimate: a position that is old when it is fused is older still when the controller acts on it (loop delay).