Skip to content

rebmaso/int-nav-lib

Repository files navigation

IntNavLib

IntNavLib is a C++ integrated navigation library with a focus on readability, modularity, and documentation. Integrated navigation example applications using the IntNavLib API, including a ROS2 app, are in the apps folder.

The code is inspired by the books Principles of GNSS, Inertial, and Multisensor Integrated Navigation and Estimation with applications to tracking and navigation: theory algorithms and software.

References:

@BOOK{gpintnav,
  author={Groves, Paul},
  booktitle={Principles of GNSS, Inertial, and Multisensor Integrated Navigation Systems, Second Edition},
  year={2013}
  }

@BOOK{bar2001estimation,
  title={Estimation with applications to tracking and navigation: theory algorithms and software},
  author={Bar-Shalom, Yaakov and Li, X Rong and Kirubarajan, Thiagalingam},
  year={2001},
  publisher={John Wiley \& Sons}
}

image

Documentation

Documentation is enabled by Doxygen-compatible comments. Use the provided Doxyfile to generate project documentation.

mkdir -p docs/doxygen
doxygen Doxyfile
firefox docs/doxygen/html/index.html

Build & install instructions

  1. Clone the library in your workspace

  2. Install Eigen 3. On Ubuntu and other Debian-based Linux distributions, just: sudo apt install libeigen3-dev

  3. Use the build.sh script to build & install the IntNavLib library locally, and build the apps in the apps folder.

Development Guidelines

  • Building: use scripts/build.sh file

  • Linting: Follow the Google style guide and see .clang-tidy file, lint using scripts/lint.sh

  • Testing: write Google tests, launch using scripts/test.sh

  • Test Coverage: ensure tests have good coverage using scripts/test_coverage.sh

  • Profiling: use profile.sh to ensure no leaks and identify bottlenecks

  • Documentation: document code using Doxygen-compatible comments, launch Doxygen using scripts/doc.sh

  • Git workflow: Gitflow

  • Hooks: paste hook.sh to .git/hooks/ so builds and tests are run before committing

  • Profiling: use profile.sh to ensure no leaks and identify bottlenecks.

Using IntNavLib

You can find apps using IntNavLib in the apps folder.

ROS 2 App

image

This library also comes with an example of how to use it in a ROS2 project. To launch a ROS2 node performing integrated loosely-coupled GNSS/INS navigation, first install ROS2 (Humble supported, other distributions might require minor refactoring), then run:

cd apps/ros2_lc_ins_gnss_ecef
source install/setup.bash
ros2 launch ros2_lc_ins_gnss_ecef Profile_3_launch.py log_level:=ERROR

Find Python and C++ scripts to plot results in the utils directory.

About

C++ integrated navigation library. Inspired by Principles of GNSS, Inertial, and Multisensor Integrated Navigation Systems, Groves, P.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors