The parked truck that kept racking up kilometers
A truck spends the whole night in the yard. Nobody touches it. In the morning, the tracking platform says it drove thirteen kilometers.
For years we ran tracking platforms with devices from several manufacturers and with our own designs. They all reported more or less the same things: position, GPS speed, number of satellites and fix quality, ignition input and, on the better ones, an accelerometer. And all of them, sooner or later, had parked trucks that moved.
This note is about why that happens, about the filter almost everyone adds to make it stop, and about what that filter breaks without anyone noticing.
The figures in the examples are illustrative: typical values, calculated to show the mechanism. They are not measurements from those fleets.
A GPS at rest does not always give the same point
Every position a GPS reports carries an error of a few meters. Under open sky and with many satellites, the error is small. Under a sheet-metal roof, between buildings, in a parking garage or with few satellites in view, it grows: the signal arrives bounced, the satellite geometry is poor, and the position jumps ten, twenty or fifty meters while nothing moves.
On top of that come the gaps. An area with no cellular coverage makes the device store positions and send them late, all at once. A tunnel or a basement makes it lose the fix, and when it gets it back it appears somewhere else, with a straight line between the last good point and the first new one.
To the platform, all of that is movement.
Adding up points never gave the distance
The obvious way to compute how far a vehicle went is to add up the distance between each position and the next. In our experience, that figure was never reliable. And it fails in both directions.
Parked, it always adds too much. GPS error does not cancel out when you add it up: a distance is never negative, so every jump, in whatever direction, is added to the total. A device at rest for ten hours, with a position every thirty seconds and a typical error of about six meters, gives 1,200 jumps of about eleven meters: almost thirteen kilometers without the wheels turning once.
Moving, it adds too little. Between two positions, the calculation draws a straight line. A ninety-degree curve driven between two points is counted as its chord, ten percent shorter than the real path. With spaced-out positions, in a city full of turns, the real route is always longer than the computed one. And across a coverage gap, the straight line cuts through whole blocks.
The two failures do not offset each other: they depend on how much time each unit spends parked and how much on the road, and that changes from one vehicle to another and from one day to the next.
The filter everyone adds
The fix we applied, and the one almost anyone running a fleet applies, is to clip the speed:
- Below 5 km/h, the speed becomes zero and the point does not move. The parked truck stops jumping.
- Above 130 km/h, it is clipped too. For most fleets that speed is unlikely; if the GPS reports it, it is most likely a jump.
The dashboard comes out clean. Phantom kilometers drop, false alerts drop, and customers stop calling.
But it cuts both ways.
What the filter hides
Real movement below the threshold. A truck crawling in traffic, one maneuvering in a yard, one moving slowly to line up at a loading dock. And the worst case: a truck being towed with the ignition off, which is exactly what the platform should catch. With the filter, all of that is zero. It happened to us many times.
Real speeds above the threshold. If the unit really was doing 140, the clip hides a speeding event the customer wanted to see. And if it was a jump, it now shows up as a believable 130 in the middle of the trip.
The trip stops being trustworthy. That is the underlying cost. Once the filter has changed the data on arrival, there is no way to know what really happened. The filter did not remove the error: it moved it somewhere it can no longer be seen.
What I would do today
Decide with several signals, not one threshold. GPS speed alone cannot tell a jump from slow movement. Ignition, accelerometer, number of satellites and fix quality, together, can: with the ignition off, no vibration and poor fix quality, a twenty-meter jump is noise. With sustained vibration and the position drifting away in one direction, it is movement, even at 3 km/h and even with the ignition off. That combination is the towing alert.
Anchor the point, do not erase the speed. When the unit parks, pin its position and ignore jumps within a radius. If the position leaves that radius and stays out, that is real movement, and it gets reported.
Keep the raw data. The filter belongs in the layer that displays, not the one that receives. If the criteria change tomorrow, or a customer asks what happened on Tuesday at three in the morning, the original data is still there to recompute.
Separate “zero” from “unknown”. A speed clipped to zero says the vehicle was stopped. A position with poor fix quality should say nobody knows. They are not the same, and the report should not mix them.
Do not measure distance with GPS when there is something better. If the vehicle provides its odometer over the data bus, that is the number. If there is only GPS, add up only what was covered while moving and with good fix quality, and say so in the report.
Today devices and networks are much better than when we started, and the jumps are fewer. But a GPS under a sheet-metal roof still cannot see the sky, and a clipped speed still does not say what happened. What changed is the amount of error, not the decision about where to filter it.
Israel Negrete Lepe is an electronics engineer. Twenty-five years building systems that make it to production: telemetry, vehicle tracking, municipal video surveillance, RFID asset control and transactional platforms.