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}
}
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
-
Clone the library in your workspace
-
Install Eigen 3. On Ubuntu and other Debian-based Linux distributions, just:
sudo apt install libeigen3-dev -
Use the build.sh script to build & install the IntNavLib library locally, and build the apps in the apps folder.
-
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.
You can find apps using IntNavLib in the apps folder.
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.

