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:
language:bash
$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?
language:bash
104 16.95542
vs
language:bash
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.