Author: Jerome Perin
Version: 1
Dated: 06 Aug 2016

What is RTK?

First, let’s understand what RTK really stands for! Real Time Kinematics is a GNSS technology that allows to partially remove signal errors due to propagation in the atmosphere. These errors are numerous: 

  • Atomic clocks biases
  • Receiver’s noise
  • Antenna’s phase center variation
  • Multipath
  • Troposphere propagation
  • Ionosphere propagation

Ionosphere propagation is the most important effect. The ionization of the propagating medium causes reflections and refractions of the electromagnetic waves. The propagation time measurement time performed by the receiver is therefore false.

Another important effect that cannot be modeled is multipath. It corresponds to wave reflection on obstacles near the receiver (trees, buildings…) that retard or duplicate signals. It can be strongly attenuated with a good hardware.

RTK requires consequently two GNSS receivers, a “base” station, generally motionless and whose position is perfectly known, and a “rover” mobile receiver. The base sends correction data to the rover (raw data) so that the rover can compute the double-difference RTK algorithm. This means that pseudoranges and carrier phases from the base will be “substracted” (it is a bit more complicated though) from those from the rover. RTKLIB is used to perform those calculations, that can lead to a centimeter-level accuracy.


To get deeper into details, RTK uses carrier measurements in order to get centimetric. GPS signal wavelength is about 20 centimeters, so if you are able to measure the phase of this signal, that you know satellite’s phase center and that you calculate the integer number of periods between the satellite and you, this is where you get to centimetric precision. We call ambiguity the previous integer number of periods. If the algorithm finds an integer solution, then the solution is called a “fix”. This is when when maximum accuracy is reached. Otherwise, if the solution is a float, the solution is called “float”. This solution is less precise. We will refer as “single” for the positions neither “fix” nor “float” (happens if no correction data is received, or if signals are not good enough). Something really important about RTK is that if your antennas do not provide good enough signals, the computed position will be erroneous!

With SMARTNAV RTK, a square is a square !


Choose your SMARTNAV


SMARTNAV RTK XL is a board capable of assuming both rover and base mode for RTK computation.

SMARTNAV RTK XL has been designed specifically to receive Tallysman’s TW2710 or TW3740 antennas. We have chosen these antennas because their dual-feed configuration makes them very resistant to multipath. It must be recalled relentlessly that GNSS signal quality must be at a premium in order to compute a precise and accurate position. These antennas offer the best price-performance ratio for this application.

TW2712 has an active amplification of 28 dB, it is lighter and smaller than TW3742, what makes it perfect to embed. TW3742 has an active amplification of 40 dB, it is quite heavy so it is perfect for a base application.

Quick Start Guide

This Quick Start Guide will describe the easy and standard way to setup SMARTNAV RTK. Do not hesitate to read other sections to have a look at more advanced features.

Power on

RTK needs two boards :

  • a motionless receiver, whose precise position is known, called base
  • an embedded moving receiver, whose precise position wants to be calculated, called rover


The easiest way to power base is to use a LiPo battery on the following pins :

Drotek RTK GNSS 3D

The corresponding regulator can handle from 10 V to 28 V, so ideally use a 3S (11.1V) or 4S (14.8V) battery.


Rover can be powered just like base, but to avoid using an additional battery in embedded platforms, several connectors can be used.

To connect SMARTNAV RTK to a Pixhawk, use the following DF13 connector :


with a straight DF13 cable, included in the package or available here. :

SMARTNAV DF13 Straight

Then connect to GPS port :


and this is it!

If you want to connect to a Dropix, use the following JST connector :



and then connect to GPS main port.

It might happen that USB port does not provide enough power for the two boards, so make sure that your flight controller is battery powered before trying to configure SMARTNAV RTK.

WiFi Connection

First, power your base. Then, browse your WiFi networks, you should see a network calledsmartnav-rtk-xxxx, “xxxx” being the last four digits of the board’s WiFi MAC address. Password ispassword. Once you are connected to this network, go to your favorite navigator and type192.168.42.1:8080. Do not forget the port 8080, otherwise you might end up in Edison’s own server.

Be careful not to change Edison’s network configuration, you might end up bricking your board!

You should get to this page.


This is RTKLIB Web Console’s Admin page.

RTKLIB Web Console

First power the board, connect WiFi and open RTKLIB Web Console Admin page.


