PPK with RTKLIB. Trouble shooting and questions

My objective seems easy enough. I want to make sure I can set up my base and allow it to log for at least 30 minutes (which has been recommended in other threads) and then survey a few points with my rover. Afterwards, I would bring my base RINEX and rover RINEX logs into RTKPOST, and perform PPK which should make my rover output files to have very accurate positioning RELATIVE to the base. I expect to be too far from CORS type stations to use that data in real projects, so I want to make sure I can get great relative position using PPK. (Note: I am not interested in RTK for this. THe LoRa radio has proven to be unreliable for my purposes)

Repeatability is the key objective here, so I set tried to test that.


I set up my base, and let it log in static mode using GPS, GLONASS and SBAS. I positioned three GCP tagerts within 10 meters of the base. While the base logged, I started the rover using the same settings as the base. I logged RAW DATA over each GCP. I logged the raw data by activating the raw logs for 30 seconds while over each GCP, and stopping logging before moving to the next GCP.

I logged the 3 GCPS, and called this series Run A. I then waited ten minutes and performed the same sequence of logging, calling this series Run B.

I then shut off the rover, and ended the raw logging on the base and shut that down as well.

I then completely restarted this test. I turned the base back on and started logging a new raw files and logged over the GCPS for 2 more runs, called Run C and Run D. Thus, I had logged each GCPS 4 times. As I restarted the base between RunB and Run C, I intended to compare RunA to RunB, and compare RunC to RunD. If these were within a few cm after PPK, I would then compare RunA to RunC, etc.

Post Processing

I organized my data, and set out to do PPK on the raw logs for each test. The files I used were my Rover 0.bs, my Base .obs, and my Rover .nav.

My RTKPost settings looked as follows. (Note, I tried a few different positioning modes. Including Static, Kenimatic, and start Start Static)






These seem to be the settings that I need to set for this process, based on input from other threads.


So, the difference between RunA_Target2 and RunB_Target2 is huge. Like, 2.5 (remember, these are the same target, using the same base station files, The raw rover data was simply logged about 10 minutes apart). I am seeing similar difference between all of my logged positions that I want to get within a few cms of each other (IE, RunA_Target1 close to RunB_Target1, and RunC_Target1close to RunD_Target1)

Here is what I am seeing after PPK and bringing it into QGIS. The Green Clusters are the Q1 solutions for RunA_Target2 and RunB_Target2. The pink dots are Q2 or worse solutions. Again, the difference between the Q1 clusters is 2.5 meters, which is equivalent to what I would expect if I simply logged in float.

Is my thinking here wrong? Is there something wrong with my settings? Is 30 minutes base logging time and 30 second logging over the points of interest with the rover a proven workflow, as I’ve seen in some of the other threads?

Help is appreciated. Thank you.

An extra question.

Do I need to limit my base station RINEX files to the times that the rover was collecting? Essentially partitioning it into several files?

I ask based on other threads which identified this as part of the process? It seems those threads are older, as they required using RTKCONV to change the raw files to RINEX format (which is now of course a feature of ReachView)

It seems silly to me for this to be the case. I would expected RTKPOST to be able to match the time stamps the base and rover and process accordingly. But if that is what is required, I’ll have to adopt the practise.

The first thing I would check is the base position in ‘positions’ tab in RTKPOST. Yours is set to RINEX header. This seems like not something very obvious, but RINEX header only contains “approximate position”. It is generated during the logging process itself, meaning it will be slightly different even if you log the same place twice.

My suggestion would be rerunning both post-processing sequences, but with the base position set to “average”. Please report back with the results.

1 Like

My PPK results are looking pretty solid now that I am using a continuous raw log on the rover. Woohoo!

A few of my points are not getting a Q1 fix after PPK, so I am trying to improve results by looking at cycle slips, and removing satellites where I think it may help.

It seems I had some interrupted connections with the sats where the line down the middle falls. This is right on the GCP I surveyed that finished with a Q2 float solution.

I want to filter out some of those sats for the specific interval where the connection is poor, but I can’t find that option in RTKPOST. I can only find the window to turn off an entire satellite completely (or, I don’t know how to enter a time interval in the window shown below) Anyone know how I can do this?


The start and end time settings are right at the top of the screen in RTKPOST. Maybe you will have to process a few chunks separately.

Also, don’t be afraid to try playing with the SNR Mask settings in your screenshot above.

Cool, thanks!

I will play around with the SNR mask!

This topic was automatically closed 100 days after the last reply. New replies are no longer allowed.