From OpenStreetMap Wiki
Jump to: navigation, search
Available languages — RTKLIB
Screenshot of RTKLIB
Author: T. Takasu and other contributors.
Website: http://www.rtklib.com/
Version: 2.4.2 (2013-04-29)
License: BSD 2, GPL >=v3 for versions before and including 2.4.2b11
Platform: win;linux;android

Open source program package for GNSS positioning

RTKLIB is an open source GNSS toolkit for performing standard and precise positioning. Using GNSS raw data, it is possible to do realtime and post-processing to accurately determine a position, using either a base station, precise point positioning (PPP) or precise ephemerides and clock data. The software supports all major satellite constellations (GPS, GLONASS, Galileo, BeiDou, SBAS, QZSS) and major file exchange formats. The toolkit runs with a GUI on Windows and commandline tools on Linux.

With professional receivers and antennas, it is possible to achieve centimeter accuracy, while low-cost single frequency equipment can achieve decimeter accurary.[citation needed]

Realtime and post-processing modes

  • Single enables positioning as a normal GNSS receiver using code measurements, broadcast ephemerides and clock data from the satellites. Phase measurements (carrier smoothing) are not used (2.4.2). If the SBAS data is available for this geographic region, it can be used to improve the rover's position (Single+SBAS)
  • Differential GPS/GNSS where positioning results from a rover and code corrections from base station are used to improve the rover's position.
  • Real Time Kinematic (RTK)
    • Kinematic Raw data from a moving rover is combined with raw data from a static base station to improve the rover's position.
    • Static Similar to Kinematic, but the rover is stationary.
    • Moving-Baseline Similar to Kinematic, but the distance between the rover and base station is calculated irrespective of the base station's position. The base station posiiton is estimated using Single algorithm.
    • Fixed Used for RTKLIB residuals analysis (Tropo+Iono+integer ambiguity resolution+Errors, see Section B.3 in the RTKLIB Manual 2.4.2).
  • Precise Point Positioning (PPP)
    • PPP-Kinematic Raw data from a moving rover is combined with real time predicted or non-real time measured precise ephemerides and satellite clocks to improve the rover's position.
    • PPP-Static Similar to above, but the rover is stationary.
    • PPP-Fixed Used for residuals analysis.


Collecting traces

With the approriate GNSS antenna and receiver, it is possible to collect raw data on a windows or linux machine using RTKNAVI (or STRSVR). Open Input Streams (press the I in RTKNAVI), choose Serial type for the rover and in the configuration dialogs choose the correct COM port. Also under Cmd choose the correct initialization file for the receiver (found in the data subdirectory). Choose the correct format for the receiver. Close the dialog and open Log Streams (press the L), choose File as output for the rover and select the file destination. The raw data from the receiver should now be saved to file when pressing "Start".

Converting traces to RINEX-format

Before traces can be post-processed, they needs to be converted to the RINEX file format. This is done with RTKCONV or convbin, and the RINEX files are saved as .obs, .nav and possibly .sbs.

Post-processing traces

