R – Serial GPS as Speedometer


I've run into a situation where I may feel obligated to develop a simple GPS application to act as a speedometer. It'd be developed for an older PDA with CPU (162MHz ARM) and RAM (4MB) constraints talking to a serial GPS receiver.

Is this a feasible project? It doesn't need to be race-accurate, but close enough to obey speed limits.

Where do I start for GPS specs, getting the data over serial, etc.

Best Solution

The PDA should have enough resources to receive the navigation data from the GPS. Most GPS receivers spit out a standard ASCII format call NMEA sentences, described here. The sentence you might be most interested in is VTG as it includes ground speed in kilometers.

You'll need to check if your particular GPS receiver allows you to select which NMEA sentence(s) it sends. Some will only send the GGA sentence, which would give you lat/long/altitude (commonly referred to as WGS-84 coordinates). Then you'd have to do math to figure out the velocity yourself. The algorithms would be converting from WGS-84 to earth-centered earth-fixed (ECEF) coordinates, then taking differences to calculate velocity. This is far more computationally intensive than have the GPS do it for you, prone to noise unless you add some kind of filtering, and probably inaccurate due to the position errors in successive reads.

You might ask why the VTG sentence would be any better in error - GPS receivers are capable of using the Doppler shift in the GPS signal to estimate velocity, which is far more accurate than differences of position. There's a good description here.

If your receiver doesn't support a NMEA sentence that includes velocity, you might check if it supports any binary formats which might include velocity.

Related Question