← Labs

Latest-At: A Time Cursor Over Robot Streams

Scrub through a robot's recording and see what every sensor was saying at that moment, and how old each of those readings already was.

Each row below is one sensor on a robot, and the dark vertical line is the moment you are looking at. The sensors never report at the same instant, so “what was true at this moment” really means: for each sensor, its newest reading at or before the line. Databases call this an as-of join.

What you are looking at

Ten seconds of a small robot’s recording. The pose estimate arrives 50 times a second, the camera 15, the lidar 10. Object detections arrive whenever the detector finishes, and the robot’s mode is only written when it changes. Each tick on a row is one reading. The large dot on each row is the answer for the current moment: that sensor’s newest reading at or before the line. The dashed line from the dot to the line is its age.

The card lists those answers together, which is what a replay tool shows you as “the robot at this moment.” Its second line is the strawman: a lookup for readings at exactly that instant. It almost always finds nothing, because nothing lines up.

Old is not the same as missing

Every row has a shaded band behind the line, and that band is how old a reading may be before you should stop trusting it. A pose that is 20 milliseconds old is where the robot is. A pose that is 800 milliseconds old is where the robot was, and drawing it as current would be lying. Drag the line into the gap in the pose row, between about 6.4 and 7.9 seconds, and watch its answer slide out of the band and turn red.

The limit is different for every sensor, and the store cannot choose it. Only the consumer knows that a pose tolerates a fifth of a second and a mode flag tolerates minutes. So the query returns the age along with the value and leaves the judgment to whoever asked.

How the answer is found

Click any row to see its lookup at the bottom. Each sensor’s readings are stored sorted by time, in chunks of 32, and every chunk records the time of its first and last reading. That list of ranges is the index, and it is tiny. A lookup reads the index to pick the one chunk that can hold the answer, then binary-searches inside it. For the pose that is a handful of index entries and five comparisons, and no other sensor’s data is read at all. That is why scrubbing through hours of recording can feel instant.

This is a single-writer, in-memory model with no deletes. A real store also has to handle data that arrives late and readings that were explicitly cleared.