RTKLIB documentation tips

The RTKLIB software package has an enormous amount of capability and flexibility. Between all of the different applications, the configuration parameters and input options, it is very powerful, but it can also be a little difficult to navigate at times.  I get a lot of questions on how to do various tasks in RTKLIB so I thought it would be worth going over the available documentation as well as mentioning a couple of tips and tricks for finding information on some of the less documented features.

The first place to look is the official RTKLIB manual .  It is well written and fairly thorough, at least in many parts.  If you are using  RTKLIB and have not been through the manual recently (or have never read it), it is well worth going back and taking another look.  Almost every time I go back to it, I find some detail I have missed in the past, not because it is difficult to find, but just because there is so much information in there.  Especially when using the GUI apps there is a tendency to think the manual is not necessary since everything should be intuitive, but in this case there are many features that are not so obvious.  For example, at least to me, it is not overly intuitive that the tiny little unlabeled square (the RTK Monitor Window) above the Start/Stop button in the image below is one of the most important buttons in RTKNAVI and will give you access to up to 35 different windows of useful information.


Here is an image of  a few of the various monitor windows I frequently find useful.


Click on a few more of the small inconspicuous triangles, squares and rectangles on the RTKNAVI, and you can change the solution coordinates to pitch/yaw, open up sky views for the base and rover, open up a baseline compass heading plot, and many other things.  If you haven’t read the manual, it’s easy to miss some of these options.


Unfortunately, although the manual has lots of useful information, both for the command line and GUI apps, it has not been updated in six years, so some of the newer features are not included.

This is especially true for the linux command line apps like STR2STR and RTKRCV.  One tip for getting more up to date information for any  of the command line apps is to use the embedded help messages, since, for the most part, these have been kept up to date.  For example,  let’s first look in the manual at the stream options and command line options for the STR2STR app.  We find that there are 6 stream options and 13 command line options listed.



Now let’s bring up the embedded help message in STR2STR by typing “str2str -h” and we get the following:



Notice that the number of stream options has increased from 6 to 8 and the number of command line options from 13 to 24.  This is a significant number of additional options to work with!

Another thing to be aware of  is that all of the RTKLIB apps are using a common core code, and for the most part it is only the user interfaces that are different.  This means that if a feature is available in one app, say for example RTKNAVI, then it is very likely also available in another app, say RTKRCV.  It may just be harder to find information on how to enable it there.  However, if you know what you are looking for, and you know that it’s most likely there somewhere, then this usually makes it easier to find.

Another resource that can be helpful is this post I wrote a while back which includes description of most of the additional features I have added to the demo5 version of RTKLIB to optimize it for low cost receivers, as well as additional information on all of the previously existing config parameters that I typically find useful to modify.  This post is not guaranteed to be fully up to date but I do try and update it with new information as I add new features to the demo5 code.

The above resources will be enough to answer many questions but sometimes they will not be enough and you will need to dig a little deeper.  The next step is to look at the source code which is available on Github, both for the official and the demo5 versions of RTKLIB.  The first place to look is the “options.c” file as it lists all of the supported input configuration parameters as well as their valid input values in a format that is easy to read.  Here is the beginning of the tables of valid option values and parameters.


Going through these tables, I found about a dozen parameters in the official code that are not mentioned in the manual and a few more in the demo5 code that are not mentioned in my documentation.

If you still need more information, the next level is to look at the top-level source file for each app.  For example in the “rnx2rtkp.c” file you will find the help menu listed at the top and then in the main() function lower down you will see where the options are actually parsed.  This should answer most questions.  You can go even deeper into the code if you have to, but I will warn you, things do get a bit more challenging once you get to the next layer.

The last tip that I can offer is that I have written about a number of RTKLIB features in my posts over the last few years, so using the search window at the top right corner of this page will occasionally bring up some useful information.

Anyway, hope at least some of this is helpful to those of you trying to learn a little bit more about some of RTKLIB’s less well documented features.