Go to “Config” tab, select “Base” mode and then select the following parameters :


  • serial for a serial connection, we will use a USB radio in this Quick Start Guide
  • ttyUSB0:57600:8:n:1:off means port “ttyUSB0”, baudrate 57600, 8 bits, no parity check, 1 stop bit, no flow control (standard settings)
  • 1 Hz means that base will output solutions at a frequency of 1 Hz

Then click on “Push”, and do not forget to “Confirm”. These settings will be stored on Edison’s memory and will remain active at each boot up.


Go to “Config” tab, select “Rover” mode and leave all the parameters untouched except :


  • ant2-pos1 is your base’s latitude, in decimal degrees
  • ant2-pos2 is your base’s longitude, in decimal degrees
  • ant2-pos3 is your base’s height, in meters

These are the coordinates where you project to place your base. Remember that you need the most accurate coordinates possible for these parameters! You can have a look at the section “How to calibrate your base correctly” to know how to calculate these positions automatically.

Your rover configuration is now ready and stored inside the board, you need to repeat this operation only if you change your base’s position.

Again, an “approximate” base position will still give you an excellent relative positioning between base and rover, but there might be a constant offset on your rover’s absolute position (equal to base’s positioning error). So to start, you can simply use coordinates generated by your phone or even Google Maps. Do not forget to read the corresponding section to know how to calculate precise positions.

USB Radios

For the datalink between your base and your rover, the easiest setup is to use two USB radios, like the ones available here.


Connect one radio to the base, using the USB port, and the other one to the rover, also using the USB port. Your datalink is now ready to go. USB radios are factory configured with standard settings, that means that they will automatically connect together. If you want to change this configuration in order to increase TX power, change communications channels, set up correction error codes, etc… please visit the corresponding section in the wiki.

Antenna placement

Make sure your base is placed in an open sky area. The better the placement, the better the result.

Drotek SMARTNAV Aerial Inpection Solar Panel Base

If you do not have precise coordinates, then please use the automatic tool to calculate them.

Status monitoring

Once you have completed all the previous steps, you can connect to rover to monitor solution quality. The status tab will provide you the following information :

Drotek RTKLIB Web Console status

  • satellites signal (base side)
  • common RTK satellites (base and rover)
  • quality flag (fix is the best possible solution, float is intermediate and single means no correction data is available or usable for differential correction)
  • precise coordinates and height

The deviation map (Map tab) is also useful to monitor your deviation in real time. By clicking on “Refresh” you will see the 200 last outputs of the RTK system. It can used to check trajectories or to monitor static accuracy.

Drotek RTKLIB Web Console Map

Your system is now ready to go, if correction data is not received for at least 10 seconds, it will output a classical GPS position, otherwise, as soon as it gets correction data back, it will switch to a precise output.

Advanced users

Powering the board

The board has several power supply ports:

  • 5V ports on the JST or Pixhawk connectors to supply power via flight controller :


DF13 connector schematic :


JST connector schematic :


  • 5V port on the board (if you power it with the FTDI for example) :


  • 7 to 17V (4S) on the power pins


The board has 3 voltage regulators :

  • 5V regulator from the power pins
  • 4.2 V regulator for the Edison
  • 3.3 V for U-Blox, USB hub, and HMC

Make sure you only you power the board through one of the previous ports. The power consumption can be quite high whenever the USB/Ethernet hub is used :

  • Edison peak consumption : 600 mA (during WiFi transmission)
  • USB/Ethernet Hub peak consumption : 250 mA (with Ethernet)
  • U-Blox M8T peak consumption : 60 mA

Simplified Schematics

Drotek RTK GNSS simplified schematics :

Drotek RTK GNSS Simplified Schematics SMARTNAV

The LAN9512 splits the Edison’s USB port into two USB ports and one Ethernet port. This has several advantages :

  • USB does not need any baudrate, this means you can set up the frequency you want to work at without worrying about the baudrate
  • the additional USB port frees up a serial port, so it can be used to output the computed solution (Intel Edison has only got two serial ports, one of these, UART2 is used by the console, so it is preferable not to transmit data through it). It can be used to plug an RF link to transmit correction data, or even a 3G dongle.
  • the Ethernet port allows TCP use. This way, you can configure your base as a TCP server and stream raw data through the Internet. Rovers can then connect to the base through Wifi or 3G.

In this configuration, UART1 is dedicated to output the computed solution. The multiplexor can switch between Edison’s UART1 (can deliver RTKLIB’s output) or U-Blox’s output (see Configuring U-Blox chips). If no correction data is received, RTKLIB will give a position that is not filtered, so the deviation will be quite high. In order to prevent this, if the solution is neither « fix » nor « float », the multiplexor will automatically switch to U-Blox’s output. This function also ensures a certain redundancy in case the Edison is not providing any output.


