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.
We propose a system that utilizes two stages of the optimization to achieve global consistent and continuous pose estimation in real-time.
- In the first stage of optimization-the optimizeSlidingWindow stage, the sliding-window-based FGO is employed to integrate the GNSS-related factors, IMU pre-integration factor, and scan-to-map-based LiDAR factor for efficient odometry estimation.
- In the second stage of optimization-the optimizeBatch stage, the LiDAR factor is employed as a scan-to-multiscan scheme to maintain global consistency and improve the robustness to the GNSS outlier by large-scale batch optimization.
Video:
Ubuntu 64-bit 18.04, ROS Melodic. ROS Installation. The package is tested on Ubuntu 18.04 with ROS Melodic.
Ceres Solver is used for optimization, please refer to the instructions on GraphGNSSLib to install Ceres-solver.
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
mkdir result
git clone https://github.com/XikunLiu-huskit/3DLA-GLIO.git
cd ../
# if you fail in the last catkin_make, please source and catkin_make again
catkin_make
source ~/GLIO/devel/setup.bash
Launch GLIO via:
roslaunch GLIO run_urban_hk.launch
Open another terminal and launch the GNSS preprocessor by:
roslaunch global_fusion dataublox_Whampoa20210521.launch
Then play the bag:
rosbag play UrbanNav-HK_Whampoa-20210521_sensors.bag
Visit UrbanNav and download more data sequences follow the instruction.
GLIO is based on LiLi-OM, GraphGNSSLib, and GVINS. The rviz_satellite is used for visualization. Huge Thanks to their great work.
The source code is released under GPLv3 license.