Rtklib exe

This will give you the shortest baseline, maximum number of usable constellations, and no issues with the Glonass hardware biases that come from using unmatched receivers. To do this, you will first need to determine the precise location of your local base receiver. Of course, If you have a CORS station near enough, it is also possible to run solutions directly from your rover to the CORS base but I generally opt for the local base since the solutions will be more accurate and more robust.

For the most part, running a PPK solution against a CORS base is very similar to the local base solutions I describe in many of my other posts but there are a few important differences that I will try to go over in this post. The first step is to find a nearby CORS station. In the U. Zoom into your local area and if you are lucky you should see something like the screen shot below with several nearby choices. If you are using a dual frequency receiver and solving for a stationary rover you can usually use more distant stations.

Be aware that longer baselines will increase accuracy errors so it is a good idea to run longer solutions and average the results from multiple stations if possible. Station sample rate is less important than distance and number of constellations but a higher sample rate is always better if you have the choice. These are usually run by the state department of transportation and their data is normally free although you may need to sign up to access it.

There is a slightly dated state by state list available here. If your base station is sampling slower than a 1 second rate then I often find that interpolating between base observation samples improves the solution.

Since the receiver manufacturers will almost always be different between base and rover in these solutions, you will usually need to deal with the Glonass hardware biases. I describe the different options to account for these in detail in this post so I would recommend reading or reviewing that post for the details. In some cases, this will be good enough to get a fixed solution. However, you are more likely to get a fixed solution if you account for the biases directly.

Again, see the above post for the details on how to determine the correct biases and the table of biases by receiver manufacturer. The receiver manufacturer will be listed in the header of the base rinex file.

It is important to keep in mind that the accuracy of the solution is going to get worse as the distance to the base station increases as shown in this chart taken from a Novatel tutorial.

If you are using a single frequency receiver then there are usually no good alternatives to using a distant CORS station. The best you can do is collect multiple longer data sets from multiple stations and average the results. If anyone else has any additional tips or questions, please add them to the comments below. During that time I have added a number of features and enhancements to the code with a focus on low-cost receivers primarily u-blox and moving rovers while at the same time keeping synced with the latest 2.

For several years, almost all the development activity was on the 2. In Janthere was a merge of the 2. Since then development has continued on 2.

rtklib exe

For most of my data analysis posts, I focus on a single data set, spending a fair bit of time to make sure I am only analyzing the usable parts of the data, possibly tweaking the configuration file for that specific data, and digging into any issues that crop up.

I picked nine raw data sets, all with u-blox M8T receivers and a moving rover, made no effort to filter out bad data, and used a single generic configuration file for all nine data sets.

For each solution, I converted the data from u-blox binary to rinex using the same code version as I did for the solution, since the different codes will affect this conversion as well as the solution. Not only does this tend to produce better results, but the results also have higher confidence since RTKLIB compares the forward and backwards solutions, sample by sample, and downgrades any sample where the solutions in both directions are fixed and the results differ by more than four standard deviations.

This tends to do a good job of detecting and rejecting any false fixes in the results. However, it is not foolproof.Please see some of my more recent posts for more up to data information.

Specifically though:. Choose either the main branch 2. I am using 2. The repository includes all the executables, so there is no need to build any code before running it. I am using a combination of the two. This is for two reasons. I use simple Matlab wrappers to call the CUIs which save all the configuration, input, and output information to a separate folder. Python wrappers would probably work just as well and it is available for free, but I already have Matlab and again am more familiar with it.

See pages of this document for an explanation of exactly what these numbers do. We could have configured these with the Ublox eval software in the last post, but I thought it was easier to do it all in one place, and also more consistent with other references. If everything is working properly, it should look something like this:. Like Like. Hi Wark. All of the u-blox command decoding is handled in the ublox. Hi, would using the raw data for post processing give you a power consumption advantage on the module?

RTKLIB tutorial

Hi Niek. My guess is that the power used in computing the solution is small compared to the power used to collect the raw observations but I have not measured these directly. I am using ucenter Hi Rose. Hi Em. Both the u-blox M8T and F9P have an on-board flash memory that can be used to save and retain configuration settings even after the module has been powered down. Hi Bob. This is one way to configure the u-blox receiver to output raw data messages.

