GeoscienceAustralia / ginan

The Australian Government, through Positioning Australia (part of Geoscience Australia), is funding the design, development and operational service of a Global Navigation Satellite System (GNSS) position correction system - the Ginan service and toolkit. The application of the Ginan correction service by a GNSS device has the potential to increase positioning accuracy from meters to centimetres across Australia. The suite of software systems in this repository (the Ginan toolkit) will be used to create the service. It is available now under an open source licence. Ginan will give individuals and organisations no-cost access to the Ginan software and service as a public good.
https://geoscienceaustralia.github.io/ginan/
Other
229 stars 108 forks source link
gnss ppp

gn_logo

Ginan: Software toolkit and service

Ginan v3.1.0

Overview

Ginan is a processing package being developed to process GNSS observations for geodetic applications.

We currently support the processing of:

We are actively developing Ginan to have the following capabilities and features:

The software consists of three main components:

Using Ginan with an AppImage

You can quickly download a precompiled binary of Ginan's pea from the develop-weekly-appimage branch of github. This allows you to run Ginan without the need for installing external dependencies. It contains no python scripts or example data, but is possible to run immediately on linux and windows systems as simply as:

git clone -b develop-weekly-appimage --depth 1 --single-branch https://github.com/GeoscienceAustralia/ginan.git

ginan/Ginan-x86_64.AppImage

or on windows:

wsl --install -d ubuntu
ginan/Ginan-x86_64.AppImage

If the image fails to run, first ensure it is executable and all requires libraries are available

chmod 777 ginan/Ginan-x86_64.AppImage
apt install fuse libfuse2

Using Ginan with Docker

You can quickly download a ready-to-run Ginan environment using docker by running:

docker run -it -v ${host_data_folder}:/data gnssanalysis/ginan:v3.1.0 bash

This command connects the ${host_data_folder} directory on the host (your pc), with the /data directory in the container, to allow file access between the two systems, and opens a command line (bash) for executing commands.

You will need to have docker installed to use this method.

To verify you have the Ginan executables available once at the Ginan command line, run:

pea --help

Installation from source

Supported Platforms

Ginan is supported and tested on the following platforms

Dependencies

If instead you wish to build Ginan from source, there are several software dependencies:

If using gcc verion 11 or about, the minimum version of libraries are:

Scripts to install dependencies for Ubuntu 18.04/20.04, 22.04, Fedora 38 are available on the scripts/installation directory. Users on other system might need to have a look at the scripts/installation/generic.md file, which contains the major steps.

Python

We use Python for automated process (download), postprocessing and visualisation. To use the developed tools, we recommand to use a virtual-environement (or Anaconda equivalent). A requirements file is available in the scripts/ directory and can be run via

pip3 install -r requirements.txt

Build

Prepare a directory to build in - it's better practice to keep this separated from the source code. From the Ginan git root directory:

mkdir -p src/build

cd src/build
cmake ../

To build every package simply run make or make -jX , where X is a number of parallel threads you want to use for the compilation:

make -j2

Alternatively, to build only a specific package (pea, make_otl_blq, interpolate_loading), run as below:

make pea -j2

This should create executables in the bin directory of Ginan.

Check to see if you can execute the PEA from the exampleConfigs directory

cd ../../exampleConfigs

../bin/pea --help

and you should see something similar to:

PEA starting... (main ginan-v3.0.0 from Mon Feb 05 15:15:22 2024)

Options:
  -h [ --help ]                    Help
  -q [ --quiet ]                   Less output
  -v [ --verbose ]                 More output
  -V [ --very-verbose ]            Much more output
           .
           .
           .
  --dump-config-only               Dump the configuration and exit
  --walkthrough                    Run demonstration code interactively with
                                   commentary

PEA finished

Then download all of the example data using the scripts and filelists provided. From the Ginan git root directory:

cd inputData/data
./getData.sh
cd ../products
./getProducts.sh

Directory Structure

Upon installation, the ginan directory should have the following structure:

