Code Monkey home page Code Monkey logo

simple-dgps's Introduction

Simple Differential GPS

Introduction to available technology

GPS is an widely used and relatively cheap technology, as with everything the price behaves proportionally to the performance. That said, a 20$ GPS module can achieve an accuracy of roughly 7 meters, in good conditions. A 70$ receiver does have a few advantages as for example in the variety of protocols or reading speed but none in accuracy.

There are a few technologies available which offer accuracy of up to a few mm, but those are not just expensive but also very costly to implement and use. Technologies such as RTK(Real Time Kinematic) that rely on phaseshift measurements to calculate the required pseudo ranges etc. cost up to a few thousand dollars and are very sensible, and dependent on at least 6 sats in order to be reliable.

Simple Differential GPS Approach

The aim of SDGPS is to find a cheap, accurate and easy to implement DGPS C++ lib solution. The accuracy the project is aiming for is 2-1 meters. The used DGPS technique is Code Range DGPS which corrects the pseudo range of each satellite. First the pseudo range correction is calculated by substracting the observed pseudo range from the calculated pseudo range (from ephemeris). If ephemeris data is available and the corrected pseudo range value is calculated, single point positioning is applied, to triangulate the final position.

Introduction to DGPS

Differential GPS or DGPS makes use of a nearby base station which knows its true position and calculates the difference in position to send that correction via. any means of communication to its clients. For example a rover which already has a GPS module on board which is accurate up to a few meters. With the corrections applied it can achieve accuracies of even a quarter of a meter, assuming it's in the range of the basestation.

RTK DGPS

Real Time Kinematic makes use of the phase rotation as an indicator for the pseudo range. The basestation measures the phase rotation and divides it by the satellites carrier frequency which returns a time, which can be used to estimate the the atmospheric error. The achieved accuracy is very good.

Position DGPS

Position DGPS just uses the position difference as an correction value, so the basestation compares its lat/ lon to the known true lat/lon and sends the difference as an correction value to the rover.

The only disadvantage is that, if the set of satellites changes, the correction value does not apply anymore. So both, the receiver and the client need the exact same sets of satellites or the result are inaccurate.

Code Range DGPS

Code Range DGPS takes the difference in pseudo range as a correction value, so the basestation compares the difference between the observed pseudo range and actual true pseudo range and uses it as the correction value. As with the RTK DGPS the correction values are calculated for each satellite, which increases the usability dramatically. Another huge advantage is that it does not require any expensive receivers. The only requirement for the receiver is that it supports raw data output, that can output ephemeris and raw pseudo range data.

Available Correction algorithms

Most of the GPS receivers already have several correction algorithms applied on there standard output, which mostly because they are relatively easy to calculate and behave linearly. Corrected biases are for example the satellite clock bias, such as the receiver's clocks bias. Also the ionosphere, troposphere do affect the results. Those values/ corrections are known and can be removed relatively easily, if not removed even state of the art receivers would only have an accuracy of a few meters.

Technical realisation

Receiver choice

To compute & apply the correction values we need the RAW satellite data, which includes its own positional (Ephemeris) data such as velocity, apogee etc. and the raw pseudo range data.

Not every GPS receiver is capable of transmitting such an amount of data to the "client device", so we need a more capable receiver such as the Neo M8T. The Neo M8T can output a variety of protocols, we need one that includes Ephemeris and Pseudo Range data.

Receiver protocol choice

Not many protocols sport eph. and pr data, the standard output for most GPS receivers is NMEA, but NMEA does not include sufficient eph. data. Also, NMEA does only include the Gedoial separation (dist. User to sat) but not the required pseudo range from each available satellite. UBX would be such a protocols, which comes in many variety's such as UBX-RXM-SFRBX, which includes pr and eph. data, which are transmitted in 3 packages every 6 secs, each packet contains a single sub frame, every subframe contains different kinds of data. Those 6 seconds are a limiting factor but can't be overcome due to the low cost receiver.

The parsing of the protocol has already been done by RTK lib and can be found here. All the code for decoding and parsing was copied from RTKLIB.

Setup

Installation

Installation:

  1. Clone the GitHub repo: git clone https://github.com/luickk/simple-dgps

  2. Install dependencies: git clone https://github.com/commschamp/cc.ublox.commsdsl -> follow installation instructions

  3. Set dependency (ublox commdsl) project path in main CMakeLists.txt

  4. Run: bash rebuild This will cleanup the project build objects and rebuild the project.

Dependencies

TODO

  • add full support for glonass sats

simple-dgps's People

Contributors

luickk avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.