Coder Social home page Coder Social logo

positioningsolver's Introduction

PositioningSolver

This is an educational project about GNSS positioning algorithms. It is intended for all people giving their first steps in these kind of algorithms. The idea here is to explore the positioning algorithms, simulating common procedures and practises used in the industry.

Currently, the only algorithm implemented is:

  • GPS Single Point Positioning (SPP).

SPP is the most basic GNSS positioning solution, using just data from one GPS receiver available at real time. That is, to implement an SPP solver we need:

  • GPS observational data (raw observables - pseudorange and carrier phase)
  • GPS navigational data (navigation message with information about the satellites, atmosphere, ...)

Observational data is provided through RINEX Observation files, and navigational data through RINEX navigational files. The RINEX is a standard (widely-used) format to exchange GNSS data. Learn more about the RINEX format in

GPS transmits data in 3 frequency bands (L1, L2 and L5 bands). Currently, this software only permits the use of L1/L2 data. The following models to the GPS SPP solution are available:

  • Single Frequency Estimation:

    • L1 Raw Observables
    • L2 Raw Observables
    • Ionospheric-free Observables (L1 + L2 Iono free)
  • Dual Frequency Estimation:

    • GPS L1 + L2 (Dual Frequency Estimation)

In the upcoming future, (hopefully) this repository will also perform and explore other algorithms, namely:

  • GNSS/INS data fusion. For that, we need to set up an Inertial Navigation System (INS), with

    • Inertial Measurement Unit (IMU) emulation, providing gyroscope and accelerometer readouts
    • GNSS/INS hybridization algorithms (loosely coupled)
  • Expand the GPS algorithms with PPP and RTK modes

  • Allow the processing of other GNSS constellations, namely Galileo

Installation

PositioningSolver has been developed with Python 3.9. It requires numpy and matplotlib.

Clone this software to a location of your choice, using:

$ git clone https://github.com/rodrigo-moliveira/PositioningSolver

Run

Usage

To run this software, you need to provide the algorithm_id and the path to the configuration json file(s). The main script has the following parameters

$ main.py algorithm_id <path_to_config_file1.json> <path_to_config_file.json2> <...>

Note that you can pass multiple json files, each one containing the configuration of a specific scenario.


Table of algorithms

algorithm_id Algorithm Name Description Configuration File (JSON)
0 GNSS Single Point Positioning This is the main script to run SPP solver algorithm. Example: GPS L1
1 Plotting GNSS PVT results To plot various PVT results (clock, RMS, DOPs, etc). Example: Scenario GNSS_1 Plots

I provide two sample datasets: GNSS 1 and GNSS 2. For each dataset, you can find the corresponding navigation and observation files (in separate folders).

The configuration json files can be found in GNSS 1 and GNSS 2 Feel free to add more content, if you want to set your own dataset and run other RINEX data.

You can download observational / navigational data in CDDIS. The ftp server is this https://cddis.nasa.gov/archive/gnss/data/daily/ (you need to create a free account to access).

Examples

To run the GNSS 1 dataset you can use the following pre-configured json config files

L1 data

$ main.py 0  ./workspace/outputs_gnss/gnss_1/spp_1c/config.json

L2 data

$ main.py 0  ./workspace/outputs_gnss/gnss_1/spp_2w/config.json

Iono Free L1 + L2

$ main.py 0  ./workspace/outputs_gnss/gnss_1/spp_1c_2w_if/config.json

Dual Frequency Estimation L1 + L2

$ main.py 0  ./workspace/outputs_gnss/gnss_1/spp_1c_2w_df/config.json

When you run these commands, various plots will be produced, containing clock, DOP, position error, sky plots, Root Mean Square error, etc. If you want to produce plots for all the 4 runs together, you can run the following command:

$ main.py 1 ./workspace/outputs_gnss/gnss_1/plot_config.json

Configuration Files

The configuration files are in json format. To run the algorithm 0, you need to use files with a specific format, like in this example You can change the parameters, and you have some tuning parameters. They are relatively straightforward, and some additional information is provided in comment sections.

Notably, the following parameters are of note:

  • model/observations - you can select the observations to use (in RINEX format). The selected observations must be available in the provided RINEX file
  • outputs/output_path - you can select the output path. Various files will be produced during the execution of the SPP solver

The following GPS services are allowed (see RINEX 303.pdf file for more info)

GPSAvailableObservations = {'1C', '1S', '1L', '1X', '1P', '1W', '1Y', '1M',
                            '2C', '2D', '2S', '2L', '2X', '2P', '2W', '2Y', '2M'}

References

You can find various (open-access) references used to implement this software in Theory

positioningsolver's People

Watchers

Rodrigo Oliviera 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.