Installation path

Everything SMARTNAV RTK needs to work is installed in /usr/drotek/.

Drotek SMARTNAV Installation


RTKLIB relies on two binaries :

  • rtkrcv : RTK server, for rover mode
  • str2str : stream server (correction data), for base mode

These binaries have been compiled with MKL library. This library helps resolving complex RTK calculations in real-time.

Drotek SMARTNAV Installation RTKLIB

  • rov_yyyymmddhhmmss.ubx contains rover raw data logs
  • bas_yyyymmddhhmmss.ubx contains base raw data logs
  • rtkrcv_yyyymmddhhmmss.stat contains residuals information, it is the file used by RTKLIB Web Console
  • rtkrcv_yyyymmddhhmmss.trace contains a debug trace
  • sol_yyyymmddhhmmss.pos contains the calculated solution, text file readable with RTKPLOT

These are current active files, when RTK service is rebooted they are automatically moved to/usr/drotek/logs/ directory.

  • run-base is the script that controls str2str
  • run-rover is the script that controls rtkrcv

Configuration path

All configuration file are stored in /usr/drotek/config.

Drotek SMARTNAV RTK Installation Configuration

The active configuration is stored in active-config. All the others configurations saved by the user take the .drotek extension.

base.cmd and rover.cmd contain hardware configuration for GPS chips, such as raw data messages, frequency, etc…

Log path

All logs are recorded in the directory /usr/drotek/logs/ :

Drotek SMARTNAV Installation Log RTK

Do not forget to use the “Time Sync” function if you want to get a correct timestamp!

Administration tools

Administration scripts are located at /usr/drotek//admin

Drotek SMARTNAV Installation

All these scripts have been added to the path, so you can run them from anywhere.

  • smartnav-start-web starts RTKLIB Web Console
  • smartnav-status outputs status (RTKLIB rover and base, Web Server)
  • smartnav-stop-web stops RTKLIB Web Console
  • smartnav-time-sync synchronizes board’s time with GPS time (needs correct GNSS signal)
  • smartnav-update downloads SMARTNAV UPDATE from GitHub and performs the update
  • smartnav-version shows SMARTNAV version

SMARTNAV services

Four services have been created within systemctl :

  • drotek-rtklib-rover.service RTK rover mode service
  • drotek-rtklib-base.service RTK base mode service
  • drotek-webconsole.service Web Console service
  • drotek-gulp.service Gulp (Web Server) Service

These services are automatically launched at system startup. drotek-rtklib-rover.service anddrotek-rtklib-base.service do not run simultaneously and depend on the configuration you selected on RTKLIB Web Console Configuration page.

RTKLIB Web Console

Launching RTKLIB automatically

SmartNav works as a “classical” GPS. The RTK algorithm is launched automatically when Intel Edison boots. If it gets correct signal from a base station (what can be monitored by the web app) it will then compute a precise position. Otherwise it will provide a single U-Blox type position. The board is equipped with a multiplexer that selects whether Edison’s precise output or U-Blox’s direct single output.


How to connect to RTKLIB Web Console

RTKLIB Web Console is an application developed in Node/AngularJS. It runs automatically at Edison’s boot. In order to connect to the application, open your favorite web browser from your computer, tablet or phone and connect to board’s IP address at port 8080.

If the board is in Access Point mode (default mode), then type in your browser. You will get to this page.


This is the administration page, it will tell you whether base or rover mode is running or not. It also offers the possibility to download logs. Keep in mind that this a server/client architecture : the client (your web browser) retrieves data from the server (the Edison), but the code is executed on client side to avoid overloads.

BE CAREFUL not to go to (port 80 implicit), because there is a second Web server on the Edison that allows you to change Wifi configuration. By default Edison is on Access Point mode, but if you change this to Infrastructure mode (connection to a router/network), you will potentially brick the board, as it will relentlessly try to to connect to an unknown network at startup and will not create its own network anymore.

RTKLIB Configuration

RTKLIB works with a configuration file that contains all the information needed in order to perform RTK.


First, you need to chose whether you want to work in base or rover mode. Base mode is for streaming raw data, or logging for post-processing. You can chose to stream raw data through a serial port, a file, a TCP server or an NTRIP server. You can also set the frequency at which the base will work. 1 Hz for the base and 5 Hz for the rover is usually a good combination.