10 thoughts on “RTKLIB documentation tips”

  1. Hi dear,

    Congratulations for your work.
    Do you know base mode in Reach Views?


    (…) Average¶
    By default Reach will average base position every time it starts. This feature significantly simplifies initial setup in a new location, however it will not provide an accurate absolute coordinate.

    ReachView has a unique feature that allows it to determine base station position while working as a rover from another base. This is done by obtaining RTK Fixed solution, averaging it over a period of time and this way obtaining an accurate position for the base. A typical scenario would involve setting up a local base station by determining its coordinate from NTRIP and then broadcasting correction locally, thus reducing the baseline for rovers and improving positioning performance.

    If the reference station is too far away it is possible to average float and still improve the accuracy of the position.

    In case no correction is available when setting up base or absolute accuracy is not required averaged single coordinates could be used.

    Save averaged position to manual
    After you have successfully obtained averaged position you might want to save it for future use. Click on the “save coordinates” icon and position will be saved as if it was entered in manual mode. Now every time Reach starts it will broadcast this position in correction messages.

    Repeat averaging
    If you would like to restart base position averaging process you can click on “repeat averaging” icon.This is especially useful in a situation when you accidentally moved Reach during averaging. (…)

    This is make the base position average fix by set time, send for Rover and logger.

    Is possible make this is with str2str?



    1. Hi Neilon. Str2str is only a stream server, it does not have the capability to calculate position solutions so it will not do any of these things. You would need to use rtkrcv which can calculate position solutions. However, it does not have most of these functions built in, you would need to post-process the solution data.


  2. Hello, Thank you for your extensive work. Im a novice and Im finding your blog very helpful in finding my feet.
    Im working with an old ublox NEO-7P. I dont have a base station of my own and intend to use the module either standalone or with an NTRIP caster.
    The module seems to be working fine in u-center – outputs nav solutions, raw data and satellite information.
    The problem seems to be in getting it to output a solution in RTKNavi.
    I’ve followed the steps in your blog and at most, RTKNavi only shows me the signal strength (all grey bars, no green) of each satellite with no ‘Single’, or ‘fix’ message. The lat,long and alt remains at 0,0,0 .
    I should mention that Im indoors. However, since I can actually see the solution in u-center and via a raw stream in raspberry pi, I would expect that RTKNavi atleast outputs a ‘Single’ solution.
    Im struggling to get this to work and would appreciate any pointers in the right direction.

    Thank you


    1. Hi Suraj. When the SNR bars are all gray in RTKNAVI, this usually indicates that the navigation messages are missing from the input stream. You can verify this by opening the RTK Monitor window in RTKNAVI and selecting “(1) Rover” or “(2) Base Station” from the window type box in the top left corner to see the incoming receiver messages and “Nav GPS” from the window type to see which satellites have valid navigation data.


      1. Thank you very much for your reply. I managed to get an output (Single) from RTKlib. I believe I couldnt before because of incorrect startup config messages that I had entered. For the benefit of others who might be using the NEO-7P, the messages that worked for me on the NEO 7P are:
        !UBX CFG-RATE 100 11 #10 Hz
        !UBX CFG-MSG 2 16 0 0 0 1 0 0 # RXM-RAW
        !UBX CFG-MSG 2 17 0 0 0 1 0 0 #RXM-SFRB

        Entered this configuration and got an output solution.
        Again thank you very much for your help.


        1. Hello
          In the RTKlib Touchcreen GUI we use these options on str2str to get a “raw” ubx file:
          st2str -in serial://ttyACM0:115200:8:n:1:#ubx -out rover.ubx”
          In our last version we add a automatic capture and post processing with CORS and rgp.ign.fr stations (france and north america)


    1. Hi Catur. To get the raw observations and navigation messages from the F9P you need to enable the UBX-RXM-RAWX and UBX-RXM-SFRBX messages. You can do this using the u-blox u-center app and then save to flash. You may also be able to enable these messages with the CMD window messages in RTKLIB, I haven’t actually tried this with the F9P.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: