|Author:||T. Takasu and other contributors.|
|License:||BSD 2, GPL >=v3 for versions before and including 2.4.2b11|
|Platforms:||Windows, Linux, Android|
|Programming language:||ANSI C|
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.
- 1 Realtime and post-processing modes
- 2 Usage
- 3 Hardware
- 4 Bugs
- 5 Missing features
- 6 Application programs
- 7 Examples
- 7.1 Differential code+phase static positioning relative to an IGS station. Short base vector length.
- 7.2 Differential code+phase static positioning relative to an IGS station. Medium base vector length.
- 7.3 Differential code+phase static positioning relative to a base station with known ETRS89 coordinates. Short base vector length.
- 8 Supported file formats
- 9 Source-code
- 10 Mailing list
- 11 Research
- 12 External links
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.
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.
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 in .sp3 and .clk that can be downloaded using RTKGET or wget/curl
- RINEX file from a nearby base station
- 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) from the network you want access to:
|Name||Country||Caster address||Application Form||Reference Station locations|
|IGS-IP by BKG||Germany||||||international base stations|
|IGS-MGEX by BKG||Germany||||||international base stations using GPS, GLONASS, Galileo, QZSS|
|EUREF-IP by ASI||Italy||||||mostly European base stations|
|EUREF-IP by BKG||Germany||||||mostly European base stations|
|EUREF-IP by ROB||Belgium||||||mostly European base stations|
|RBMC by IBGE||Brazil||||||mostly Brazilian base stations|
|ASG by EUPOS||Poland||||||Polish base stations|
|Trignet by National Geospatial Information||South Africa||||||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 p. 27 (f.ex. 1002(1), 1019(1)).
You also need to set up an NTRIP caster:
- Lefebure NTRIP Caster - Windows GUI, free
- BKG Standard NTRIP Broadcaster v.0.1.5 - Linux commandline, free
- BKG Professional Ntrip Broadcaster v.2.0.15 - €1000
- 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.
- Generation of RTCM2 messages. pyUblox https://github.com/tridge/pyUblox/blob/master/RTCMv2.py implements messages Type1 and Type3 for U-blox receivers.
- Support for geoid/quasigeoid models in the following formats: Trimble GGF, Topcon GFF, Leica GEM, Carlson/SurvCE GSF,Javad BIN,Pinnacle JFF
- Support for 14-parameter ITRS/ETRS coordinate conversion [ETRS89], [ITRF2008], [ITRF2000].
- Support for Transverse Mercator projection (UTM and Gauß-Krüger with 7-parameter datum shifts)
- SiRF is not supported
- RTCM3 messages 1014,1015,1016,1017 (Network RTK)
- RTCM3.1 messages 1021/1022(helmert & molodenski-baderkas),1023/1024 (residual grid),1025/1026/1027 (projection) Coordinate Transformation is not supported [RTCM3.1 geodetic transformation], [THE NEW RTCM 3.1 TRANSFORMATION MESSAGES]
- GALILEO ambiguity resolution
- ANTEX for non-spherically symmetric antennas. Support DZEN != 5°
- SINGLE_STATIC mode
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:email@example.com: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
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 .
- FOSS-GPS -- Open Source GPS-related discussion and support
- H. Lanzendörfer (2007): Zum Einsatz von low-cost GPS-Empfängern für kontinuierliches Monitoring eines Rutschhanges 
- T. Takasu and A. Yasuda (2008): Evaluation of RTK-GPS Performance with Low-cost Single-frequency GPS Receivers
- T. Takasu (2009): Evaluation of GPS L1 Antenna/Receivers
- T. Takasu (2009): Development of the low-cost RTK-GPS receiver with an open source program package RTKLIB
- N.N. (2009): Analysis of dynamic generation and real time transmission of RTCM 3.1 geodetic transformation messages
- N. Zinas (2010): Development and assessment of a new rover-enhanced network based data processing strategy for Global Navigation Satellite Systems 
- 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
- W. Stempfhuber, M. Buchholz (2011): A Precise, Low-Cost RTK GNSS System For UAV Applications
- D. Grieneisen (2012): Real Time Kinematic GPS for Micro Aerial Vehicles
- M. Qu (2012): Experimental studies of wireless communication and GNSS kinematic positioning performance in high-mobility vehicle environments 
- B. Wiśniewski, K. Bruniecki, M. Moszyński (2013): Evaluation of RTKLIB's Positioning Accuracy Using low-cost GNSS Receiver and ASG-EUPOS.
- J. Stähli und S.Keller (2013): Präzise Positionsbestimmung mit Low-Cost-GPS und Postprocessing 
- T. Takasu (2013): PPP Ambiguity Resolution Implementation in RTKLIB v 2.4.2
- W. Hedgecock et al. (2013): High-Accuracy Differential Tracking of Low-Cost GPS Receivers 
- S. Carcanague (2013): Low-cost GPS/GLONASS Precise Positioning Algorithm in Constrained Environment
- 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
- V. Elisson and G. Gässler (2014): Low cost relative GNSS positioning with IMU integration