Rover mode is for performing RTK. You can find on this page the meaning of main parameters. For other parameters please refer directly to RTKLIB documentation.

The configuration is applied only once you press the “Push” button, otherwise it is ignored. You can also open or save configurations with the corresponding buttons.

RTK Status

RTKLIB Web Console offers several ways to monitor RTK performance. The “Status” tab will show you the quality of GNSS signals. It can help you to find a good position for the base. Remember that is highly compulsory to have a good satellite reception quality for RTK! Right side chart shows signal-to-noise ratio for the base, whereas left chart shows SNR for common satellites between base and rover.


On the top of the page you will find the quality of the solution and also rover’s position.

The Map tab is useful for monitoring the quality of the solution. It is a deviation map where you can read position variations over time.


There is also a Log tab where you can have direct access to RTKLIB logs.


Synchronization with GPS Time

Intel Edison has no internal Real Time Clock, that means that NTP server will synchronize time if board is connected to the Internet. But once you reboot the board, time synchronisation will be lost. This will result in a bad log timestamp in the Linux file system. This is not critical for performing RTK, but it can be problematic if you want to manually retrieve your logs. They are stored in :


with the following timestamp :


We have implemented a time-sync function in order to get rid of this problem :


If you click on “Sync”, time will be synchronized with GPS time. You have to wait to get GNSS signal before pushing the button. This will reset the timestamps, so make sure you start and stop the Rover service in order to get a clean repository.


Time can be checked with an SSH connection to the board and the command :



In last release, the Time Sync button has been removed. It has been replaced by a daemon that is started before any RTK service. It will wait on GNSS signal in order to get correct time. That way, all timestamps are always correct. However be careful, as RTK services depend on time synchronisation, you will not be able to change any configuration on the board from the WebConsole until you get a correct signal. The status of time synchronisation can be checked with an SSH connection and the command :

systemctl status drotek-time-sync.service

Be careful, in order to work, U-Blox has to be in default configuration mode at startup, otherwise time synchronization will fail. If you changed tyhis configuration, please revert back to default configuration.


Manual Configuration

Managing the configuration file

As you may have seen RTKLIB’s configuration file is everything except user-friendly.


The configuration files are located at /usr/drotek/config This document with list all the relevant parameters of this configuration file.

pos1-posmode =

  • single for single positioning
  • dgps to use SBAS
  • kinematic is for RTK with fixed base
  • static is for RTK with fixed base and rover
  • movingbase is for RTK with both base and rover moving
  • fixed is for rover fixed
  • ppp-kine PPP algorithm in kinematic mode
  • ppp-static PPP algorithm in static mode

PPP (Precise Point Positoning) differs fom RTK because it uses precise orbit data instead of double-difference algorithm in order to compute a position. Its precision is generally less good than RTK. But it can be used without base corrections and can potentially output a submeter position.

pos1-navsys =

  • 1 to use only GPS satellites
  • +2 to add SBAS
  • +4 to add GLONASS
  • +8 to add GALILEO
  • +16 to add QZSS
  • +32 to add BEIDOU

Useful when you want to disable SBAS (sometimes interacts badly with RTK) or select a constellation.

pos2-armode =

  • continuous
  • instantaneous
  • fix-and-hold

This is the strategy for integer ambiguity resolution for GPS. Continuous gives the best results. Fix-and-hold can sometimes hold the ambiguity longer, but some offsets on position can appear.

pos2-gloarmode =

  • off
  • on
  • autocal

This is the strategy for integer ambiguity resolution for GLONASS. It is recommended to leave this parameter off, as it will generally not help in ambiguity resolution.

ant2-postype = base’s position type

  • llh latitude/longitude/height in decimal degrees and meters
  • xyz ECEF coordinates in meters
  • single uses base’s single data to calculate a position
  • posfile uses a position file
  • rinexhead uses a RINEX file header
  • rtcm extracts base’s position from RTCM messages

These parameters are for setting base’s position. It must be understood that getting a good position for the base is the key to accuracy. Please follow instructions on how to calculate base’s position accurately. “Single” mode can be used (only for post-processing) if user does not want to enter base’s position manually. However position calculation will be much less precise.

inpstr2-type =

  • serial from a UART link
  • file from a file
  • tcpsvr from a TCP server
  • tcpcli from a TCP client
  • ntripcli from a NTRIP client
  • ftp from FTP
  • http from HTTP

