IC-GVINS is a robust, real-time, inertial navigation system (INS)-Centric GNSS-Visual-Inertial navigation system, in which the precise INS is fully utilized in both the state estimation and visual processes. To improve the system robustness, the INS information is employed during the whole keyframe-based visual process, with strict outlier-culling strategy. The GNSS is adopted to perform an accurate and convenient initialization, and is further employed to achieve absolute positioning in large-scale environments. The IMU, visual, and GNSS measurements are tightly fused within the framework of factor graph optimization.
Authors: Hailiang Tang, Xiaoji Niu, and Tisheng Zhang from the Integrated and Intelligent Navigation (i2Nav) Group, Wuhan University.
Related Paper:
- Hailiang Tang, Tisheng Zhang, Xiaoji Niu, Jing Fan, and Jingnan Liu, “IC-GVINS: A Robust, Real-time, INS-Centric GNSS-Visual-Inertial Navigation System for Wheeled Robot,” Apr. 2022. [Online]. Available: https://arxiv.org/abs/2204.04962v1
- Hailiang Tang, Tisheng Zhang, Xiaoji Niu, Jing Fan, and Jingnan Liu, “Impact of the Earth Rotation Compensation on MEMS-IMU Preintegration of Factor Graph Optimization,” IEEE Sensors Journal, 2022.
Related Video:
Click the following image to open our video on Bilibili.
Contacts:
- For any technique problem, you can send an email to Dr. Hailiang Tang (thl@whu.edu.cn).
- For Chinese users, we also provide a QQ group (481173293) for discussion. You are required to provide your organization and name.
We recommend you use Ubuntu 18.04 or Ubuntu 20.04 with the newest compiler (gcc>=8.0 or clang>=6.0).
# gcc-8
sudo apt install gcc-8 g++-8
# Clang
# sudo apt install clang
Follow ROS Melodic installation instructions for Ubuntu 18.04 and ROS Noetic installation instructions for Ubuntu 20.04.
We use Ceres Solver to solve the non-linear least squares problem in IC-GVINS. The supported version is Ceres Solver 2.0.0 or 2.1.0. Please follow Ceres installation instructions.
The dependencies Eigen (>=3.3.7) and glog (>=0.4.0) are also used in IC-GVINS. You can install them as follows:
sudo apt install libeigen3-dev libgoogle-glog-dev
If the version cannot be satisfied in your system repository, you should build them from the source code.
The supported version is OpenCV (>=3.2.0). You can install OpenCV from your system repository or build from the source code. OpenCV 4 is also supported in IC-GVINS.
sudo apt install libopencv-dev
sudo apt install libyaml-cpp-dev
# Make workspace directory
mkdir ~/gvins_ws && cd ~/gvins_ws
mkdir src && cd src
# Clone the repository into src directory
git clone https://github.com/i2Nav-WHU/IC-GVINS.git
# To gvins_ws directory
cd ..
# Build the source code using catkin_make
# For gcc
catkin_make -j8 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8
# For clang
# catkin_make -j8 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
If you have already downloaded the open-sourced dataset, run the following commands.
# Open a terminal and source the workspace environments
# For bash
source ~/gvins_ws/devel/setup.bash
# For zsh
# source ~/gvins_ws/devel/setup.zsh
# Run IC-GVINS node
# You should change the path in both the configuration file and command line
roslaunch ic_gvins ic_gvins.launch configfile:=path/urban38/IC-GVINS/gvins.yaml
# Open another terminal to play the ROS bag
rosbag play path/urban38/urban38.bag
We use standard ROS bag for IC-GVINS. The employed messages are as follows:
Sensor | Message | Default Topic | KAIST Dataset (Hz) | IC-GVINS Dataset (Hz) |
---|---|---|---|---|
Camera | sensor_msgs/Image | /cam0 | 10 | 20 |
IMU | sensor_msgs/Imu | /imu0 | 100 | 200 |
GNSS-RTK | sensor_msgs/NavSatFix | /gnss0 | 1 | 1 |
The IMU should be in front-right-down format in the IC-GVINS.
The tested sequences are urban38 and urban39.
Sequence | Time length (seconds) | Trajectory Length (m) | Baidu Cloud Link |
---|---|---|---|
urban38 (top) | 2154 | 11191 | urban38.bag (gyvr) |
urban39 (bottom) | 1856 | 10678 | urban39.bag (mnrn) |
We also open source our self-collected robot dataset.
Sequence | Time length (seconds) | Trajectory Length (m) | Baidu Cloud Link |
---|---|---|---|
campus (top) | 950 | 1337 | campus.bag (igks) |
building (bottom) | 1820 | 2560 | building.bag (2drg) |
You can run IC-GVINS with your self-collected dataset. Keep in mind the following notes:
- You should prepare well-synchronized GNSS, Camera, and IMU data in a ROS bag;
- The IMU data should be in front-right-down format;
- Modify the topic names in the ic_gvins.launch file;
- Modify the parameters in the configuration file.
We use evo to evaluate the TUM trajectory files. We also provide some useful scripts (evaluate_odometry) for evaluation.
We thanks the following projects for the helps in developing and evaluating the IC-GVINS:
- OB_GINS: An Optimization-Based GNSS/INS Integrated Navigation System
- VINS-Fusion: An optimization-based multi-sensor state estimator
- Complex Urban Dataset: Complex Urban Dataset with Multi-level Sensors from Highly Diverse Urban Environments
- evo: Python package for the evaluation of odometry and SLAM
The source code is released under GPLv3 license.
We are still working on improving the code. For any technical issues, please contact Dr. Hailiang Tang (thl@whu.edu.cn) or open an issue at this repository.
For commercial usage, please contact Prof. Xiaoji Niu (xjniu@whu.edu.cn).