The RINEX files can be post-processed with RTKPOST or rnx2rtkp. The RINEX .obs-file from the rover is needed together with either

  • ephemerides and clock solutions (f.ex. from IGS[1] in .sp3 and .clk that can be downloaded using RTKGET or wget/curl
  • RINEX file from a nearby base station
    • Your own stationary receiver with raw data captured at the same time as the rover
    • EUREF network[2] in Europe
    • CORS[3][4] in the USA
    • NGRS[5] in Australia
    • RBMC[6] in Brazil
    • CACS[7] in Canada
    • RGP[8] in France
    • GREF[9] in Germany
    • RGS[10] in Russia
    • FinnRef[11] in Finland
    • Others[12]
  • Saved base station raw data collected with RTKLIB in real time.

Under Options:Settings1 choose the correct positioning mode, and in the tab Output choose NMEA under Solution Format. In the Positions tab either input the correct position of the base station or let RTKPOST use the position in the RINEX file.

The quality of the postprocessed RTK data strongly depends on the baseline length (distance between the base station and rover).

Collecting base station data in real-time

First, apply for access to an NTRIP caster (see full list[13]) from the network you want access to:

NTRIP Casters
Name Country Caster address Application Form Reference Station locations
IGS-IP by BKG Germany [14] [15] international base stations
IGS-MGEX by BKG Germany [16] [17] international base stations using GPS, GLONASS, Galileo, QZSS
EUREF-IP by ASI Italy [18] [19] mostly European base stations
EUREF-IP by BKG Germany [20] [21] mostly European base stations
EUREF-IP by ROB Belgium [22] [23] mostly European base stations
RBMC by IBGE Brazil [24] [25] mostly Brazilian base stations
ASG by EUPOS Poland [26] [27] Polish base stations
Trignet by National Geospatial Information South Africa [28] [29] All of South Africa. Free of charge

Then, using the correct NTRIP caster, username and password, configure either RTKNAVI or STRSVR to collect the raw data in real time as RTCM 2 or 3 and save/log it to a file.

Set up your own base station and NTRIP caster

Using a hardware receiver, configure STRSVR to input the data from the serial port. As Output, choose NTRIP Server and configure the appropriate settings for your NTRIP caster. Under Conversion Option choose Conversion from <your binary format> to RTCM 3. For Message Types enter the appropriate types as listed in the RTKLIB Manual[30] p. 27 (f.ex. 1002(1), 1019(1)).

You also need to set up an NTRIP caster:

  • Lefebure NTRIP Caster[31] - Windows GUI, free
  • BKG Standard NTRIP Broadcaster v.0.1.5[32] - Linux commandline, free
  • BKG Professional Ntrip Broadcaster v.2.0.15[33] - €1000


See RTKLIB-compatible GPS devices.

Calibrated antennas

Trimble Bullet III

GPS-only (will probably also work for Galileo). '10cm UP' needs to be verified: http://gpspp.sakura.ne.jp/anteva/antmount.pdf

 G01                                         START OF FREQUENCY  
                      4.6 	-0.7 	99.1  NORTH / EAST / UP
Tallysman TWI3870+GroundPlane(D=100mm)
TWI3870+GP      NONE                                       TYPE / SERIAL NO 
    0.0                                                    DAZI                
    0.0  80.0   5.0                                        ZEN1 / ZEN2 / DZEN 
  G01                                                      START OF FREQUENCY  
     1.28     -2.27      7.05                              NORTH / EAST / UP   
  NOAZI    0.00   -2.73   -3.70   -3.73   -3.22   -2.72   -2.36   -2.29   -2.67   -3.31   -4.26   -5.19   -5.73   -5.65   -4.28   -0.91    5.57
Tallysman TW34xx+GroundPlane(D=100mm)

Needs to be compared with TWI3870...


  • The u-blox driver can't decode raw TRK-* data if the rate is > 10Hz and in general for the periods which are not a multiple of 100 ms (for example T=250 ms for 4 Hz)
  • The u-blox driver does not support options for selecting/filtering the raw data packets (RXM-RAW/TRK-TRKD5, RXM-SFRB/TRK-SFRB)
  • "IERS Conventions Software License" is not compatible with GPL.

Missing features

Application programs


Antenna phase characteristics Application (ANTApp) is using the Qt toolkit and is distributed under GPLv3.


Configure the serial port (ACM, USB et al.) before using the input/output serial ports

$ stty -F /dev/ttyACM1 clocal raw
$ stty -F /dev/ttyUSB1 clocal raw speed 115200

str2str supports RTCM(3) output:

$ str2str -in ntripcli://user:password@host.domain:8000/MNTPNT -out file:///tmp/logfile.rtcm -t 1

Creates raw ubx log (filtering? vs. cat /dev/ttyACM1 > /tmp/logfile.ubx )

$ str2str -in file:///dev/ttyACM1#ubx -out file:///tmp/logfile.ubx

Exports raw ubx data to localhost port 22101 (see also 'socat')

$ str2str -in file:///dev/ttyACM1#ubx -out tcpsvr://:22101

This call simulates netcat/socat

$ str2str -in tcpcli://IP:22101#ubx -out file:///tmp/logfile.ubx


Creates RINEX output from RTCM input:

$ convbin -v 3.02 -r rtcm3 -od -os -d /tmp logfile.rtcm


The commandline parser of rnx2rtkp is pretty primitive, so in complex cases you are forced to create a full-blown .conf file. Quick and dirty postprocessing in different modes:





Do not forget to set executable permissions to the shell scripts:

misc-startcmd      =../rtkstart.sh
misc-stopcmd       =../rtkshut.sh

Util prec2nav

Util geniono

Util rnx2rtcm

Util strmon

Util simobs


Differential code+phase static positioning relative to an IGS station. Short base vector length.

Base station: EUREF/SVTL
Date: 2013-12-28 (WEEK=1772 DOY=362)
Time interval: 100 ms
Time alignment: 1s
Distance to base station: ~0.8 km
Geoid model: EGM2008
Measurement site: near SVTL
Antenna: Trimble Bullet III 3.3V
Receiver: EVK-6T-0


Differential code+phase static positioning relative to an IGS station. Medium base vector length.

Base station: EUREF/SVTL
Date: 2013-12-22 (WEEK=1772 DOY=356)
Time interval: 100 ms
Time alignment: 1s
Distance to base station: ~20.2 km
Geoid model: EGM2008
Measurement site: Suulajärvi
Antenna: Trimble Bullet III 3.3V
Receiver: EVK-6T-0


Differential code+phase static positioning relative to a base station with known ETRS89 coordinates. Short base vector length.

Base station: GREF/MUEJ
Date: 2014-11-08 (WEEK=1817 DOY=312)
Time interval: 100ms decimated to 30 s
Time alignment: 30 s
Distance to base station: ~2.6 km
Quasigeoid model: GCG2011
Measurement site: GRP_MUENCHEN
Antenna: Tallysman TW3440
Receiver: EVK-M8N-1

Supported file formats

  • RINEX 2.10-2.12, 3.00-3.02
  • RTCM 2.3, 3.1, 3.2
  • BINEX (only input, partial)
  • NTRIP 1.0
  • NMEA 0183 (only output)
  • SP3-c (only input)
  • ANTEX 1.4, NGS PCV (input, partial, hardcoded elevation angle step=5°)
  • IONEX 1.0 (only input)
  • EMS 2.0 (only input)


The source code is hosted on github [34].

Mailing list

  • FOSS-GPS -- Open Source GPS-related discussion and support[35]


  • H. Lanzendörfer (2007): Zum Einsatz von low-cost GPS-Empfängern für kontinuierliches Monitoring eines Rutschhanges [36]
  • T. Takasu and A. Yasuda (2008): Evaluation of RTK-GPS Performance with Low-cost Single-frequency GPS Receivers[37]
  • T. Takasu (2009): Evaluation of GPS L1 Antenna/Receivers[38]
  • T. Takasu (2009): Development of the low-cost RTK-GPS receiver with an open source program package RTKLIB[39]
  • N.N. (2009): Analysis of dynamic generation and real time transmission of RTCM 3.1 geodetic transformation messages[40]
  • N. Zinas (2010): Development and assessment of a new rover-enhanced network based data processing strategy for Global Navigation Satellite Systems [41]
  • R. Jäger and S. Kälber (2011): The new RTCM 3.1 Transformation Messages – Declaration, Generation from Reference Transformations and Implementation as a Server-Client-Concept for GNSS Services[42]
  • W. Stempfhuber, M. Buchholz (2011): A Precise, Low-Cost RTK GNSS System For UAV Applications[43]
  • D. Grieneisen (2012): Real Time Kinematic GPS for Micro Aerial Vehicles[44]
  • M. Qu (2012): Experimental studies of wireless communication and GNSS kinematic positioning performance in high-mobility vehicle environments [45]
  • B. Wiśniewski, K. Bruniecki, M. Moszyński (2013): Evaluation of RTKLIB's Positioning Accuracy Using low-cost GNSS Receiver and ASG-EUPOS.[46]
  • J. Stähli und S.Keller (2013): Präzise Positionsbestimmung mit Low-Cost-GPS und Postprocessing [47]
  • T. Takasu (2013): PPP Ambiguity Resolution Implementation in RTKLIB v 2.4.2[48]
  • W. Hedgecock et al. (2013): High-Accuracy Differential Tracking of Low-Cost GPS Receivers [49]
  • S. Carcanague (2013): Low-cost GPS/GLONASS Precise Positioning Algorithm in Constrained Environment[50]
  • S. Carcanague, O. Julien, W. Vigneau, C. Macabiau, G. Hein (2013): Finding the right algorithm - Low-Cost, Single-Frequency GPS/GLONASS RTK for Road Users[51]
  • V. Elisson and G. Gässler (2014): Low cost relative GNSS positioning with IMU integration[52]

External links

Other similar free software