https://github.com/rpng/r-vio2
Square-Root Robocentric Visual-Inertial Odometry with Online Spatiotemporal Calibration
https://github.com/rpng/r-vio2
calibration float32 icra iros ral robocentric slam square-root vins vio visual-inertial-mapping visual-inertial-odometry
Last synced: 6 months ago
JSON representation
Square-Root Robocentric Visual-Inertial Odometry with Online Spatiotemporal Calibration
- Host: GitHub
- URL: https://github.com/rpng/r-vio2
- Owner: rpng
- License: gpl-3.0
- Created: 2022-07-01T01:35:16.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-09-19T03:09:38.000Z (about 1 year ago)
- Last Synced: 2025-03-30T17:09:58.674Z (7 months ago)
- Topics: calibration, float32, icra, iros, ral, robocentric, slam, square-root, vins, vio, visual-inertial-mapping, visual-inertial-odometry
- Language: C++
- Homepage: https://ieeexplore.ieee.org/document/9830847
- Size: 7.7 MB
- Stars: 258
- Watchers: 13
- Forks: 30
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# R-VIO2
R-VIO2 is a novel square root information-based robocentric visual-inertial navigation algorithm using a monocular camera and a single IMU for consistent 3D motion tracking. It is developed based on our [robocentric VIO model](https://journals.sagepub.com/doi/pdf/10.1177/0278364919853361), while different with our previous work [R-VIO](https://github.com/rpng/R-VIO), we have derived and used i) our square-root robocentric formulation and ii) QR-based update combined with back substitution to improve the numerical stability and computational efficiency of the estimator. Moreover, the spatiotemporal calibration is performed online to robustify the performance of estimator in the presence of unknown parameter errors. Especially, this implementation can run in two modes: VIO or SLAM, where the former only estimates a sliding window of consecutive relative poses during the navigation (our *RA-L2022* paper), while the latter additionally estimates a small set of map points in favor of localization and mapping (the frontend developed for our *TRO2024* paper).

If you find this work relevant to or use it for your research, please consider citing the following papers:
- Zheng Huai and Guoquan Huang, **Square-Root Robocentric Visual-Inertial Odometry with Online Spatiotemporal Calibration**, *IEEE Robotics and Automation Letters (RA-L)*, 2022: [download](https://ieeexplore.ieee.org/document/9830847).
```
@article{huai2022square,
title={Square-root robocentric visual-inertial odometry with online spatiotemporal calibration},
author={Huai, Zheng and Huang, Guoquan},
journal={IEEE Robotics and Automation Letters},
volume={7},
number={4},
pages={9961--9968},
year={2022},
publisher={IEEE}
}
```
- Zheng Huai and Guoquan Huang, **A Consistent Parallel Estimation Framework for Visual-Inertial SLAM**, *IEEE Transactions on Robotics (T-RO)*, 2024: [download](https://ieeexplore.ieee.org/abstract/document/10609562).
```
@article{huai2024consistent,
title={A Consistent Parallel Estimation Framework for Visual-Inertial SLAM},
author={Huai, Zheng and Huang, Guoquan},
journal={IEEE Transactions on Robotics},
volume={40},
pages={3734--3755},
year={2024},
publisher={IEEE}
}
```## 1. Prerequisites
### ROS
Download and install instructions can be found at: http://wiki.ros.org/kinetic/Installation/Ubuntu.
### Eigen
Download and install instructions can be found at: http://eigen.tuxfamily.org. **Tested with v3.1.0**.
### OpenCV
Download and install instructions can be found at: http://opencv.org. **Tested with v3.3.1**.## 2. Build and Run
First `git clone` the repository and `catkin_make` it. Especially, `rvio2_mono` is used to run with rosbag in real time, while `rvio2_mono_eval` is used for evaluation purpose which preloads the rosbag and reads it as a txt file. A config file and a launch file are required for running R-VIO2 (for example, `rvio2_euroc.yaml` and `euroc.launch` are for [EuRoC](https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets) dataset). The default mode is VIO, while you can switch to SLAM mode by setting the maximum number of SLAM features to nonzero from the config file (see `rvio2_euroc.yaml`). To visualize the outputs, please use `rviz`.
#### Start ROS:
```
Terminal 1: roscore
```
```
Terminal 2: rviz (AND OPEN rvio2_rviz.rviz IN THE CONFIG FOLDER)
```
#### Run `rvio2_mono`:
```
Terminal 3: rosbag play --pause V1_01_easy.bag (AND SKIP SOME DATA IF NEEDED)
```
```
Terminal 4: roslaunch rvio2 euroc.launch
```
#### Run `rvio2_mono_eval`:
```
Terminal 3: roslaunch rvio2 euroc_eval.launch (PRESET PATH_TO_ROSBAG IN euroc_eval.launch)
```
Note that this implementation currently requires the sensor platform to start from stationary. Therefore, when testing the `Machine Hall` sequences you should skip the wiggling phase at the beginning. In particular, if you would like to run `rvio2_mono_eval`, the rosbag data to be skipped can be set in the config file (see `rvio2_euroc.yaml`).## 3. License
This code is released under [GNU General Public License v3 (GPL-3.0)](https://www.gnu.org/licenses/gpl-3.0.en.html).