This parameter sets how correction data from the base is transmitted to the Edison. For instance with a radio link it can be UART, over Wifi it can be a TCP server, etc… It is also compatible with NTRIP.

inpstr2-path =

  • ttyUSB0:57600:8:n:1:off for a radio link plugged on the external USB port, baudrate 57600, 8 bits, no parity check, 1 stop bit, no flow control
  • for retrieving data from a TCP server located at, port 2424

This parameters sets the path for correction data depending on inpstr2-type.

inpstr2-format =

  • ubx U-Blox binary format for raw data
  • rtcm2 RTCM 2 protocol
  • rtcm3 RTCM 3 protocol

This parameter sets in what format the corrections are being sended. U-Blox receivers naturally outputs U-Blox binary format .ubx which is compact (little bandwith). This data can be converted with STR2STR to RTCM if needed. Other formats are also available if another base is used : oem4, oem3, ss2, hemis, skytraq, gw10, javad and sp3.

outstr1-type =

  • serial UART output
  • file file output
  • tcpsvr TCP server output
  • tcpcli TCP client output
  • ntripsvr NTRIP server output

With RTKLIB you can configure two outputs for the calculated solutions. UART is useful for getting the position to Pixhawk, file is also useful for avoiding post-processing.

outstr1-path =

  • ttyMFD1:38400:8:n:1:off ttyMFD1 is UART1 on the Edison, baudrate 38400, 8 bits, no parity check, 1 stop bit, no flow control
  • /usr/drotek/rtklib/sol%Y%m%d%h%M.pos for saving the solution to the corresponding folder, with a time tag in the name

Paths corresponding to outstr1-type =.

outstr1-format =

  • llh gives the solution in ASCII format, latitude, longitude and height separated by columns
  • xyz same in ECEF coordinates (Earth Centered Earth Fixed)
  • enu same in ENU coordinates (East, North, Up, the coordinates of the vector between base and rover)
  • nmea same in NMEA
  • ubx this is a functionality added by Drotek so that RTK GNSS can work with Pixhawk

U-Blox binary format has been added by Drotek in order to work with flight controllers.

logstr1-path =

  • /usr/drotek/rtklib/rov_%Y%m%d%h%M.ubx

This is the path for active logging folder. Then logs are moved to /usr/drotek/logs Useful for post-processing.

Configuring U-Blox chips

To configure the Ublox chips manually you have to use the U-Center software, available here.

You also need an FTDI adaptor sold here.

Then connect the FTDI adaptor to the board. You can choose to power the board through the FTDI with the 5V pin. If you don’t, do not forget to still plug the GROUND pins together. Be careful not to apply several power supplies to the board!


U-Blox’s M8T UART has been directly connected to the “GPS RX and TX” labeled pins for configuration/debugging purposes. Keep in mind that the M8T is connected to the Edison with USB while changing configuration.

To connect Drotek GNSS RTK to U-Center, select the appropriate COM port :

Drotek RTK SMARTNAV UCenter ublox

In order to use the RTK algorithm, the receiver has to output raw data instead of computed navigation messages. This data contains all the pseudoranges, carrier phases, Doppler measurements etc… necessary to compute the algorithm. An example of raw data is shown below :

Drotek RTK GNSS raw data SMARTNAV

The messages the GPS is sending can be seen in “View -> Messages View” tab.

The configuration can be set in the “View -> Configuration View” tab.

For instance in the “GNSS” tab you can config whether you want to use GPS, GPS + GLONASS + SBAS, etc… Now GALILEO is available with firmware 3.01 for M8 series!

Drotek RTK SMARTNAV ubloc Config

In the “NAV5” tab, you can set the Dynamic Model for the GPS. This useful when there is no correction data coming, so the Edison will switch to Ublox’s direct output. For example, if you are using the board with a Pixhawk, select “Airborne < 4g”, so that position computation and filtering will be closer to reality, given that drones kinematics are quite fast.

Drotek RTK SMARTNAV ublox Config

Once you do a modification in any tab, do not forget to press the “Send” button at the bottom left corner, otherwise the modification will not be sent to the receiver.

Drotek RTK SMARTNAV ubloc Config

“MSG” tab contains all the messages that can be set through M8T’s outputs. The two important messages containig raw data are “02-15 RXM-RAWX” and “02-13 RXM-SFRBX”. You can activate them by selecting them on the menu and then select the output port. In our case it is important that those two messages are set to the USB port, to which the Edison is connected.

