Giter VIP home page Giter VIP logo

leogps's Introduction

image

Project

LEOGPS

Github

https://github.com/sammmlow/LEOGPS

Documents

https://leogps.readthedocs.io/en/latest/

Version

1.3 (Latest)

docs license

Author

Samuel Y. W. Low

linkedin orcid

LEOGPS

LEOGPS is an open-source Python software which performs relative satellite navigation between two formation flying satellites in low Earth orbit (LEO), with the objective of high accuracy relative positioning via double differential GPS. It uses a TKinter GUI to assist in processing your GPS measurements, and also provides a number of well documented functions, with minimal external package dependencies, useful for your processing (see advanced references in the documentation).

LEOGPS is not a PyPI packaged Python project. There is no installation possible through "pip" or via "conda" for Anaconda users. Simply performing a git clone of this repository is all you need to get started.

LEOGPS currently supports only observations from the GPS constellation (L1/L2 frequency), with observation files in RINEX v2.XX format. LEOGPS also uses the precise ephemeris (.EPH) and clock bias and drift files (.CLK) provided by the University of Bern, Center for Orbit Determination in Europe (​CODE). As such, the coordinate frame used in the relative positioning is the International Terrestrial Reference Frame (ITRS) which is an Earth-Centered Earth-Fixed (ECEF) frame. Since the ephemeris files and RINEX v2 observations default to GPS Time, it is very important to also note that the time scale used in LEOGPS output files is GPS Time (as opposed to UTC).

This project also gives sincere appreciation and credit to the University of Bern, for their provision of the CODE FTP.

Installation and First Steps

First, clone this repository by running in your terminal (or Git Bash):

git clone https://github.com/sammmlow/LEOGPS.git

Second, you should do a pip install in your terminal (or Anaconda prompt) of Martin Valgur's Pythonic translation of Hatanaka (de)compression in Python as well as the ncompress library by running:

pip install hatanaka
pip install ncompress

The Hatanaka library in Python was contributed in v1.1, and replaces the older "RNX2CRX" (and GZIP, thanks to the ncompress library) which are Windows-only executables, making the (de)compression possible across all platforms.

The user can then run the application by running 'leogps.py', in the main directory, and you should see the LEOGPS GUI launch:

image

Next, you can paste the two RINEX observation files of your LEO satellite pairs in the inputs folder, key in your configuration parameters, and hit the 'Run LEOGPS' button. That's it! LEOGPS will automatically source for the precise daily ephemeris and clock solutions, and process the raw GPS measurements to produce a report file in "LEOGPS_Results.txt" comprising:

  • The single point positions and velocities of both LEOs.
  • Precise baseline vectors between the two LEOs.
  • Dilution of precision values.

LEOGPS will also output plots and reports on the interpolated GPS satellite ephemeris and clock biases.

For full documentation, please refer to the LEOGPS Read-The-Docs.

Other Package Dependencies

Recommended Python Version > 3.6

Core libraries necessary: NumPy (v1.14 and above), matplotlib, hatanaka

Standard Python libaries: os, copy, math, datetime, decimal, shutil, subprocess, warnings, urllib.request

Libraries for GUI: PIL, tkinter

Tested on Python version 3.6.5 (Anaconda with default packages).

Contact

If you have any queries feel free to reach out to me at:

[email protected]

linkedin orcid

Last Modified on 20-Sep-2021

leogps's People

Contributors

andrewngt avatar sammmlow avatar valgur avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

leogps's Issues

Large Oscillatory Position Errors After Receiver Clock Sync

Current solutions tested on GRACE A/B formation flying satellites, exhibit positioning errors from pseudo-range solutions on the order of ~100m, and relative navigation inaccuracies in double digit centimeters. This is two orders of magnitude worse off than expected from typical precise orbit determination results used as a comparison. Ephemeris errors accruing from the orbit interpolation of the GPS satellites seem to be responsible. Current orbit interpolation uses an 11th Order Lagrange Polynomial Interpolation. A review of current range measurement modelling, and the setup of the non-linear least squares, should be conducted.

To-Do: Single Satellite Precise Orbit Determination πŸ›°οΈ 🌠

🧠 🧠 🧠 Future work: to include single-satellite cases πŸ›°οΈ . The GUI should offer to the user the option of choosing single satellite processing (precise orbit determination) or dual satellite processing (relative navigation via double differencing).

To-Do:

  • Statistical orbit determination module
  • Options for inclusion of pseudorange or carrier phase or both

To-Do: Processing Statistics πŸ“Š

🧠 🧠 🧠 Future Work: Inclusion of the processing statistics, such as pseudo range residuals, carrier to noise ratios, number of satellites in view, time series plot of which frequency signals were received.

To-Fix: GPS Antenna Offsets πŸ“‘πŸ“‘ πŸ“‘

⚠️⚠️⚠️ Caution: Do not apply GPS antenna offsets as of v1.3 (pre-release). ⚠️⚠️⚠️

GPS antenna offsets should be done in the spacecraft body frame. However, currently as LEOGPS has no feature to read in spacecraft attitude coordinates, it will not be able to tell the orientation of the spacecraft and thus applying GPS antenna offsets using XYZ coordinates in the orbit frame is erroneous. For now, this has been (conveniently) cast to future work, and users are advised not to set any non-zero offsets. The input box in the GUI has also been closed. Thus, all coordinates computed in LEOGPS of the spacecraft(s) are not of the spacecraft center of mass, but of the GPS antenna phase center.

Functionality to adjust GUI

Is there a way to adjust the GUI or to enable scrolling? Currently the GUI is cutoff at 40% height ("Set window length for cycle slip detection filter") on my machine. Resizing the GUI also does not resolve the issue.
LEOGPS GUI

🌏 ❀️ LEOGPS v1.2 Pre-release Goals (Spoiler Alert)

Goal 🎯 : Build a feature that enables relative orbit plotting.

Feature πŸ‘οΈ : Allow the plot to be displayed directly on the LEOGPS GUI, in Hill Frame coordinates after RSN.

Requires 🧠 : More formation flying RINEX v2 files for validation of RSN and plotting accuracy.

Robustness against dropped data

Hi!

I have a situation where my GPS receivers log data at 1 Hz, but with infrequent data corruption (0.1% of the time or maybe 1 second of drop every few minutes out of collection of 4 hours), resulting in some dropping of PVT data.

Issue: Current LEOGPS cannot proceed with data with 0.1% droppage.

Solutions:

  1. Either increase timestep parameter in GUI, which might affect accuracy
  2. Preprocess RINEX observation file and interpolate before processing in LEOGPS. Currently testing this via Bernese RNXSMT. From the manual, RNXSMT corrects for cycle slips. I'm not sure if it is able to correct for missing time step data?

The function that is not robust against dropped data is phasep.ph2fil() in line 611 of phasesep.py. The hatch filter requires comparison to the data 1 second before, even if the selected timestep is greater than 1 second.

Any other suggestions on how to deal with this? Any suggestions also to preprocess RINEX observation file for input into LEOGPS?

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.