Giter VIP home page Giter VIP logo

sgl-ut / gnsstk Goto Github PK

View Code? Open in Web Editor NEW
97.0 12.0 41.0 191.33 MB

The goal of the gnsstk project is to provide an open source library to the satellite navigation community--to free researchers to focus on research, not lower level coding.

License: Other

Shell 0.13% CMake 0.91% C++ 80.19% C 0.28% Perl 0.03% CSS 0.01% Python 1.49% Makefile 0.02% TeX 1.77% PostScript 13.89% MATLAB 0.01% SWIG 1.28%

gnsstk's Introduction

\page README README

README

Github - Build Status

NOTICE:

On November 30, 2020 there was a push of many pending changes to the GNSSTk repository. We apologize for the long period without updates, the year 2020 has been a trying time in many respects.

The most obvious change has been a transition to a semantic versioning scheme (semver.org). This is intended to be an informal contract regarding the API that is presented by our tools. It should always be safe to update to the next version, so long as the major version number doesn't change.

Releases containing API changes, however small, will result in a major version number increment. Releases containing new features will result in a minor version number increment. Releases containing only bug fixes will have a patch number increment.

Contents:

  • Introduction
  • Description: GNSSTk C++ Library
  • Description: GNSSTk C++ Applications
  • Description: GNSSTk Python Bindings
  • Installation
  • Testing
  • Help & Docs
  • Contribution guidelines
  • Contributor list
  • Credits & Lineage
  • License

Introduction:

The GNSS Toolkit (GNSSTk) is an open-source (LGPL) project sponsored by the Space and Geophysics Laboratory (SGL), part of the Applied Research Laboratories (ARL) at The University of Texas at Austin.

The primary goals of the GNSSTk project are to:

  • provide applications for use by the GNSS and satellite navigation community.
  • provide a core library to facilitate the development of GNSS applications.

Description: GNSSTk C++ Library:

The GNSSTk core library provides a number of models and algorithms found in GNSS textbooks and classic papers, such as solving for the user position or estimating atmospheric refraction. Common data formats such as RINEX are supported as well.

There are several categories of functions in the GNSSTk library:

  1. GPS time. Conversion among time representations such as MJD, GPS week and seconds of week, and many others.

  2. Ephemeris calculations. Position and clock interpolation for both broadcast and precise ephemerides.

  3. Atmospheric delay models. Includes ionosphere and troposphere models.

  4. Position solution. Includes an implementation of a Receiver Autonomous Integrity Monitoring algorithm.

  5. Mathematics. Includes Matrix and Vector implementations, as well as interpolation and numerical integration.

  6. GNSS data structures. Data structures that contain observations mapped according to epochs, satellites, sources and types of observations. Appropriate processing classes are also provided, including a complete 'Precise Point Positioning' (PPP) processing chain.

  7. Application framework. Includes processing command lines options, providing interactive help and working with file systems.

A more detailed description of the functionality provided by the GNSSTk library can be found in the Doxygen documentation on the GNSSTk website.

http://www.gnsstk.org/bin/view/Documentation/WebHome

The GNSSTk Core Library and its associated test programs can be built independently of building the GNSSTk Applications or Auxiliary Libraries. The GNSSTk Core Library source code contains no dependencies outside of the GNSSTk Core Library and Standard C++ and will build cleanly on all supported platforms.

Description: GNSSTk C++ Applications:

The GNSSTk libraries are the foundation for the GNSSTk applications suite. The applications support greater depth of functionality to support research and development. The applications are almost entirely console based (i.e., without a graphical user interface). They can be grouped functionally into the following categories:

  1. RINEX utilities - The RINEX utilities provide a set of applications that can be used to examine, manipulate, and plot RINEX observation files.

  2. Positioning - The positioning applications include two different applications that perform standard pseudorange-based positioning and two that implement differential phase-based solutions.

  3. Residual analysis - A residual analysis application computes two types of measurement residuals using a single receiver or two receivers in a zero baseline configuration.

  4. Ionospheric modeling - The ionospheric modeling applications utilize the two frequency TEC estimate from the RINEX utilities and compute a model of the ionosphere.

  5. Signal Tracking Simulation - These utilities simulate the tracking of GPS C/A and P-code.

  6. Basic transformations - Conversions of time and coordinate systems.

  7. Observation data collection and conversion - Translating receiver specific data formats to RINEX.

  8. File comparison and validation - Differing observations files against a truth source.

  9. Data editing - Simple editing like systematic removal of observations by satellite, type or time and more advanced editing like cycle slip detection and correction.

