GPS-RTK2 Hookup Guide
Can I Really Use NMEA with a High Precision GPS Receiver?
Yes! Except that NMEA sentences are right on the edge of enough precision. NMEA sentences look something like this:
$GNGGA,012911.00,4003.19080,N,10416.95542,W,1,12,0.75,1647.1,M,-21.3,M,,*4F
NMEA outputs coordinates in the ddmm.mmmmm format. So what is the weight of the least significant digit? Said differently, what is the impact of one digit change?
104 16.95542
vs
104 16.95543
If we know 1 degree of latitude is 111.3km at the equator, we can glean the change of a fraction of a minute:
- 1 degree = 60 minutes
- 1 minute = 1 degree/60 = 111.32km / 60 = 1.855km
- 1 minute = 1855m
- 0.1min = 185.5m
- 0.01min = 18.55m
- 0.001min = 1.855m
- 0.0001min = .1855m = 185.5mm
- 0.00001min = 0.0185m = 18.55mm = 1.855cm
Thankfully u-blox has thought about this and offers a setting to increase the NMEA precision from 5 decimal places to 7.
High precision NMEA increases the number of decimal places from 5 to 7. If 0.1855mm is not enough precision you're on your own!
$GNGLL,4005.42027,N,10511.08674,W,180753.00,A,D*63
$GNGLL,4005.4202248,N,10511.0867652,W,180817.00,A,D*60
Correctly parsing and loading a float variable with 7 digits of significance can be tricky. Consider using the UBX protocol which can output up to 8 digits of precision in dd.dddddddd format. Be sure to checkout the examples in the SparkFun u-blox Arduino Library. We have various examples outputting the full 8 digits of precision over I2C without the burden of parsing NMEA sentences.