Another way would be to use the u-blox u-center app. Great article! Hi ChampiX. The configuration messages include checksums so you will need to generate those yourself if you are communicating directly to the receiver without RTKLIB.

All the message details are described in the M8T receiver description document including how to generate the checksums. Hi Thibaudet You can use the u-blox u-center app to set up your receivers to output this message and save to flash or you can look in the u-blox M8 Receiver description document available online from u-blox to modify the M8T command files for the M8P.

Maybe the M8P has these as well, the M8T does. Hi Cynfab. Good point. From the NeO-M8P data sheet:. If this is true, then the M8T command files should work with the M8P without modification. But I would trust the data sheet.

Mine is a strictly embedded project and I need to implement all the coding on microcontrollers.In applications like precision agriculture, where the solution is part of a real-time feedback loop, RTK is obviously a requirement, but in many other applications there is no need for a real-time solution.

For example, drones are often used for collecting photographic or other sensor data but only need precision positions after the fact to process the data. This is selected in the configuration and can be set to forward, backward, or combined. Forward is the default and this is the only mode that can be used in real-time solutions. In forward mode, the observation data is processed through the kalman filter in the forward direction, starting with the beginning of the data and continuing through to the end.

In Combined mode, the filter is run both ways and the two results are combined into a single solution. There are two advantages to a combined solution over a forward solution. First of all, it gives two chances to find a fix for each data point. It may cause both the forward and backward solutions to lose fix but they will lose fix on opposite sides of the anomaly. By combining the two solutions we are likely to get a fix for everywhere except right at the anomaly. Another case where it often helps is in recovering the beginning of a data set.

With a forward solution, you would need to guarantee that nothing important happened during that five minutes, but with a combined solution, the backward pass will normally provide a fix all the way to the very beginning of the data set so there is no lost data. The second advantage of the combined solution is that it provides an extra level of validation of the results.

For each solution position point there are three possibilities; both passes are float, one is float and one is fix, or both are fixed. If both passes generate a float position, then the combined result will be a float with a value equal to the average of the two positions. If one is float, and the other is fix, the float is thrown away and the fix is used. If they differ by less than four sigma, then the result will be a fix, otherwise it will be downgraded to a float.

Either way, the value will be the average of the two positions.

PPK vs RTK: A look at RTKLIB for post-processing solutions

This degrading the solution type when the answers from opposite directions differ provides an increased confidence in the solution, at least for points for which we got two fixed values.

I will show a couple examples of the differences between forward and combined modes. The first example is a more typical case and demonstrates how combined mode will normally give you a higher fix percentage while at the same time increasing confidence in the solution. In the position plots below, the top was run in forward mode, the middle in backwards mode, and the bottom in combined mode, all in continuous ambiguity resolution mode.

As you can see the forwards and backwards mode solutions are not bad but both have gaps of float in the middle as well as floats during the initial acquisition.

This second example comes from a data set posted on the Emlid Reach forum with a question on why the combined solution was worse than the forward solution. In the plots below, the top solution is forward, the middle is backward, and the bottom is combined. This data was GPS and SBAS only, so had a fairly low number of satellites, also included a mix of poor observations and the solution was run with full tracking gain i.

Both forward and backward runs found fixed green solutions and tracked them all the way through the data set. However, at least one of them was most likely a false fix, causing the fix to be downgraded to float yellow for most of the combined solution as can be seen be seen in the bottom plot.

Collecting raw Ublox data with RTKLIB

To confirm this, the plot below shows the difference between the forward and backward solutions. As you can see, the two differ by a fairly substantial amount and it is not possible from this data to know which one is correct.

In this case, turning off fix-and-hold and running ambiguity resolution in continuous mode sheds some light on what may be going on. The plots below are again forward, backward, and combined. This time the forward solution loses fix early on and never recovers it, whereas the backwards solution maintains a fix through the whole data set and is probably correct since without fix-and-hold enabled, it is very unlikely to stay locked that long to an incorrect solution.

The backward solution is also consistent with the beginning of the forward solution, since the combined solution remains fixed in the early part of the data set where both forward and backward solutions are fixed. Again, this can be confirmed by looking at the difference between the forward and backward solutions. In this case they agree everywhere that both are fixed. As this example demonstrates, if post-processing is an option, it often makes sense to run in combined mode with continuous ambiguity resolution instead of forward mode with fix-and-hold enabled.

