gnss_lib_py
is a modular Python tool for parsing, analyzing, and
visualizing Global Navigation Satellite Systems (GNSS) data and state
estimates.
It also provides an intuitive and modular framework which allows users to
quickly prototype, implement, and visualize GNSS algorithms.
gnss_lib_py
is modular in the sense that multiple types of
algorithms or datasets can be easily exchanged for each other.
It is extendable in facilitating user-specific extensions of existing
implementations.
gnss_lib_py
contains parsers for common file types used for
storing GNSS measurements, benchmark algorithms for processing
measurements into state estimates and visualization tools for measurements
and state estimates.
The modularity of gnss_lib_py
is made possibly by the unifying
NavData
class, with accompanying standard nomenclature, which can be
found in the
reference page.
The standard nomenclature ensures cross compatibility between different
datasets and algorithms.
NavData
combines the readability of pandas.DataFrame
with numpy.ndarray
allowing for easy and fast access of numbers or strings.
We also provide functionality to add, remove and modify numeric and
string data consistently along with commonly needed supporting
functionality.
Full documentation is available on our readthedocs website.
gnss_lib_py
is organized as:
├── data/ # Location for data files
└── unit_test/ # Data files for unit testing
├── dev/ # Code users do not wish to commit
├── docs/ # Documentation files
├── gnss_lib_py/ # gnss_lib_py source files
├── algorithms/ # Navigation algorithms
├── navdata/ # NavData data structure
├── parsers/ # Data parsers
├── utils/ # GNSS and common utilities
├── visualizations/ # plotting functions
└── __init__.py # Initialize gnss_lib_py
├── notebooks/ # Interactive Jupyter notebooks
├── tutorials/ # Notebooks with tutorial code
├── results/ # Location for result images/files
├── tests/ # Tests for source files
├── algorithms/ # Tests for files in algorithms
├── navdata/ # Tests for files in navdata
├── parsers/ # Tests for files in parsers
├── utils/ # Tests for files in utils
├── visualizations/ # Tests for files in visualizations
└── conftest.py # Common methods for tests
├── CONTRIBUTORS.md # List of contributors
├── build_docs.sh # Bash script to build docs
├── poetry.lock # Poetry specific Lock file
├── pyproject.toml # List of package dependencies
└── requirements.txt # List of packages for pip install
In the directory organization above:
The algorithms
directory contains algorithms that
work by passing in a NavData
class. Currently, the following
algorithms are implemented in the algorithms
:
The navdata
directory defines the NavData
class, its methods, and
functions that operate on NavData
instances, like sort
, concat
,
and others.
The data parsers in the parsers
directory allow for either loading
GNSS data into gnss_lib_py
's unifying NavData
class or parsing
precise ephemerides data.
Currently, the following datasets and types are supported:
The utils
directory contains utilities used to handle
GNSS measurements, time conversions, coordinate transformations,
visualizations, calculating multi-GNSS satellite PVT information,
satellite simulation, file operations, etc.
The visualizations
directory contains methods for plotting quantities
in NavData
. It includes methods to plot metrics, positions on maps,
and skyplots of satellites visible from the receiver position.
gnss_lib_py
is available through pip
installation with:
pip install gnss-lib-py
For directions on how to install an editable or developer installation of gnss_lib_py
on Linux, MacOS, and Windows, please
see the install instructions.
We have a range of tutorials on how to easily use this project. They can all be found in the tutorials section.
References on the package contents, explanation of the benefits of our custom NavData class, and function-level documentation can all be found in the reference section.
If you have a bug report or would like to contribute to our repository, please follow the guide on the contributing page.
Answers to common questions can be found in the troubleshooting section.
This project is a product of the Stanford NAV Lab and currently maintained by Ashwin Kanhere (akanhere [at] stanford [dot] edu) and Derek Knowles (dcknowles [at] stanford [dot] edu). If using this project in your own work please cite either of the following:
@inproceedings{knowlesmodular2022,
title = {A Modular and Extendable GNSS Python Library},
author={Knowles, Derek and Kanhere, Ashwin V and Bhamidipati, Sriramya and Gao, Grace},
booktitle={Proceedings of the 35th International Technical Meeting of the Satellite Division of The Institute of Navigation (ION GNSS+ 2022)},
institution = {Stanford University},
year = {2022 [Online]},
url = {https://github.com/Stanford-NavLab/gnss_lib_py},
doi = {10.33012/2022.18525}
}
@inproceedings{knowles_kanhere_baselines_2023,
title = {Localization and Fault Detection Baselines From an Open-Source Python GNSS Library},
author={Knowles, Derek and Kanhere, Ashwin V and Gao, Grace},
booktitle={Proceedings of the 36th International Technical Meeting of the Satellite Division of The Institute of Navigation (ION GNSS+ 2023)},
institution = {Stanford University},
year = {2023 [Online]},
url = {https://github.com/Stanford-NavLab/gnss_lib_py},
}
Additionally, we would like to thank all contributors to this project.