10.Autonomous and relative positioning - Navigation and surveying applications.

The GNSSTk applications are dependent on the GNSSTk libraries. However, the GNSSTk applications may also contain external dependencies. Some applications may not build or run successfully on all platforms.

Description: GNSSTk Python Bindings:

The GNSSTk python extension package provides access to the GNSSTk C++ library from within python. It is built using SWIG and CMake, and installed with a standard setup.py script using the python distutils module.

For more details, see $GNSSTK/python/bindings/swig/install_package/README.txt

Installation:

See the INSTALL.txt for details.

The most recent version of the GNSSTk source code can be found here:

Note: As of the October 2022 release, submodules are being used for test data. Refer to TESTING.md for details.

The tools used for the build and install frameworks are cross-platform. These include CMake, SWIG, and python (distutils).

Automated build and install is supported on POSIX platforms with the supplied Bash script called build.sh. For help on script usage, run the script with the help flag:

$ build.sh -h

For other platforms, such as Windows, please refer to comments and commands in the same script, which document how we are using CMake, SWIG, and distutils for various steps in the build and install process.

To build and install the C++ library and applications on POSIX platforms:

  • automated: run build.sh.
  • manual: see the contents of build.sh for command examples on how you might run cmake and make to build and install the library.

To build and install the python bindings, you have two options:

  • automated: python bindings automatically build with the build.sh. Use -P for install.
  • manual build: see build.sh for examples on calling cmake and swig
  • manual install:

Testing:

See the TESTING.md for details.

Help & Docs:

See the DOCUMENTATION.txt for details.

Additional documentation and resources can be found at http://www.gnsstk.org/, including:

  • Source code and compiled binaries
  • Coding examples
  • Doxygen documentation
  • System requirements and build instructions
  • A users guide
  • Publications
  • Email lists
  • Support question/answer
  • Development process (including feature suggestions, bug tracking, schedule, testing, and developer documentation)
  • Source code repository information
  • GNSSTk IRC channel
  • Success stories

Credits & Lineage:

GNSSTk is the by-product of GPS research conducted at ARL:UT since before the first satellite launched in 1978; it is the combined effort of many software engineers and scientists. In 2003 the research staff at ARL:UT decided to open source much of their basic GPS processing software as the GNSSTk.

The development history is documented by a series of related publications:

http://www.gnsstk.org/bin/view/Documentation/GNSSTkPublications

See the AUTHORS.txt file for additional detail.

License

The source code provided by the GNSSTk is distributed under the GNU LGPL, Version 3.

  • This license gives all users the right to use and redistribute the code.
  • Users of the GNSSTk are not required to open their source, according to the LGPL.
  • This makes the GNSSTk a practical choice for commercial projects.
  • Full text copies of the GPL (COPYING.txt) and the LGPL (COPYING.LESSER.txt) are included with the GNSSTk distribution package.

For more information about the GPL or LGP, please refer to the following:

gnsstk's People

Contributors

burundiocibu avatar ckuethe avatar donalbane avatar gloppyuser avatar jmk0 avatar martin-vermeer avatar masamitsutech avatar nathanielhill avatar rwpenney avatar ut-dave avatar ut-malik avatar vestuto 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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gnsstk's Issues

Variable PYTHON_VERSION_MAJOR does not exist

When I try to build GNSS toolkit 13.4.0 on openSUSE, I get the following error after cmake command:

