An EKF-Based GNSS/INS Integrated Navigation System
We open-source KF-GINS[^1], an EKF-based GNSS/INS integrated navigation system. KF-GINS implements the classical integrated navigation solution of GNSS positioning results and IMU data. The KF-GINS follows the course content of "Inertial Navigation Principles and GNSS/INS Integrated Navigation" by Prof. Xiaoji Niu and Dr. Qijin Chen, as a supporting resource for the cource. The software is developed in C++ programming language, and CMake is used to manage the project.
The main features of KF-GINS are as follows:
Origanization: Integrated and Intelligent Navigation (i2Nav) Group, GNSS Research Center, Wuhan University.
Related Reference:
If you use this software for your academic research, please give acknowledgment as follows and cite our related document and papers
English version: “The authors would like to acknowledge the team of Prof. Xiaoji Niu of the Integrated and Intelligent Navigation (i2Nav) group from GNSS Research Center of Wuhan University for providing the open-source KF-GINS software that was used in the paper.”
中文模板:“本文作者感谢武汉大学卫星导航定位技术研究中心多源智能导航实验室(i2Nav)牛小骥教授团队开源的KF-GINS软件平台。”Contacts:
KF-GINS is managed by CMake and can be compiled on all of Linux, MacOS and Windows. We recommend you choose Linux environment first.
The configuration file is used as a parameter to run KF-GINS after successfully compiling it. To debug the program, it is also required to add the configuration file as a parameter.
KF-GINS requires another three libraries, which are Eigen3, abseil-cpp, and yaml-cpp. We have appended them as the thirdparty libraries in the ThirdParty directory.
We recommend you use g++ compiler of Ubuntu18.04 or Ubuntu20.04 to compile KF-GINS. You should install the build-essential libraries following the commonds:
sudo apt-get install cmake
sudo apt-get install build-essentialAfter preparing your own compilation environment, you can clone the repository locally and compile KF-GINS as follows:
# Clone the repository
git clone https://github.com/i2Nav-WHU/KF-GINS.git ~/
# Build KF-GINS
cd ~/KF-GINS
mkdir build && cd build
cmake ../ -DCMAKE_BUILD_TYPE=Release
make -j8
# Run demo dataset
cd ~/KF-GINS
./bin/KF-GINS ./dataset/kf-gins.yaml
# Wait until the program finishThe MSVC(Microsoft Visual C/C++) compiler is generally used in Windows. We recommend you to compile KF-GINS in the VSCode software.
You should first install the MSVC compiler and VScode software (including the necessary plug-ins, such as C/C++, C/C++ Extension Pack, CMake, and CMake Tools).
After preparing your own compilation environment, you can clone the repository locally and open the KF-GINS folder in VSCode:
Open a PowerShell or CMD terminal in the project directory and run the test dataset:
.\bin\KF-GINS.exe .\dataset\kf-gins.yaml
# The executable file may be generated in the '.\bin\Release' directory. Then the command is:
# .\bin\Release\KF-GINS.exe .\dataset\kf-gins.yamlxcode-select and cmake in MacOS. You should install these tools following the commonds:
xcode-select --install
brew install cmakeAfter preparing your own compilation environment, you can clone the repository locally and compile KF-GINS as follows:
# Clone the repository
git clone https://github.com/i2Nav-WHU/KF-GINS.git ~/
# Build KF-GINS
cd ~/KF-GINS
mkdir build && cd build
cmake ../ -DCMAKE_BUILD_TYPE=Release
make -j8
# Run demo dataset
cd ~/KF-GINS
./bin/KF-GINS ./dataset/kf-gins.yaml
# Wait until the program finishGDB debugging tool is required to debug KF-GINS under Linux. You should install it following the command.
sudo apt-get install gdbThe debug operation is as follows:
Frame defination:
Navigation state:
IMU noise model:
For more details on the algorithm, please refer to 惯性导航原理与GNSS/INS组合导航课程讲义.
| Columns | Data description | Units |
|---|---|---|
| 1 | GNSS seconds of week | $s$ |
| 2~4 | X-Y-Z axes incremental angles | $rad$ |
| 5~7 | X-Y-Z axes incremental velocity | $m/s$ |
| Columns | Data description | Units |
|---|---|---|
| 1 | GNSS seconds of week | $s$ |
| 2 | latitude | $deg$ |
| 3 | longitude | $deg$ |
| 4 | ellipsoid altitude | $m$ |
| 5~7 | position STD (north-east-down) | $m$ |
| Columns | Data description | Units |
|---|---|---|
| 1 | GNSS week | - |
| 2 | GNSS seconds of week | $s$ |
| 3 | latitude | $deg$ |
| 4 | longitude | $deg$ |
| 5 | ellipsoid altitude | $m$ |
| 6~8 | 3-D velocity (north-east-down) | $m/s$ |
| 9~11 | attitude angles (roll-pitch-yaw) | $deg$ |
| Columns | Data description | Units |
|---|---|---|
| 1 | GNSS seconds of week | $s$ |
| 2~4 | X-Y-Z axes gyroscope biases | $deg/h$ |
| 5~7 | X-Y-Z axes accelerometer biases | $mGal$ |
| 8~10 | X-Y-Z axes gyroscope scale factors | $ppm$ |
| 11~13 | X-Y-Z axes accelerometer scale factors | $ppm$ |
| Columns | Data description | Units |
|---|---|---|
| 1 | GNSS seconds of week | $s$ |
| 2~4 | 3-D position STD (north-east-down) | $m$ |
| 5~7 | 3-D velocity STD (north-east-down) | $m/s$ |
| 8~10 | 3-D attitude STD (roll-pitch-yaw) | $deg$ |
| 11~13 | X-Y-Z axes gyroscope bias STD | $deg/h$ |
| 14~16 | X-Y-Z axes accelerometer bias STD | $mGal$ |
| 17~19 | X-Y-Z axes gyroscope scale factor STD | $ppm$ |
| 20~22 | X-Y-Z axes accelerometer scale factor STD | $ppm$ |
KF-GINS only supports initial alignment given all initial states currently. The initial states need to be set in the configuration file (kf-gins.yaml) before executing the program.
We offer a demo dataset with the configuration file, which is located in the dataset directory.
Users can find our open-sourced datasets at **[awesome-gins-datasets](https://github.com/i2Nav-W
No open issues yet, or sync has not completed.