Drotek RTK SMARTNAV ublox Config

Then you can choose to send whatever message you want to the UART port, depending on what you connect to the board. For example, Pixhawk uses NAV-SOL, NAV-STATUS, NAV-POSLLH and NAV-VELNED messages. Do not forget the corresponding baudrate in the “PRT” tab (for instance 38400 for Pixhawk) :

Drotek RTK SMARTNAV ublox Config

You do not need to set any baudrate for the USB port.

The rate of the receiver is a key parameter for RTK as it will set at what frequency the solutions are calculated. This can be configured within the “RATE” tab :

Drotek RTK SMARTNAV ublox Config

SBAS settings can be changed in “SBAS” tab. In order to save his configuration inside receiver’s memory, go back to “CFG” tab, select the four devices and click on “Send”, as shown in the picture below.

Drotek RTK SMARTNAV ublox Config

Launching RTKLIB manually

RTKLIB’s main program can be found in /usr/drotek/rtklib/rtkrcv, so first SSH into your board and then use this command :

cd /usr/drotek/rtklib/

and ./rtkrcv to launch it.

Rtkrcv is a server that needs a configuration file. The following commands can be used : -o [PATH] to specify a configuration file (stored in /usr/drotek/config/) -t [1..5] for debugging purposes, writes a .trace file in rtkrcv’s path depending on the level of verbosity (from 1 to 5). It can be useful to understand why sometimes results are not as expected. -d [PATH] to redirect rtklib’s output to another console -s to automatically launch the server

A typical launch of rtkrcv is :

./rtkrcv –o /usr/drotek/config/active_config.conf – t 2

Then start and solution 1 must be typed in order to start the server and visualize solutions. These may last to appear as sometimes RTK algorithm needs some time to perform initial calculations (this also depends on signal strength).

Closing an SSH connection kills the rtkrcv process, so this is why –d command may be useful.

Accessing the Intel Edison

Drotek SMARTNAV RTK Intel Edison

There are three ways to access the Intel Edison :

  • Serial
  • WiFi Access Point
  • WiFi Router

We will ship the Edison in Access Point mode by default, so it can connect with the RTKLIB WEB CONSOLE easily. This is the most user-friendly way to communicate with the board. If you want to SSH into the board in Access Point mode, use the IP address and a hyperterminal likePutty. You then get access to the embedded Yocto Linux.



Serial port is available through UART2. This port is called /dev/ttyMFD2 inside Linux. For this, you will need an FTDI adaptor sold here.

Connect the FTDI adaptor to the board. You can choose to power the board through the FTDI with the 5V pin. If you don’t, do not forget to still plug the GROUND pins together. Be careful not to apply several power supplies to the board!

Drotek SMARTNAV RTK Intel Edison FTDI

Then go to your device manager to see what COM port is being used.


Then use Putty in serial mode, select the COM port created by the FTDI converter and enter 115200 for the baudrate. After pressing Enter you will be prompted to login.

Drotek RTK SMARTNAV Putty Serial

Drotek RTK SMARTNAV Putty Serial

If you want to connect the Edison to a router, first connect to the board using an FTDI adapter. Once you have entered your login and password, type the following command to disable Access Point Mode :

configure_edison --disableOneTimeSetup --persist

Then type :

configure_edison --wifi

to list all the available networks and connect to them. The command :


can give you the IP address of the board. You can then use Putty with the new IP address to connect to Linux or a program like WinSCP if you want to retrieve some data from the board. If you wish to turn back to Access Point Mode, type :

configure_edison --enableOneTimeSetup --persist

Signal multiplexing

SMARTNAV RTK is equipped with multiplexors that ensure a hardware switch function. The output of the board can be selected between a U-Blox “normal” output or Edison’s “precise” output. There are two scripts located at :


that let you control these multiplexors.

If mux_low is executed U-Blox direct UART output will be redirected to board’s output (JST or DF13 connectors). If mux_high is executed Edison’s UART output will be redirected to board’s output (JST or DF13 connectors).



First to do in order to post-process data is to retrieve logs from base and rover. WinSCP is a good tool to connect to the Edison in SSH. Enter the IP adress of the board and press Connect.


Go to :


and select the files you want to download. RTKLIB automatically logs both base and rover data in this folder.


These logs only contain raw data in U-Blox binary format. It is necessary to convert them to RINEX format (Receiver INdependant EXchange format) before processing them. Inside RTKLIB you can find RTKCONV, a GUI program that will do this conversion.

First select your raw data file :


