We present ICE-BA, an incremental, consistent and efficient bundle adjustment for visual-inertial SLAM, which takes feature tracks, IMU measurements and optionally the loop constraints as input, performs in parallel both local BA over the sliding window and global BA over all keyframes, and outputs camera pose and updated map points for each frame in real-time. The main contributions include:
- a new BA solver that leverages the incremental nature of SLAM measurements to achieve more than 10x efficiency compared to the state-of-the-arts.
- a new relative marginalization algorithm that resolves the conflicts between sliding window marginalization bias and global loop closure constraints.
Beside the backend solver, the library also provides an optic flow based frontend, which can be easily replaced by other more complicated frontends like ORB-SLAM2.
The original implementation of our ICE-BA is at https://github.com/ZJUCVG/EIBA, which only performs global BA and does not support IMU input.
Authors: Haomin Liu, Mingyu Chen, Yingze Bao, Zhihao Wang
Related Publications:
Haomin Liu, Mingyu Chen, Guofeng Zhang, Hujun Bao and Yingze Bao. ICE-BA: Incremental, Consistent and Efficient Bundle Adjustment for
Visual-Inertial SLAM. (Accepted by CVPR 2018).PDF.
Haomin Liu, Chen Li, Guojun Chen, Guofeng Zhang, Michael Kaess and Hujun Bao. Robust Keyframe-based Dense SLAM with an RGB-D Camera [J]. arXiv preprint arXiv:1711.05166, 2017. [arXiv report].PDF.
Licensed under the Apache License, Version 2.0.
Refer to LISENCE for more details.
We have tested the library in Ubuntu 14.04 and Ubuntu 16.04.
The following dependencies are needed:
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install libeigen3-dev
https://github.com/google/glog
https://github.com/gflags/gflags
We use OpenCV 3.0.0.
https://opencv.org/
https://github.com/jbeder/yaml-cpp
cd ice-ba
chmod +x build.sh
./build.sh
We provide an example to run ice-ba with EuRoC dataset.
Please refer to run_ice_ba.sh for more details about how to run the example.