• Stars
    star
    249
  • Rank 162,987 (Top 4 %)
  • Language
    C++
  • License
    MIT License
  • Created over 6 years ago
  • Updated over 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Closed-form Preintegration for Graph-based Visual-Inertial Navigation

Continuous Preintegration

This package contains the code implementation of the Closed-form PreIntegration (CPI) method for visual-inertial navigation that was first presented at WAFR 2016 and further extended in our recent IJRR paper:

  • Kevin Eckenhoff, Patrick Geneva, and Guoquan Huang, "Closed-form Preintegration Methods for Graph-based Visual-Inertial Navigation," International Journal of Robotics Research (IJRR), Jan 2019 (to appear).
  • Kevin Eckenhoff, Patrick Geneva, and Guoquan Huang, "High-Accuracy Preintegration for Visual-Inertial Navigation," International Workshop on the Algorithmic Foundations of Robotics (WAFR), December 18-20, 2016.
  • Kevin Eckenhoff, Patrick Geneva, and Guoquan Huang, "Continuous Preintegration Theory for Graph-based Visual-Inertial Navigation," arXiv:1805.02774, May 2018. arXiv
  • The companion technical report can also be found here.

Here we provide a complete system for visual-inertial navigation using synthetically generated vision and inertial measurements. This code was used for the comparision against the current state-of-the-art discrete method in GTSAM by Forster et al. [3]. All preintegration methods are implemented in the GTSAM optimization framework. For comparision, the methods are solved side-by-side using the GTSAM batch fix-lag smoother allowing for near constant memory requirements and easy marginalization.

We also include the MATLAB scripts for generating the Monte-Carlo simulation for comparision, and the trajectories collected from GAZEBO for evaluation and comparision. We use the GAZEBO simulator to get the groundtruth pose and IMU readings from a MAV trajectory, to which we add random noise when generating our Monte-Carlo scenarios (see the cpi_simulation directory for more details). We provide the scripts used to generate the results in the paper, and a step by step guide on how to generate these results yourself.

Demo Videos

Here are some youtube videos of continuous preintegration being used in a realworld system and achiving realtime performance. While they do not directly use this codebase, which is purely for simulation comparision, they use the files included in this repository to compute the preintegrated measurements.

IMAGE ALT TEXT IMAGE ALT TEXT IMAGE ALT TEXT

Building GTSAM

Ensure that you have Intel MKL and Intel TBB installed as this will allow for GTSAM multithreaded performance (link):

wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB
sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB
sudo sh -c 'echo deb https://apt.repos.intel.com/mkl all main > /etc/apt/sources.list.d/intel-mkl.list'
sudo sh -c 'echo deb https://apt.repos.intel.com/tbb all main > /etc/apt/sources.list.d/intel-tbb.list'
sudo apt-get update
sudo apt-get install intel-mkl-2018.1-038
sudo apt-get install intel-tbb-2018.0-033

Make sure you build with the manifold version of the GTSAM preintegration, you will get errors otherwise. This version is the original Forster et al. [3] RSS version. GTSAM defaults to a tangent space preintegration method. Note that the GTSAM discrete method was tested using the master branch at commit c21186c6212798e665da6b5015296713ddfe8c1d.

git clone https://bitbucket.org/gtborg/gtsam/
cd gtsam
mkdir build
cd build
cmake -DGTSAM_TANGENT_PREINTEGRATION=OFF ..
sudo make -j6 install

Using CPI in your own project

Because we use a JPL quaternion navigation state, factors that are not included in this repository will need to be derived in respect of this state. Take a look at the cpi_compare directory for more detail on key files and their functions. Here are the recommended steps for using this in your own system:

  1. Copy the /cpi/,/gtsam/, and /utils/quat_ops.h folders/file into your own project
  2. Include all .cpp files in your CMakelists.txt
  3. Add any new factors into this GTSAM folder, ensuring they are functions of the JPLNavState
  4. Copy-paste the desired functions from GraphSolver_IMU.cpp file depending on which integration you want to use
  5. Construct your GTSAM graph as normal (use the GraphSolver.cpp as an example)

Citation

Find this useful? Cite us with:

@article{Eckenhoff2019IJRR,
  author    = {Kevin Eckenhoff and Patrick Geneva and Guoquan Huang},
  title     = {Closed-form preintegration methods for graph-based visual-inertial navigation},
  journal   = {International Journal of Robotics Research},
  volume    = {38},
  number    = {5},
  year      = {2019},
  doi       = {10.1177/0278364919835021},
  url       = {https://doi.org/10.1177/0278364919835021}
}

More Repositories

1

open_vins

An open source platform for visual-inertial navigation research.
C++
2,111
star
2

R-VIO

Robocentric Visual-Inertial Odometry
C++
737
star
3

kalibr_allan

IMU Allan standard deviation charts for use with Kalibr and inertial kalman filters.
MATLAB
577
star
4

MINS

An efficient and robust multisensor-aided inertial navigation system with online calibration that is capable of fusing IMU, camera, LiDAR, GPS/GNSS, and wheel sensors. Use cases: VINS/VIO, GPS-INS, LINS/LIO, multi-sensor fusion for localization and mapping (SLAM). This repository also provides multi-sensor simulation and data.
C++
427
star
5

R-VIO2

Square-Root Robocentric Visual-Inertial Odometry with Online Spatiotemporal Calibration
C++
228
star
6

ov_plane

A monocular plane-aided visual-inertial odometry
C++
197
star
7

calc

Convolutional Autoencoder for Loop Closure
Python
190
star
8

lips

LiDAR-Inertial 3D Plane Simulator
MATLAB
150
star
9

suo_slam

Symmetry and Uncertainty-Aware Object SLAM for 6DoF Object Pose Estimation
Python
133
star
10

android-camera-calibration

Updated (opencv3 and camera2 API) android camera calibration application
C++
118
star
11

calc2.0

CALC2.0: Combining Appearance, Semantic and Geometric Information for Robust and Efficient Visual Loop Closure
Python
95
star
12

vicon2gt

Vicon-IMU fusion for groundtruth trajectory generation.
C++
95
star
13

ov_maplab

Interface for OpenVINS with the maplab project
C++
82
star
14

ocekf-slam

Observability-Constrained (OC)-EKF for 2D SLAM
MATLAB
79
star
15

android-dataset-recorder

Dataset collection app that will collect both IMG and IMU measurements for offline processing
Java
60
star
16

icalib.github.io

Inertial Aided Multi-Sensor Calibration
60
star
17

ov_secondary

Secondary posegraph adapted for interfacing with OpenVINS, based on VINS-Mono / VINS-Fusion.
C++
59
star
18

ar_table_dataset

Small-scale indoor table AR visual-inertial datasets with 6DoF groundtruth.
Python
53
star
19

reach_ros_node

ROS driver for the Reach RTK GNSS module by Emlid
Python
36
star
20

mast_project

Underwater Camera and Sonar SLAM (Kevin and Linde's MAST class project)
C++
36
star
21

pointgrey_ladybug

ROS Driver for Pointgrey Ladybug Cameras
C++
30
star
22

clatt

cooperative localization and target tracking
MATLAB
28
star
23

android_sensors_driver

ROS Driver for Android Sensors (opencv3 and camera1 API)
Java
26
star
24

xsens_standalone

Python Standalone library for use with the xsens IMU
Python
19
star
25

rosbags

Github mirror of https://gitlab.com/ternaris/rosbags
Python
18
star
26

kitti_parser

C++ parser for the RAW KITTI dataset, with callbacks
C++
15
star
27

gps_path_pub

Handy publishing of a path and and frame from a single GPS sensor.
C++
13
star
28

CSO

Calibration the rigid transformation between the stereo and odometry
C++
12
star
29

img_imu_record

Easy recording of image and imu data to disk
C++
9
star
30

orb_slam_mapmerge

A Versatile and Accurate Monocular SLAM (with map merging)
C++
7
star
31

apriltags-cpp

A simple ros wrapper for apriltag-cpp
C++
7
star
32

vins_source

Helper package with launch files for getting imu and video sources.
CMake
6
star
33

microstrain_comm

IMU driver for the Microstrain 3DM-GX3®-25. Converted to run on the ROS framework.
C
5
star
34

Microstrain-3DM-GX3-35

ROS driver for Microstrain 3DM-GX3-35 IMU
C
3
star
35

firefly

AscTec Firefly Documentation
1
star
36

ZED_Odom_Grabber

Grab zed stereo images and odometry from turtlebot at the same time.
C++
1
star
37

dvs128-viewer

A driver for dvs128 camera
Java
1
star