The output paths will be set automatically. Click on Options :


Check that the boxes corresponding to the satellites you want to process are checked. Then click Ok and Convert. Repeat this operationn with all your raw data files.


RTKPOST is the GUI program that will post-process RINEX files. First run RTKPOST and click on Options :


You will find in this window all the parameters corresponding to the .conf configuration file. You can either enter them manually or click on “Load” and select a configuration file.

Select on the main window the observation file corresponding to the rover (RINEX file provided by RTKCONV) :


Repeat this operation for the base :


Click on Execute. This will generate a .pos position file.


RTKPLOT is a GUI program that can plot the .pos position file generated by RTKPOST. It can also read files recorded by RTKLIB in “llh” format (See Configuration File). Open RTKPLOT and open a .pos file :



Fix positions appear in green, float in yellow and single in red. By pressing “Google Earth View” you can see the position in Google Earth View :

Drotek SMARTNAV RTK Google Earth

However be careful! In some zones Google Earth’s precision might vary from meters to several tens of meters. That means that you can sometimes see strong offsets between your real position and satellite views.

RTKPLOT is also useful to monitor other parameters, such as number of satellites, deviations, velocities, accelerations, age of differential corrections, …


How to calibrate base correctly


Canada provides a government service where you can upload raw GNSS data in order to compute precise positioning with PPP. PPP means Precise Point Positioning, it is an alternative method to RTK. Instead of calculating double-differences it uses precise orbit data iin order to calculate submetric positions.

Place your receiver on the desired point and log raw data for at least two hours (this depends on the quality of the coordinates you want to get). Then convert your raw data into RINEX format (see RTKCONV).

Then go to :

Create an account an open a session. You should get to this screen :


Enter your email address, select “Static” and “ITRF”. Then upload the RINEX file. You will then receive a notification on your email address when the processing is finished.

Automatic Base Coordinates

It is often difficult to get precise base coordinates. We implemented a function that averages base’s position over time and feeds corresponding coordinates into rover’s configuration. The function is located in Admin tab (Rover mode) :


You can select a time of survey in seconds. The higher this time, the higher the precision of the coordinates. It is recommended to calculate the position over several minutes. Once the process is completed it will automatically change rover configuration aund launch rover mode. In order to work, base must be configured to send differential data in UBX mode.


Update the board

Update the board

You will find in WebConsole an Update button.


Clicking on this button will run smartnav-update script located in /usr/drotek/admin. This script will copy SMARTNAV-RTK repository and extract the update from the Update folder.

The update can also be done manually by running the smartnav-update script from SSH.

An Internet connection is necessary, the easiest way to connect the board is to use an Ethernet connection as shown here.

Dropix/Pixhawk Integration


Drotek has added some modifications to RTKLIB so its output is compatible with Dropix/Pixhawk. SMARTNAV RTK can be directly plugged to Pixhawk’s GPS port using a DF13 cable (included in our package, otherwise here).

Drotek SMARTNAV RTK Dropix Pixhawk Integration PX4

Configuration for rover :

Drotek SMARTNAV RTK Dropix Pixhawk Integration PX4 Ardupilot

“ubx” type has been added by Drotek, code is available in our GitHub here. Port ttyMFD1 is dedicated to serial output, it is multiplexed with U-Blox UART output, so the system can also work as a “classical” GPS. This way, whenever corrections from a base are available, a precise position is computed. Otherwise, the Edison is completely bypassed.

Pixhawk/Dropix work at 5 Hz (this parameter sets the frequency at which the RTK solutions will be calculated) and at a baudrate of 38400 (important for multiplexing) :

Drotek SMARTNAV RTK Dropix Pixhawk Integration PX4 Ardupilot

Be aware that your flight controller might not configured to react to such precision. You might need to tune your PIDs for that. Generally increasing I and P helps reducing static error, but this has to be done very gently in order to avoid instabilities.

You might also work on other parameters such as :

  • INAV_TC_XY : time constant for GPS and inertial measurements mixing
  • EKF_POS : Kalman filter parameters for position estimation
  • EKF_VEL : Kalman filter parameters for velocity estimation

It might happen that when base signal is lost or recovered GPS error is triggered. This is because flight controller will see a sudden drop in number of satellites, a sudden change in HDOP or a position offset. It is completely harmless as positions will still be output from the board, either from the Edison or from U-Blox chip.

Mission Planner/MAVLink integration

