GPS-RTK2 Hookup Guide

Pages
Contributors: Nate
Favorited Favorite 11

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.

Enable high precision mode in u-center

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.