How to Send RTK Corrections

In order to achieve centimeter level accuracy, an RTK system needs correction data from a stationary base station. The best way to get the correction data from the base station to the rover depends on several factors. We offer radios based on LoRa for direct communication, ESP32 based radios for direct or connection through WiFi, and cellular modems to connect to the internet via a cellular network. In the following sections we discuss these four options, serial modems, WiFi network radios, WiFi direct radios, and cellular modems.

LoRa Serial Modem

If you operate your own base station and either the rover or the base station (or both) don’t have reliable access to a WiFi, then a serial modem connection is a good option for medium and long range communication. Our serial modem uses LoRa modulation and specifically a LLCC68 radio by Semtech. Semtech advertises a 1 km longer range for the LLCC68 than the more common SM1276. The open air range for the LLCC68 is specified as 6 km. We have tested the radio in large open fields over a kilometer with good results. The radio can also operate in a suburban environment sending signals through trees and buildings over a distance large enough to cover most lots. LoRa radios have a much lower bandwidth than WiFi radios, but it is sufficient to send RTK correction data at 1 Hz. Note that your rover can operate its GNSS receiver at more than 1 Hz  (such as a drone using GNSS data at 10 Hz) while using the 1 Hz correction data, since the correction data is a function of the atmosphere’s properties and changes little over even a few seconds.

Our system uses the Raspberry Pi RP2040 processor on the main board to interact with the GPS receiver and the radio. The software is written for the Arduino IDE and is available, at our Serial Modem project on GitHub. For the base station the RP2040 receives the RTCM formatted correction data from the GNSS receiver and then sends it out in packets over the LoRa radio. LoRa packets are restricted to 256 bytes by the protocol, so the RP2040 breaks up the messages into that sized packets. On the rover, the RP2040 receives the packets from the LoRa radio, parses them into messages (including data spread across packets), and then sends them to the RXD2 port on the rover’s GNSS receiver. The GNSS receiver uses these RTCM messages to produce an an RTK solution with centimeter level accuracy.

WiFi Network Radio

The next option uses your local WiFi network to send data from your base station to your rover. The TinkerNav board has an ESP32-C3 WiFi radio built into the board, making this a good option for experimenting with if the area your base station and rover are operating are both covered by the same WiFi network. Here we use the popular and inexpensive ESP32 micro-controller with WiFi capability and program it using the Arduino IDE.  To communicate the base station and rover set up a TCP server using the IP address of the base station ESP32 that is sending the correction data. Links to code for this setup and full instructions for configuring your TinkerNav boards is on our WiFi Base Station and Rover getting started page.

WiFi Direct Radio

In this option we use two ESP32 modules to communicate directly with each other. This option uses the ESP32 in both the rover and the base station TinkerNav boards, but it does not require a WiFi network, rather the radios talk directly to each other. Range is affected by the environment, but can vary from over 100 meters in the open air to less than 15 meters indoors or through walls. This is a good option for short and medium separations between base station and rover where no WiFi network is available. There are two software options here, one is very similar to the software for the WiFi network radio, except that the transmitter sets up a soft access point and the transmitter connects to that access point rather than a WiFi network. The code is available in our ESP32_AccessPointSerial Modem repository. The second option for direct WiFi communication uses the ESP-NOW protocol in a similar way as the LoRa Serial Modem option above uses LoRa. The code is available in our ESP32-ESPNOW-RTK-Radio repository.


Network Transport of RTCM via Internet Protocol (NTRIP)

The next two communication methods involve connecting to a network for sending RTCM correction data from a base station to a rover. NTRIP is the widely adapted protocol for sending RTCM data over a network and is based on HTTP/1.1. In order to understand the different ways to use NTRIP, let’s first look at the components of an NTRIP system. An NTRIP system has four pieces, as shown in the diagram below. First is an NTRIP Source that generates the RTCM data; in our case this is the GNSS receiver. Second an NTRIP Server ‘serves’ that data to the third piece, which is called an NTRIP Caster. Finally the fourth piece is an NTRIP Client; this is the user of the correction data. The NTRIP Caster can take input from multiple servers and provide inputs to multiple clients. The NTRIP Server software typically resides on the base station and connects the NTRIP Source (GNSS receiver) to an NTRIP Caster. NTRIP Casters are hosted on machines with a network connection, this can be in a data center on the other side of the world or on local hardware. When you subscribe to a third party correction service they will provide you access to an NTRIP Caster that you can receiver correction data from. The NTRIP Client typically resides on the rover and is the software you use to receive NTRIP correction data from an NTRIP Caster.

ESP32 to WiFi using NTRIP

In this option the ESP32 on the TinkerNav board and a WiFi network are used to connect to an NTRIP Caster publishing data to the internet. The example code uses RTK2GO, which is a freely available NTRIP caster, but it can be modified for any NTRIP Caster. You can connect to a caster as either an NTRIP server or an NTRIP client. Example sketches for both are included in our our ESP32-NTRIP repository along with instructions for using the code and modifying it for other NTRIP casters. Both of these examples use libraries by GLAY-AK2. 

If an NTRIP server is available in your area for free you can use this data via WiFi and the ESP32 with the NTRIP client example. Free public sources of data vary considerably around the world. RTK2GO may provide correction data in your area, in the western united states UNAVCO has good coverage, or state and federal governments in other locations may provide correction data. There are also paid subscription services for correction data via NTRIP Casters.