Throughline

Blue boxes are tracked cars. The line in front of each one is where the tracker expects it to go.

Real-time multi-object tracker for Waymo Open Dataset LiDAR, written in C++. It takes a detector's 3D boxes for each scan, keeps a persistent ID on every car and pedestrian through missed detections, and forecasts each one three seconds ahead. The scene streams to Lichtblick while it runs.

Results

MOTA from Waymo's evaluator at LEVEL_2, on three validation clips. The input is CasA's published detections. Boxes under 0.5 confidence are dropped, or under 0.7 for pedestrians.

scenecarspeople
fast road, 63 km/h0.300.22
crawling through a junction0.540.57
slow turn, 21 km/h0.720.34

Most of the errors on the fast road are distant cars the detector missed. Across the three clips a frame takes 3 to 5 ms at the median and under 12 ms at the 99th percentile, against 100 ms between scans.

Method

Each track runs an extended Kalman filter over position, heading, speed and turn rate. New boxes are matched to predicted tracks with the Hungarian algorithm, and pairs that are too far apart are rejected. A track is confirmed after 3 hits and dropped after 5 misses.

Waymo LiDAR scansand detector boxesevery frameExtended Kalman filtermove each known objectby its speed and turn rateHungarian algorithmmatch boxes to objects,far-apart pairs thrown outMatchedupdate with the new boxBox with no matchstart a new trackObject with no matchcoast, drop afterfive missesTracksID, position,speed, turn ratenext frameLive 3D viewScored by Waymo'stracking metrics
GitHub ↗