GLIO: Tightly-Coupled GNSS/LiDAR/IMU Integration for Continuous and Drift-free State Estimation of Intelligent Vehicles in Urban Areas. paper link
GLIO is an accurate and robust online GNSS/LiDAR/IMU odometry system that tightly fuses the raw measurements from GNSS (pseudorange and Doppler), LiDAR, and IMU through non-linear factor graph optimization (FGO), which enables globally continuous and drift-free pose estimation even in highly challenging environments like urban canyons.
The package is based on C++ which is compatible with the robot operation system (ROS) platform. Meanwhile, this package combines the RTKLIB (version: 2.4.3 b33) to read/decode the GNSS RINEX files. Users from the Robotics field can easily have access to GNSS raw data for further study.
Authors: Xikun Liu, Weisong Wen, Li-ta Hsu from the Intelligent Positioning and Navigation Laboratory, The Hong Kong Polytechnic University.
Contact: Technical issue: xi-kun.liu@connect.polyu.hk, commercial issue: welson.wen@polyu.edu.hk.
We propose a system that utilizes two stages of the optimization to achieve global consistent and continuous pose estimation in real-time.
//: # ()
Package feature:
In this package, different fusion strategies for GNSS/LIO integration are implemented for comparison and further development, including
The trajectories of different fusion methods are shown as figure below.
To enable and visualize different fusion results, following parameters need to be noted.
visualization/LCinLocal
: Set true for activation and visualization of loosely-coupled GNSS/LIO fusion in ENU frame.Estimator/enable_batch_fusion
: Set true for activation and visualization of tightly-coupled batch-based GNSS/LiDAR/IMU integration in ENU frame.Estimator/sms_fusion_level
: Types of scan-to-multiscan constraints in batch-based integration. Set 0 for relative pose constraints, 1 for LiDAR surf feature constraints.Build image
mkdir GLIO_ws/src
cd ~/GLIO_ws/src
git clone https://github.com/XikunLiu-huskit/GLIO.git
cd ./GLIO/docker
sudo make build #sudo if you get permission denied
It may take a while to build the image as we also build ceres. Once it finishes, start a container with:
sudo ./start_GLIO.sh #sudo if you get permission denied
It will also creat a dataset folder under /docker, which we can use as a shared folder between host and container. Download dataset in /dataset folder, then we can play GLIO with the data.
Ubuntu 64-bit 18.04, ROS Melodic. ROS Installation. The package is tested on Ubuntu 18.04 with ROS Melodic.
Ceres Solver and GTSAM are used for optimization and fusion, for the installation of Ceres-solver, please refer to the instructions on GraphGNSSLib.
Eigen 3.3.3 is used for matrix calculation.
sudo apt-get install ros-melodic-novatel-msgs
GraphGNSSLib V1.1 and gnss_comm is pre-built in the package.
Clone the repository and catkin_make:
mkdir GLIO_ws/src
cd ~/GLIO_ws/src
git clone https://github.com/XikunLiu-huskit/GLIO.git
cd ../
# if you fail in the last catkin_make, please source and catkin_make again
catkin_make
source devel/setup.bash
Launch GLIO via:
roslaunch GLIO run_urban_hk.launch
Wait for GNSS data preprocessing, when the GNSS trajectory appears, play the bag:
rosbag play UrbanNav-HK_Whampoa-20210521_sensors.bag
Visit UrbanNav and download more data sequences follow the instruction.
Thank you for citing our paper GLIO: Tightly-Coupled GNSS/LiDAR/IMU Integration for Continuous and Drift-free State Estimation of Intelligent Vehicles in Urban Areas (IEEE T-IV) if you find this code useful.
@article{liu2023glio,
title={GLIO: Tightly-Coupled GNSS/LiDAR/IMU Integration for Continuous and Drift-free State Estimation of Intelligent Vehicles in Urban Areas},
author={Liu, Xikun and Wen, Weisong and Hsu, Li-Ta},
journal={IEEE Transactions on Intelligent Vehicles},
year={2023},
publisher={IEEE}
}
GLIO is based on LiLi-OM, GraphGNSSLib, and GVINS. The rviz_satellite is used for visualization. Huge Thanks to their great work.