The additional pass will increase the chances of getting a fixed solution without the risk of locking onto a false fix that fix-and-hold can cause.With previous generations of u-blox receivers there has been a lower priced option available without an internal RTK engine, such as the popular M8T in the generation 8 modules.

This does not appear to be the case with the new dual-frequency generation 9 modules, as the F9T, without internal RTK solution, is currently priced higher than the F9P with internal solution. Post-processed PPK solutions have several advantages over real-time solutions. The rover hardware is simpler, less expensive, lighter, and lower power since post-processing does not require a real-time data link between base and rover.

Post-processed solutions also tend to be more robust than real-time solutions, both because they are not subject to data dropouts in the base data link and because they allow for solution techniques that take advantage of both past and future observations, not just past observations. When the solution is not required in real-time, it often makes more sense to collect the data first and then process it later.

To process an RTKLIB solution, we will need raw observation messages from both rover and base receivers and navigation data messages from one of the receivers.

The receivers do not output these messages by default so we will need to configure them to do this.

rtklib exe

Instead we will download the u-blox u-center app and use this to configure the receivers, then save the results to the on-board flash. If you have any trouble with the above summary, you might find this YouTube video from Robo Roby useful.

It is intended for setting up the F9P for real-time solutions, not post-processing, but there is a lot of overlap between the two. I do not believe the official 2.

This was just meant to be a quick summary of the process. For more details please see the references below. I have been playing with them over the past few weeks and plan to share my experiences with them over a series of posts. The first issue I ran into with this experiment, however, is that both receivers will only provide an RTK solution for real-time data, neither have the capability to post-process previously collected data.

This meant that I needed a way to provide a real-time stream of dual frequency base station data to the receivers. Fortunately, I have fairly good cell phone coverage in this area so I was able to rely on my cell phone for the data link. For more details, there is a good description here. Also missing in this diagram is the cell phone which should be in between the internet and the rover PC.

The amount of free base station reference data that is available online on a real-time basis is a fair bit more limited that what is available after the fact for post-processing. The service is free if the data is used for educational purposes and appropriately attributed.

Most of their stations are on the west coast of the U. There are other networks available in other parts of the world that can be found by searching online. To access the UNAVCO data I had to request access through email but the process was very simple and within a couple hours of my request I was all setup with an account and password.

Once I had my account set up, I used RTKLIB on my laptop computer to collect the data from the internet and stream it to the rover receiver over a serial port. If I were doing this experiment within range of a wireless router then I could leave the computer connected to the wireless.

Getting started with RTKNAVI

In this case though, I wanted to roam outside the range of my home wireless. To do this, I enabled a hot spot on my cell phone and logged into that with my computer.

For other networks, the mountpoint details may be a little different.

rtklib exe

Before doing the configuration, I had connected the receiver to the laptop using a USB cable. The details for doing this on the two receivers are a little different but fairly straightforward in both cases. You may also need to specify the exact base station location manually or the receiver may be able to get it from the data stream depending on the receiver and NTRIP stream details.It still happens to me all the time, almost always because I have made a silly mistake somewhere.

For a new RTKLIB user, it can be quite difficult to figure out why they are not getting a valid solution in cases like this. In this post, I will demonstrate some examples of common errors and some techniques to help identify them.

However, rather than halting and letting the user know there is a problem, RTKNAVI just runs through the whole solution without ever reporting either an error or a valid position.

This will bring up the RTK Monitor window. This should be enough information to track down the problem fairly quickly. Often this will be the case. This is covered in more detail in the post-processing examples further below.

rtklib exe

If this is the case, then all the SNR bars will be gray. When navigation data is available, the bars will be colored as in the image above. A more general troubleshooting technique that will work for either real-time or post-processing and for GUI or command line RTKLIB applications is the debug trace file.

For simple errors, level 2 is enough and will produce a less overwhelming amount of information. For more detailed information about the GNSS solution, especially the ambiguity resolution, level 3 is better. For more details about the communication streams, level 4 can be useful. Level 5 includes many of the solution matrices and is too detailed for most general debug.

Level 1 only contains the error messages available in the error window and is not useful. I usually set it to level 3 since I am often looking at the details of the ambiguity resolution, but for simple debug I would recommend starting with level 2 and that is what I will use in the examples below. Next, I will intentionally make some silly mistakes and show how they appear in the error window and the trace file.

To keep the example simple I will use files in the root directory, with names: rover. In this first case, I have made a typo in the name of the. Again, the solution halts almost immediately but in this case the error message in the error window is much less useful. Not only does it not tell me which file has a problem, but it also suggests there is something specific wrong with the input data, not that the file is completely missing.

Fortunately, clicking on another tiny unlabeled square circled in red below brings up the trace file, assuming trace debug was enabled as described above. This tells us exactly what went wrong, that the input rover observation file could not be opened. For the next example, I will correct the typo in the file name but then set the location in the base rinex file header to all zeros.

This is another common problem and usually happens because the rinex file was generated by RTKCONV or other application from a binary receiver output file that did not contain navigation messages. Without navigation information, RTKCONV can not estimate the receiver location and sets the approximate position field in the rinex header to all zeros.

Again, the solution halts almost immediately, and the error message is identical to the previous case. However, looking at the trace file, there is now no mention of a file open error. With just the error, it is impossible to tell these two case apart, but by looking at the warnings as well, it is fairly easy to differentiate them. Another fairly common error is to use the wrong base observation file.Precision GPS means achieving position accuracies of centimeters instead of the more typical meter results of standard consumer-grade GPS.

This is done by taking advantage of the carrier phase information from the reciever in addition to the pseudorange measurements. Traditionally this kind of accuracy has only been available from survey-grade receivers costing many thousands of dollars. Uses for high accuracy positioning include surveying, mapping, drones, precision agriculture, marine navigation, construction, open-sky warehouse management and sports feedback.

There are only a few companies offering low-cost GPS receivers with access to the raw measurements necessary for calculating precision solutions. Some of the lowest cost and most popular single frequency options are from u-blox. They are a well established company that also provides easy-to-use free evaluation tools useful for configuration and testing of their receivers and complete documentation. For those interested in dual frequency receivers, good low-cost options are available from SwiftNav, ComNav, and Tersus, among others.

This site offers information, resources, and tutorials for the users of low cost precision GPS. The demo5 version of RTKLIB, optimized for low-cost receivers, is available in the download section, along with many raw data sets. It is a fantastic resource, but the official version can sometimes feel like more of an academic toolbox than a practical engineering tool.

It includes additional solution features to deal with the sometimes very challenging measurements from lower cost receivers and is also optimized to work with multi-constellation solutions.

This is a good choice for those interested in learning more about GNSS technologies. It is also a solid solution for almost any real-time or post-processing high precision positioning needs. Skip to content.

Low cost hardware There are only a few companies offering low-cost GPS receivers with access to the raw measurements necessary for calculating precision solutions. Information This site offers information, resources, and tutorials for the users of low cost precision GPS.Up until now I have used RTKLIB entirely for post-processing previously collected data and have not tried to process any data real-time.

I first had to update the GUIs to add all of my additional input configuration parameters and options. This is not a very useful configuration, since the rover can only travel as far as the USB cable extends, but it greatly simplifies things, avoiding have to deal with radios or other real-time links while getting started.

I will assume you are using M8N receivers and my version of the code but much of this will also apply to the most recent 2. In the top left corner you will see what version of code you are running. If you are running my code, you should see the demo4 I need to update this to demo5 tag. In the top right corner are the menus for setting up the input, output, and log streams. We will start here. The red ovals below show what we need to change here.

It should be the only choice at this point. You should have downloaded this when you downloaded the executables. We run the base station at a lower sample rate since it is not moving and later we will need to relay this information over a real-time link which may have limited bandwidth. If you are not using the M8N receivers you will need to provide your own startup files. This will format the output to give us the distance between rover and base. Next we will set up the log files.

Enter file names for both logs. OK, that should take care of all of the data streams. Next we will set up the solution configuration options. Again, you should have downloaded this file with the demo5 executables. There is no need to enter the base station location if we are only concerned with relative distance between the rovers which is what we are doing in this exercise.

I have limited the number of averages for the base station location to one because allowing the base to move while we are running the solution can cause it to converge quite slowly.

If you were trying to calculate absolute position with any accuracy you would need to enter accurate coordinates of the base station in the position sub-menu. At this point, before we setup all the output windows, it would be a good time to verify the receivers are communicating properly with the laptop.


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *