Ultra-low cost precision GPS

I am using this blog to document my work with RTKLIB and in the hope it may prove useful to anyone else trying to get started with this excellent open source program.

I describe the blog as “ultra-low cost precision GPS”.   Several other blogs describe work on precision location with sub $100 GPS receivers but most if not all of these use relatively high quality antennas which can significantly increase the total cost.

The hardware I am using is available for $25 to $30 dollars total which includes both receiver and antenna.  I believe this hardware requires some enhancements to RTKLIB to improve robustness, and that is what I focus on in these blog posts.  As the blog has progressed I have expanded from just ultra-low cost to some slightly more expensive options including better receivers, antennas, and inclusion of radios.

There is a mix of information here, some of which is intended for those just getting started with RTKLIB and other posts that might be of interest for more advanced users.  For those just getting started, I suggest clicking on “Getting Started” listed in the categories section part way down the right hand side on the main page.  This will bring up all the posts I have geared towards a new user.  Unfortunately the most recent posts appear at the top, so you will need to scroll to the bottom and work your way up.

I would be very interested in hearing about other similar work, so please leave a comment or send me an email at rtklibexplorer@gmail.com if you are working in this area or if you have anything to add to any of the posts.  My goal is also to document as completely as possible the work I have done, so if there is something I have skipped over that would be of interest to others, please let me know, and I will try to add a post.

All of the code changes and configuration files described in my posts are available in my Github repository.  The most recent executables are  available here and most of the data sets I reference in the blog are  here.

A little about my background:  After 25 years in the disk drive design business I was ready for a change.  I was looking for something different enough to offer new challenges but not so different that I couldn’t leverage my previous experience.  Precision GPS turned out to be a natural fit since my specialty in disk drive design was precision positioning, both putting down the reference tracks in the manufacturing process, and minimizing errors in the drive while following them.  The scale is very different with GPS, millimeters or centimeters over kilometers instead of the nanometers over centimeters I used to work with but they also have much in common.  The details are all different of course, but the kalman filters at the core of RTKLIB are just extensions of the state-space estimators I used extensively in my previous life.   In addition I find many of the techniques and approaches I used to solve problems at the microscopic scale are very applicable at the macroscopic scale of GPS.  I considered going back to school to make the transition but eventually decided I preferred this format.  So far I have found the challenges extremely interesting and also very rewarding to be able to see other people use some of my results.  Eventually I will have to figure out how to make a living again, but for now I am happy doing this work for its educational benefits.





20 thoughts on “About”

  1. I wrote a step by step intruction for RTKLIB with the neo-M8N.
    Maybe its helpful for someone:

    Did also quite extensive tests with an RTK & IMU system for measuring athletes velocities during short distance runs. Therefore i got some quite challenging Basestation and Rover rawdata, collected with the neo-M8N and two Tallysman antennas (3430 and 27xx). So if you are interested….

    Sadly i am very busy atm so cant follow your work in detail, but hope that i can catch up with it later this year.
    What i red so far is great work, keep on going!


    1. Thanks Runner. Your tutorial looks very good, especially since it includes instructions for real-time positioning which I have not done yet. I’ve added it to the list on my Resources page.

      I’d like to take a look at your data to if you can send it to me at rtklibexplorer@gmail.com. Let me know if it’s OK to share it in my data library.


  2. Hi,

    Thank you for reply.
    Yesterday after posting query I went through your previous posts. Got idea of settings but haven’t tried it out. I’ll try out and let you know the results. Coming to real time processing, my application is basically to capture the position in real time while vehicle is in move, that’s why I am using real time processing. Do you think it will work?

    – Bipin


  3. Hi,

    I am new to RTKLIB and facing some issue while using it. I am using ublox 7P modules for base station and for rover. I have configured modules only for RAW data & SFRBX data, all NMEA messages are disabled (assuming we dont need them for RTKLIB). Please refer the screen shots for RTKNAVI settings.
    The satellite visibility is good but still I am not getting accurate position. Please let me know if I am missing any settings or how can I improve the accuracy and stability.

    Screen shots—- https://drive.google.com/open?id=0B-qSVxcGlbkKbjJKSlN2bFoweWs

    Thanking you in advance.

    Bipin Aadaki


    1. Hi Bipin. From a quick look at your screen shots it looks like you are using PPP mode. Everything I have done is in differential mode (Static or Kinematic) so I can’t help you much. I’ve detailed my setup in my first few posts, you might see if you can duplicate those as a starting point. I’d also suggest starting out with post-processing rather than real-time solutions to simplify the process and make it easier to analyze.


  4. Hi,

    Thanks a lot. I have ordered two cgs kits and lets see how it fares. BTW would you mind being in touch. I can share my results with you perhaps for the broader understanding. If you would like just drom me a hello mail at ashish_2083(@)yahoo(dot)com



  5. Hi,

    Thanks a lot for reply. I got it now after reading your blog again. The results look really promising !! Thanks again

    Just one last opinion from you. Ublox has two variant M8N that you used and M8T. Both have the capability to throw raw gps data. Then what is the main difference between them in terms of Kinematics. Is it so that M8T is more accurate due to better Radio/Crystal ?

    Or is it just the marketing trick to brand same chip under precision brand (M8T)



    1. Hi Ashish. Since M8N does not officially support raw GPS data, there is nothing available from Ublox describing the differences between M8N and M8T. I did just come across some comments on the Emlib forum from Tomoji Takasu with his observations on the differences between the two. The biggest difference appears to be that GLONASS ambiguity resolution works on M8T but not on M8N.


  6. Hi,

    Actually, I dont wish to use Cors base stations data as you did to RTK with Ublox data.

    I think what you did as this estimate relative position of one ublox relative to cors base and same for other ublox. And then you subtracted
    Both the estimated position to get the circle. And you got perfect circle !

    However, my scenario is this: I dont wish to use any CORs type base station. The reason being I dont have any near to my place.

    So I want to capture raw data from one ublox and use to do RTK with raw data from second ublox using nav file from the first.

    I guess, this is a bit different from the demo 1. I am yet to receive eval kits from ublox. Before that I wanted to have an good opinion if this setup will work or not not worried about accuracy thought at the moment.

    And I consider you an exepert now after reading you blog. BTW its very very informative and help me to understand RTK Lib better


    1. Hi Ashsih. I did use CORS base data in one of my posts just to confirm I could get good results with the more traditional base/rover configuration. In that case I am using one of my recievers as rover and a CORS station as base. In all my other posts and analysis, I am using one of the moving receivers as base and the other as rover and not using a CORS station at all.

      I’m glad you find the blog useful. But, please don’t consider me an expert! I’m learning this as I go, and just sharing what I find. I’m sure I am making many mistakes … I’m just hoping the real experts will help out if they see any serious blunders.


  7. Hi,

    Very quick reply ! Thanks . However, my application is little different. What you have is a base station some where far away from the two rovers. However, I wish to make one of the neo block as base station and other neo block as rover keeping the distance between then at 30 to 50 cm. Using correction from one neo to to differential with other neo with out using any other central base as you have done in you demo. Do you this setup will yeild ?

    Thanks man !



    1. Hi Ashish. In my data, both receivers are fixed about 35 cm apart on top of a car that is moving. One of the receivers is used as base and the other as a rover … there is no stationary base. As the car moves, the distance between the two receivers stays constant but the orientation changes. This causes the solution to be a circle with a radius equal to the distance between the receivers. I believe this is exactly what you are looking for. The compass heading would just be the angle of the position.


  8. Thanks for this sites !
    The “how-to” spirit is what was missing to RTKLIB…
    I’m currently doing my first tests with an M8T under Linux (Ubuntu), so CLI only for me😉

    So far I got very good results, with a base station nearby (2.5km). I’ll publish some data, but here is at least a tweet about my first test: https://twitter.com/cq94/status/714867234762584064
    Red = uncorrected track, Green = post-processed track… squares are 5x5cm
    The “fix” is on the right middle on the picture…


      1. Hi,

        I am new to RTK LIB or RTK for that matter. I need a very valuable insight from you. I don’t know if you have already addressed it in your blog (Pardon me for being a dummy)

        What I have is a rover and base separated by 30-40 odd cm and I wish to figure out the direction this setup is pointing to. Like a compass. Do you think this configuration might work ? Or this too short of a baseline to work with.


      2. Hi Ashish. Take a look at my demo1 results. The distance between the two receivers is about 35 cm (both are attached to the rover). I get very accurate results that could be used to generate quite precise compass headings.


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 )

Google+ photo

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

Connecting to %s