What is GPS RTK?
Real Time Kinematics
RTK is short for real time kinematics. A GPS receiver capable of RTK takes in the normal signals from the Global Navigation Satellite Systems along with a correction stream to achieve 1cm positional accuracy. GNSS includes satellites from GPS (USA), GLONASS (Russia), Beidou (China), and Galileo (Europe). On top of these signals an RTK receiver takes in an RTCM correction stream and then calculates your location with 1cm accuracy in real time. The rate varies between receivers but most will output a solution at least once per second; some receivers can output this higher precision solution up to 20 times a second. RTK capable GPS receivers used to be thousands of dollars and were limited to professional surveyors and government groups. Thanks to science, math, and economics, RTK receivers are now less than $300.
On the left we have a extremely high quality GPS receiver (the ZED-F9P seen above) with no correction data. The position wanders greatly over 1.5 meters and beyond. On the right the same receiver, with the same antenna, with RTCM correction data brings the position under 25cm with tight groupings under 10cm.
Did You Say 1 cm? Zomg How Do I Get 1 cm Accuracy!?
You'll need a GPS receiver capable of receiving and incorporating the RTCM correction data into its location solution. You’ll also need a source of RTCM correction data. This usually comes from an internet connection or a long distance radio capable of approximately 500 bytes per second. LoRa and LTE-CAT M1 are superb choices for this backhaul.
Once it's all setup and working, the rover GPS module will output normal NMEA sentences but with really accurate lat and long. To be clear, it’s not 1cm precision; it's 1cm accuracy. The precision is 0.1mm!
1 cm accuracy is also possible with a few lower cost receivers (such as the NEO-M8T) by capturing raw streams from the GPS satellites and then post processing the logs with an open source program called RTKLIB. This is handy for applications like aerial photography and agricultural inspection were alignment is important after the fact. It's also possible to tether a lower cost receiver (such as the NEO-M8T) to a laptop and run RTKLIB in unison and achieve real time solutions but this is a rather large, power hungry setup that is not ideal for embedded mobile applications. In these tutorials we will be focusing on real time (RTK) capable receivers.
What is RTCM?
RTCM is an acronym for Radio Technical Commission for Maritime. This governmental body came up with a way to communicate positions for boats and other vessels many decades ago. Technically, RTCM is just a protocol. We, however, will be using the term RTCM to mean the bytes of correction data related to GPS timing anomalies.
The contents of RTCM frames can be decoded but you, the user, rarely need to. Instead you simply pass the bytes to the GPS receiver and it will parse the correction data.
There are a few different types of messages but the ones we care about are numbers 1005, 1077, 1087, and 1230. Each message type has a different length but as a rule of thumb it's a couple hundred bytes every second. Each RTCM message contains details about the GPS/GNSS network, and perturbations in the ionosphere and troposphere.
Remember, the GPS satellites are very far away; about 20,000km or 12,000 miles away. A lot can happen to the signal from the GPS satellites to you across that distance. Geomagnetic storms cause slight timing delays increasing the location error. Earth's gravitational field is not uniform so relativistic effects can add inaccuracies. If we know the second to second issues within our local vicinity, a RTCM capable receiver can correct the location solution with great precision.
Where Do I Get RTCM Corrections?
There's the not-free but super easy solution, and there's the freeway.
A company called SwiftNav offers a service called Skylark. As of writing, for $49 per month you will get corrections covering North America, Europe, and Asia Pacific. You'll be issued NTRIP credentials that can immediately be used with Lefebure, SW Maps, or any GIS app that supports NTRIP. One downside is that with a 'regional' provider such as Skylark the distance to the correction station may be larger than 10km. While we've always gotten an RTK fix, we often see accuracy of ~30mm instead of the 14mm when using our own GNSS reference station. Your mileage may vary.
Sort Of Free: Build You Own
You can build your own GNSS reference station. It takes some work, some hardware, and you'll need to stay1 within 10km, but there's no annual fee and you'll have control over your own system. Additionally, we get a very good reported horizontal accuracy of 14mm in RTK Fix mode.
1 As the distance to a reference station passes 10km the accuracy of the RTK fix increases by a few centimeters.
If you're lucky there's a station within 10km (6 miles) of you that is broadcasting RTCM 3.x data over the internet. We located one a little more than 10 km from SparkFun HQ that works really well.
Here’s a list of stations we’ve found. If there are more that you know of, please let us know:
- UNAVCO - Mostly USA
- NTRIP Listing - Global
- European Reference Stations
- RTK2go and SNIP - Runs a server where a few dozen stations can be accessed (see comments section)
Many of the stations that broadcast real time RTCM correction data require registration. It’s a wild hodge-podge of scientific and non-profit civil organizations across the globe. It feels very internet-circa-1995. If anyone has a more straightforward way of discovering and connecting to RTCM providers, please let us know in the comments section.
We recommend using RTKLIB to subscribe to the feed and output the stream over a serial port to a GPS RTK capable module. For the best accuracy, your GPS receiver will need to be within 10km (6 miles) of the broadcast station. If you are greater than 10km, the ZED-F9P can still create a location fixed but the accuracy is degraded and the receiver will output the following:
WARNING: DGNSS baseline big: 10km
How Do I Get the RTCM Messages to the GPS Receiver?
It depends on your end application. If you need maximum portability, then the best solution is a radio link between base station you've created and mobile GPS RTK receiver. SparkFun offers a variety of LoRa radios and antennas to enable this backhaul like some of the products listed below.
If your end application already requires an Internet connection such as GSM or LTE-CAT, then a serial connection to the GPS-RTK receiver may be the easiest way to go.
If your application has a cell phone nearby then a third option is to create a serial bridge from a cell phone to a serial Bluetooth device like the Bluetooth Mate Silver that then connects to the serial port on the GPS-RTK. There are a few NTRIP compatible mobile apps. We’ve been pleased with Lefebure for Android.
Resources and Going Further
Ready to get hands-on with GPS?
We've got a page just for you! We'll walk you through the basics of how GPS works, the hardware needed, and project tutorials to get you started.
We hope this tutorial helps you understand a bit more about GPS RTK. This is just the beginning! For more information, check out the resources below:
- RTKLIB: An Open Source Program Package for GNSS Positioning
- ResearchGate: Review of GNSS Formats for Real-Time Positioning
- Geo++: Real-Time GNSS Data Transmission Standard RTCM 3.0 (PDF)
- UNAVCO: All Real-time Networks & Stations Monitoring - Mostly USA
- BKG's GNSS Data Center: Global List of Real-Time GNSS Data Streams From Ntrip Broadcasters - Global
- EUREF Permanent GNSS Network: Real-Time Map
- SNIP: the Simple NTRIP Caster - Runs a server where a few dozen stations can be accessed
- Android App: Lefebure NTRIP Client
Looking for more information related to GPS RTK? Check out the tutorials below:
LoRaWAN with ProRF and The Things Network
GPS-RTK Hookup Guide
Getting Started with U-Center for u-blox
GPS-RTK2 Hookup Guide
Setting up a Rover Base RTK System
How to Build a DIY GNSS Reference Station
SparkFun RTK Surveyor Hookup Guide
SparkFun RTK Express Hookup Guide
Or check out this blog post for inspiration.