This paper expands on prior research by integratingcutting-edge adaptive algorithms, including IAE-KF, IGGIII, and KGP. This ensures increased accuracy and resilience in loosely connected GNSS/INS systems to improve estimate procedures and handle dynamic noise and non-linearities.
We also ported existed EKF integrated GNSS/INS navigation system: KF-GINS from C++ to Python for further development of Machine Learning Algorithm.
Related Reference for KF-GINS:
- X. Niu, Q. Chen, "Notes for GNSS/INS Integrated Navigation and Principles of IMU Navigation", i2Nav Lab, GNSS Research Center, Wuhan University, 2022
- X. Niu, Q. Chen, "Lecture Recordings for GNSS/INS Integrated Navigation and Principles of IMU Navigation", i2Nav Lab, GNSS Research Center, Wuhan University, 2022
KGP-IAEKF-IGGIII is compiled on Windows.
The configuration file is used as a parameter to run Main.py after successfully compiling it. To debug the program, it is also required to add the configuration file as a parameter.
This project recommends using Anaconda for managing Python environments and dependencies. The following steps will guide you on how to set up and activate a conda environment suitable for this project.
Open your terminal or command prompt and create a new conda environment named kgp_env with Python version 3.8 using the following command:
conda create --name kgp-IAEKF python=3.8
conda activate kgp-IAEKF
conda install -c conda-forge absl-py pyswarm scikit-learn pyyaml pyquaternion
absl-py: A library from Google providing application-level infrastructure and various Python utilities.
pyswarm: A particle swarm optimization (PSO) library.
scikit-learn: A powerful Python module for machine learning and data mining.
pyyaml: A library for YAML file parsing and output.
pyquaternion: A library for handling rotations in three-dimensional space using quaternions.
We recommend you to compile in the VSCode software.
You should first install the Python compiler and VScode software (including the necessary plug-ins, such as Python, Python Extension Pack).
After preparing your own compilation environment, you can clone the repository locally and open the KGP-IAEKF-IGGIII folder in VSCode:
- Set Interpreter: open the Command Palette (Ctrl+Shift+P) and type "Python: Select Interpreter", select Python 3.8.x (kgp-IAEKF)
After setting your configuration, open Main.py in the folder,click run:
The Application will automatically run and generate result in expexted directory.
Default path: ./NavResult
Frame defination:
- IMU frame: the origin is the IMU center, the three axes point forward-right-down
- Navigation reference frame: the origin coincides with the IMU frame, the three axes point north-east-down
Navigation state:
- position: the geodetic coordinates of the IMU position in the Earth frame (latitude-longitude-ellipsoid height)
- velocity: the IMU velocity to the Earth projected in the navigation reference frame (north speed-east speed-down speed)
- attitude: IMU attitude to navigation frame (quaternion, direction consine matrix, or euler angles. euler angles are defined as yaw-pitch-roll, ZYX rotation order)
IMU noise model:
- IMU measurement noises are modeled as the Gaussian white noise
- IMU bias errors are modeled as the firt-order Gauss-Markov process
- IMU scale factor errors are modeled as the firt-order Gauss-Markov process
For more details on the algorithm, please refer to Notes for GNSS/INS Integrated Navigation and Principles of IMU Navigation(Chinese Edition Only).
Input Data
- The IMU text file format is defined as:
Columns | Data description | Units |
---|---|---|
1 | GNSS seconds of week | |
2~4 | X-Y-Z axes incremental angles | |
5~7 | X-Y-Z axes incremental velocity |
- The GNSS-RTK position text file format is defined as:
Columns | Data description | Units |
---|---|---|
1 | GNSS seconds of week | |
2 | latitude | |
3 | longitude | |
4 | ellipsoid altitude | |
5~7 | position STD (north-east-down) |
Output Data
- The text file format of the navigation result and the ground-truth is defined as:
Columns | Data description | Units |
---|---|---|
1 | GNSS week | - |
2 | GNSS seconds of week | |
3 | latitude | |
4 | longitude | |
5 | ellipsoid altitude | |
6~8 | 3-D velocity (north-east-down) | |
9~11 | attitude angles (roll-pitch-yaw) |
- The IMU error text file format(all double data) is defined as:
Columns | Data description | Units |
---|---|---|
1 | GNSS seconds of week | |
2~4 | X-Y-Z axes gyroscope biases | |
5~7 | X-Y-Z axes accelerometer biases | |
8~10 | X-Y-Z axes gyroscope scale factors | |
11~13 | X-Y-Z axes accelerometer scale factors |
- The state STD text file format(all double data) is defined as:
Columns | Data description | Units |
---|---|---|
1 | GNSS seconds of week | |
2~4 | 3-D position STD (north-east-down) | |
5~7 | 3-D velocity STD (north-east-down) | |
8~10 | 3-D attitude STD (roll-pitch-yaw) | |
11~13 | X-Y-Z axes gyroscope bias STD | |
14~16 | X-Y-Z axes accelerometer bias STD | |
17~19 | X-Y-Z axes gyroscope scale factor STD | |
20~22 | X-Y-Z axes accelerometer scale factor STD |
KF-GINS only supports initial alignment given all initial states currently. The initial states need to be set in the configuration file (kf-gins-real.yaml) before executing the program.
Please set configuration KGP to True, if KGP prediction is needed.
We use demo dataset with the configuration file, which is located in the dataset directory. Data directory can be set in configuration file.
The Final Result is located in "NavResult" folder.
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.