ginan/
├── README.md               ! General README information
├── LICENSE.md              ! Software License information
├── ChangeLOG.md            ! Release Change history
├── aws/                    ! Amazon Web Services config
├── bin/                    ! Binary executables directory*
├── Docs/                   ! Documentation directory
├── inputData/              ! Input data for examples
│   ├── data/               ! Example dataset (rinex files)**
│   └── products/           ! Example products and aux files**
├── exampleConfigs          ! Example configuration files
│   ├── ppp_example.yaml    ! Basic user-mode example
│   └── pod_example.yaml    ! Basic network-mode example
├── lib/                    ! Compiled object library directory*
├── scripts/                ! Auxiliary Python and Shell scripts and libraries
└── src/                    ! Source code directory
    ├── cpp/                ! Ginan source code
    ├── cmake/
    ├── doc_templates/
    ├── build/              ! Cmake build directory*
    └── CMakeLists.txt

*created during installation process

** contents retrieved with getData.sh, getProducts.sh scripts

Documentation

Ginan documentation consists of two parts: these documents, and separate Doxygen-generated documentation that shows the actual code infrastructure. It can be found here, or generated manually as below.

Doxygen

The Doxygen documentation for Ginan requires doxygen and graphviz. If not already installed, type as follows:

sudo apt -y install doxygen graphviz

On success, proceed to the build directory and call make with docs target:

cd ../src/build

cmake ../

make docs

The documentation can then be found at Docs/codeDocs/index.html.

Note that documentation is also generated automatically if make is called without arguments and doxygen and graphviz dependencies are satisfied.

Ready!

Congratulations! You are now ready to trial the examples from the exampleConfigs directory. See Ginan's manual for detailed explanation of each example. Note that examples have relative paths to files in them and rely on the presence of products and data directories inside the inputData directory. Make sure you've run s3_filehandler.py from the Build step of these instructions.

The paths are relative to the exampleConfigs directory and hence all the examples must be run from the exampleConfigs directory.

NB: Examples may be configured to use mongoDB. If you have not installed it, please set mongo: enable to false in the pea config files.

To run the first example of the PEA:

cd ../exampleConfigs

../bin/pea --config ppp_example.yaml

This should create outputs/ppp_example directory with various *.trace files, which contain details about stations processing, a Network*.trace file, which contains the results of Kalman filtering, and other auxiliary output files as configured in the yamls.

You can remove the need for path specification to the executable by using the symlink within exampleConfigs, or by adding Ginan's bin directory to ~/.bashrc file:

PATH="path_to_ginan_bin:$PATH"

NB: For PPP positioning of a single station, we have noted that limiting the number of cores to 1 can reduce processing times. This can be achieved via setting the environment variable OMP_NUM_THREADS:

OMP_NUM_THREADS=1 ginan/Ginan-x86_64.AppImage

Scripts

In addition to the Ginan binaries, scripts are available to assist with downloading input files, and viewing and comparing generated outputs.

Acknowledgements:

We have used routines obtained from RTKLIB, released under a BSD-2 license, these routines have been preserved with modifications in the folder cpp/src/rtklib. The original source code from RTKLib can be obtained from https://github.com/tomojitakasu/RTKLIB.

We have used routines obtained from Better Enums, released under the BSD-2 license, these routines have been preserved in the folder cpp/src/3rdparty The original source code from Better Enums can be obtained from http://github.com/aantron/better-enums.

We have used routines obtained from EGM96, released under the zlib license, these routines have been preserved in the folder cpp/src/3rdparty/egm96 The original source code from EGM96 can be obtained from https://github.com/emericg/EGM96.

We have used routines obtained from SOFA, released under the SOFA license, these routines have been preserved in the folder cpp/src/3rdparty/sofa The original source code from SOFA can be obtained from https://www.iausofa.org/.

We have used routines obtained from project Pluto, released under the GPL-3 license, these routines have been preserved in the folder cpp/src/3rdparty/jplephem The original source code from jpl ephem can be obtained from https://github.com/Bill-Gray/jpl_eph.