CMake Error at /usr/share/cmake/Modules/CMakePackageConfigHelpers.cmake:265 (message):
 Variable PYTHON_VERSION_MAJOR does not exist
 Call Stack (most recent call first):
   CMakeLists.txt:248 (configure_package_config_file)
 
 
 -- Configuring incomplete, errors occurred!
 See also "/home/abuild/rpmbuild/BUILD/gnsstk-13.4.0/build/CMakeFiles/CMakeOutput.log".
 error: Bad exit status from /var/tmp/rpm-tmp.Q3xc4O (%build)

the same error is when I use build.sh script.
Is something missing? Do I need to specify Python version manuaally?

Return type warning treated as error - compilation fails on Linux

Due to the setting of -Werror=return-type in the compiler flags below:

set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Werror=return-type -Werror=deprecated" )

the project won't compile on my Linux using Cmake due to no return statement placed before the bracket here:

Here is the warning treated as error that gcc 7.5.0 issues:

[ 30%] Building CXX object CMakeFiles/gnsstk.dir/core/lib/GNSSCore/SatMetaDataStore.cpp.o
/home/coezmaden/Repositories/gnsstk/core/lib/GNSSCore/RefFrameRlz.cpp: In function ‘gnsstk::RefFrameRlz gnsstk::getRefFrameRlz(gnsstk::RefFrameSys, const gnsstk::CommonTime&)’:
/home/coezmaden/Repositories/gnsstk/core/lib/GNSSCore/RefFrameRlz.cpp:177:4: error: control reaches end of non-void function [-Werror=return-type]
    }
    ^

Can be a potential easy fix by adding a return of an unknown reference frame RefFrameRlz::Unknown as I have done in my fork: 3f332d5
Should be tested for unwanted changes to the logic of the function.

RINEX v3 doesn't correctly handle invalid xmitTime

xmitTime = RNDouble(line.substr(n,19)); n+=19;

According to the standard, if the xmitTime is set to .9999+e09, then it should be treated as invalid/unknown. However, the library doesn't do this and uses this value as if it were proper.

The following call to fixTimeGPS() then destroys navOut.xmitTime by adding this invalid value to a GPS week nr.:

fixTimeGPS(navIn, *gps);

Apparently, this one place where the invalid value destroys things could get easily fixed by treating the invalid value as 0, but I'm not sure whether there are other places where it could make problems.

One of the problematic RINEX v3 files is e.g. this one: https://igs.bkg.bund.de/root_ftp/MGEX/BRDC/2024/001/BRDC00WRD_S_20240010000_01D_MN.rnx.gz . E.g. the very first nav message:

E08 2023 12 31 23 50 00-2.009316231124e-04-5.940137270954e-12 0.000000000000e+00
     1.500000000000e+01-1.201562500000e+02 2.852261665290e-09-3.006433072931e+00
    -5.470588803291e-06 1.602121628821e-04 8.979812264442e-06 5.440613040924e+03
     8.580000000000e+04-8.195638656616e-08 4.684350206789e-01-9.313225746155e-09
     9.662984159677e-01 1.517812500000e+02 7.945787833385e-01-5.399510625576e-09
    -2.142946405177e-12 5.170000000000e+02 2.295000000000e+03 0.000000000000e+00
     3.120000000000e+00 0.000000000000e+00-3.725290298462e-09-4.423782229424e-09
     9.999000000000e+08   

You can see the 9.999000000000e+08 in the very last position. This is what makes problems.


Reproducer:

gnsstk::NavLibrary lib;
gnsstk::NavDataFactoryPtr fac = std::make_shared<gnsstk::RinexNavDataFactory>();
fac->addDataSource("BRDC00WRD_S_20240010000_01D_MN.rnx");
lib.addFactory(fac);
std::cout << gnsstk::printTime(gnsstk::CivilTime(lib.getInitialTime()), "%Y-%m-%d %H:%M:%f") << " --- "
          << gnsstk::printTime(gnsstk::CivilTime(lib.getFinalTime()), "%Y-%m-%d %H:%M:%f") << std::endl;

Initial time is wrongly in year 2055 and final time is also weird:

2055-8-30 22:0:0.000000 --- 2023-12-25 4:0:0.000000

GNSSTk Roadmap Question

Thank you for the great library.

I wished to know about the roadmap of development. It seems like a lot of features from GPSTk are not yet implemented, and knowing the rough timeline would help us migrate from GPSTk to GNSSTk.

Thank you again!

Build fails on openSUSE Tumbleweed

I have problem with building gnsstk on openSUSE Tumblewwed. The build fails with this message:

/home/abuild/rpmbuild/BUILD/gnsstk-14.0.0/core/lib/TimeHandling/CommonTime.hpp:95: Error: Syntax error in input(3).
make[2]: *** [swig/CMakeFiles/_ClockModel.dir/build.make:79: swig/CMakeFiles/_ClockModel.dir/ClockModelPYTHON_wrap.cxx] Error 1
make[2]: Leaving directory '/home/abuild/rpmbuild/BUILD/gnsstk-14.0.0/build'
make[1]: *** [CMakeFiles/Makefile2:595: swig/CMakeFiles/_ClockModel.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

This problem appeared with version (tag) 13.7.0 and is present in current release 14.0.0.
openSUSE Tumbleweed uses following tools:
gcc-c++ 12.2
python3 3.10.9
swig 4.1.1

For openSUSE Leap 15.4 build is OK

Updating to v13.x

Hi guys,

I wrote a small application in C++ using GPSTk. It worked using GPSTk from v3.0.0 up to 8.0.0. Now I’m trying to update the code to use GNSSTk, with backward compatibility, and with little effort I made it work up to v12.1.0.

However, I struggle in getting it working for v13.x, since the GPSEphemerisStore is now gone. Is there any new mechanism for that? Any documentation, example, or advice on how to migrate the code? Any help would be welcome.

Thanks in advance.

PrintTime doesn't check for invalid seconds after rounding

I can get PrintTime to write a time with 60 in the seconds field, instead of rolling over to 1 minute and 0 seconds.

>>> import gnsstk
>>> ct = gnsstk.CommonTime()
>>> ct = ct.set(2459313,59,0.9999999999)
>>> print(gnsstk.printTime(ct,'%02d-%b-%Y %02H:%02M:%012.9f %P'))
08-Apr-2021 00:00:60.000000000 UNK

build failed on wsl2 ubuntu22.04

"Operation not permitted" occurs even with sudo

sudo bash ./build.sh

The build fails with message:
Run cmake -DADDRESS_SANITIZER=ON /mnt/d/gnsstk ##########################

cmake -DADDRESS_SANITIZER=ON /mnt/d/gnsstk

make all -j 6
CMake Error: failed to create symbolic link 'libgnsstk.so.14': Operation not permitted
CMake Error: cmake_symlink_library: System Error: Operation not permitted
CMake Error: failed to create symbolic link 'libgnsstk.so': Operation not permitted
CMake Error: cmake_symlink_library: System Error: Operation not permitted
make[2]: *** [CMakeFiles/gnsstk.dir/build.make:5266: libgnsstk.so.14.0.0] Error 1
make[2]: *** Deleting file 'libgnsstk.so.14.0.0'
make[1]: *** [CMakeFiles/Makefile2:115: CMakeFiles/gnsstk.dir/all] Error 2
make: *** [Makefile:156: all] Error 2

Error 2 :-(
See /mnt/d/gnsstk/build/DESKTOP-1DRKFVR-v14.0.0/Testing/Temporary/LastTest.log for detailed test log
See /mnt/d/gnsstk/build/DESKTOP-1DRKFVR-v14.0.0/build.log for detailed build log

This problem appeared with version 14.0
gcc version 11.3.0 (Ubuntu 11.3.0-1ubuntu1~22.04)
Python 3.10.6

Improper exception thrown on file open

FFStream::init calls close. If a file is not open, this close call fails. In a default configuration this is not a problem. However, if you set the stream to throw exceptions on fail, then you get an exception when opening a file.

The solutions is to change the code to:

if(is_open())
   close();

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.