Differential data from base station can be encapsulated in MAVLink protocol to avoid using two separate links between GCS and the UAV. First, base is configured for TCP server function that streams raw data on port 2424. Base can also be connected to GCS with a UART/USB converter.

Drotek SMARTNAV RTK Mission Planner MAVLINK 1

The computer running Mission Planner must then be connected to base’s Wifi network. Connect your Pixhawk/Dropix to SMARTNAV (with DF13 or JST only) as usual, using the telemetry. Once connected, press Ctrl + F and select the Inject GPS function.

Drotek SMARTNAV RTK Mission Planner MAVLINK 2

Then select TCP Client and click Connect :

Drotek SMARTNAV RTK Mission Planner MAVLINK 3

Enter the IP adress ( if connected to SMARTNAV’s Access Point) :

Drotek SMARTNAV RTK Mission Planner MAVLINK 4

And then port number (2424 in this example) :

Drotek SMARTNAV RTK Mission Planner MAVLINK 5

This function will forward differential data to flight controller’s GPS TX port. In SMARTNAV 1.2.6, this port is directly multiplexed to the Edison (in previous versions, multiplexors are controlled by one GPIO only, so when the code switches to “classical” mode, differential data is no longer received by the Edison. However this issue can be solved by changing the cable). That means that all corrections will pass exclusively through DF13 or JST cables, without the necessity of adding another datalink or cable.

SMARTNAV is configured to receive data from the USB port by default. So the paramater inpstr2-path needs to be changed in rover’s WebConsole :

Drotek SMARTNAV RTK Mission Planner MAVLINK 7

MFD1 is Edison’s UART1 (the one connected to DF13 and JST) and the baudrate of 38400 must correspond to outstr1-path (baudrate at which flight controller receives GPS data). Once everything is set correctly you should see the DGPS flag in the HUD :

Drotek SMARTNAV RTK Mission Planner MAVLINK 6

This has been achieved with ArduCopter 3.4.

U-Blox protocol resolution

Flight controllers use UBX-NAV-POSLLH and UBX-NAV-SOL messages in order to get position from the GPS. Position is encoded in 4 bytes, that means that maximum resolution can be up to 7 decimals in latitude/longitude and up to millimeters in height.

Drotek SMARTNAV RTK u-blox Procotol Resolution

As shown in the picture above, this means that globally U-Blox protocol resolution is centimetric.

SMARTNAV Field Tests

L1/L2 comparison

Tests we realized with Drotek RTK GNSS.

Comparison between L1 and L2 systems :

  • Kinematic mode
  • L1 base : Drotek, patch passive antenna, located in a rugby field
  • L1 rover : Drotek, Tallysman active, located on a car
  • L2 base : Trimble NetR9 + Trimble TRM59800.00, CNES
  • L2 rover : Septentrio AsterX 3 + Novatel geodesic antenna, located on the same car

Thirty minute static test in open-sky environment, blue is L2, green is L1 :


Aerial inspection

SMARTNAV RTK was mounted on a drone for an aerial inspection of solar panels. A thermal camera was used to detect hotspots (defective cells). The were two main problems for this mission :

  • drone has to fly close to the ground (more or less 5 meters), otherwise camera resolution is not good enough to detect hotspots efficiently. So the trajectory has to be precise enough so the gimbal is always oriented towards the panels. This cannot be done with a classical GPS because of its bigger deviation.
  • solar panels fields are big. Once you detect a hotspot, you have to be capable of locating it precisely to avoid another on foot inspection.

The following data has been collected during a flight plan over the solar panels. Navigation was provided by a classical GPS. Then RTK position was post-processed.

Drotek SMARTNAV RTK Aerial Inspection

As you can see the deviation with a classical GPS is quite big and was pratically impossible to aim at the panels constantly with the gimbal.

Drotek SMARTNAV RTK Aerial Inspection

This problem is solved by replacing the classical GPS with SMARTNAV RTK for real time precise navigation. Some pictures of the setup :

Drotek SMARTNAV RTK Aerial Inspection Drone

Drotek SMARTNAV RTK Solar Panel

Drotek SMARTNAV RTK Solar Panel

Square table

This test consisted of reproducing a square table shape with real time RTK. This was the setup :

Drotek SMARTNAV RTK Square table

Data link between base and rover was a USB radio. SMARTNAV RTK was moved along table’s border continuously. As you can see, the result is quite impressive :

Drotek SMARTNAV RTK Square table

Other tests

Have a look at : Urban areas 1 Urban areas 2

Suggest Edit