lukasvst / dm-vio

Source code for the paper DM-VIO: Delayed Marginalization Visual-Inertial Odometry
GNU General Public License v3.0
1.07k stars 187 forks source link

DM-VIO: Delayed Marginalization
Visual-Inertial Odometry

Paper | Video | Project Page

When using this project in academic work, please consider citing:

@article{stumberg22dmvio,
  author = {L. von Stumberg and D. Cremers},
  title = {{DM-VIO}: Delayed Marginalization Visual-Inertial Odometry},
  journal = {{IEEE} Robotics and Automation Letters ({RA-L})},
  year = {2022},
  volume = {7},
  number = {2},
  pages = {1408-1415},
  doi = {10.1109/LRA.2021.3140129}
}

New: ROS version and Live demo for Realsense cameras

1. Related Papers

2. Installation

git clone https://github.com/lukasvst/dm-vio.git

The following instructions have been tested with Ubuntu 20.04. The system is also known to work well on Ubuntu 16.04, 18.04 and MacOS Big Sur (only Intel Macs have been tested so far).

2.1 Required Dependencies

Suitesparse, Eigen3, Boost, yaml-cpp (required).

Required, install with

sudo apt-get install cmake libsuitesparse-dev libeigen3-dev libboost-all-dev libyaml-cpp-dev

On MacOS we recommend Homebrew to install the dependencies. It might be necessary to install boost@1.60 instead of the newest boost, in order for the used GTSAM version to work.

GTSAM (required).

Build from source with

sudo apt install libtbb-dev
git clone https://github.com/borglab/gtsam.git
cd gtsam
git checkout 4.2a6          # newer gtsam versions might not work.
mkdir build && cd build
cmake -DGTSAM_POSE3_EXPMAP=ON -DGTSAM_ROT3_EXPMAP=ON -DGTSAM_USE_SYSTEM_EIGEN=ON -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..
make -j
sudo make install

(Note: It seems like the keyframe operations are 2-3% slower with this GTSAM version compared to an older commit. To reproduce the realtime paper results you should use commit a738529af9754c7a085903f90ae8559bbaa82e75 of GTSAM).

OpenCV.

Used to read, write and display images. Install with

sudo apt-get install libopencv-dev
Pangolin.

Like for DSO, this is used for the GUI. You should install v0.6. Install from https://github.com/stevenlovegrove/Pangolin

sudo apt install libgl1-mesa-dev libglew-dev pkg-config libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
git checkout v0.6
mkdir build
cd build
cmake ..
cmake --build .
sudo make install

2.2 Recommended Dependencies

Librealsense

This is necessary for the live demo for Realsense cameras. See doc/RealsenseLiveVersion.md for details

GTest (optional).

For running tests, install with git submodule update --init.

ziplib (optional).

Used to read datasets with images as .zip. See src/dso/README.md for instructions.

sse2neon (required for ARM builds).

After cloning, run git submodule update --init to include this.

2.3 Build

cd dm-vio
mkdir build
cd build
cmake ..
make -j

This compiles dmvio_dataset to run DM-VIO on datasets (needs both OpenCV and Pangolin installed). It also compiles the library libdmvio.a, which other projects can link to.

Trouble-Shooting

The project is based on DSO and only has two additional dependencies with GTSAM and yaml-cpp. In case of problems with compilation we recommend trying to compile https://github.com/JakobEngel/dso first and seeing if it works.

3 Running

Download a TUM-VI sequence (download in the format Euroc / DSO 512x512) at https://vision.in.tum.de/data/datasets/visual-inertial-dataset

bin/dmvio_dataset
    files=XXXX/datasetXXXX/dso/cam0/images              
    vignette=XXXX/datasetXXXX/dso/cam0/vignette.png
    imuFile=XXXX/datasetXXXX/dso/imu.txt
    gtFile=XXXX/datasetXXXX/dso/gt_imu.csv
    tsFile=XXXX/datasetXXXX/dso/cam0/times.txt
    calib=PATH_TO_DMVIO/configs/tumvi_calib/camera02.txt
    gamma=PATH_TO_DMVIO/configs/tumvi_calib/pcalib.txt
    imuCalib=PATH_TO_DMVIO/configs/tumvi_calib/camchain.yaml
    mode=0
    use16Bit=1
    preset=0                                                        # use 1 for realtime
    nogui=0                                                         # use 1 to enable GUI
    resultsPrefix=/PATH_TO_RESULTS/
    settingsFile=PATH_TO_DMVIO/configs/tumvi.yaml
    start=2                                                         

Instead of typing this long command you can use the python tools.

Running on EuRoC, 4Seasons, reproducing paper results, etc.

We strongly recommend using the python-dm-vio tools published at: https://github.com/lukasvst/dm-vio-python-tools

They can be used to

Commandline arguments

There are two types of commandline arguments:

  1. Main arguments defined in util/MainSettings.cpp (see parseArgument and registerArgs). Most of these are derived from DSO, so you can read src/dso/README.md for documentation on them.
  2. Lots of additional settings are defined using the SettingsUtil. They can be set either using comandline or by placing them in the yaml file defined with the commandline argument settingsFile. All of them are printed to commandline when the program starts (and also into the file usedSettingsdso.txt). Most of these are documented in the header file they are defined in (see src/IMU/IMUSettings.h, src/IMUInitialization/IMUInitSettings.h).

4 Running the live demo

See doc/RealsenseLiveVersion.md

5 Running on your own datasets

To run on your own dataset you need

When enabling IMU data you also need

Notes on IMU-camera synchronization: There are two "levels" of IMU-camera synchronization:

You can first set useimu=0 to try the visual-only system (basically DSO). If this does not work well for comparably slow motions, there is likely a problem with camera calibration which should be addressed first.

For adjusting your config you might also find the tips given on this page interesting.

6 License

DM-VIO is based on Direct Sparse Odometry (DSO), which was developed by Jakob Engel at the Technical University of Munich and Intel. Like DSO, DM-VIO is licensed under the GNU General Public License Version 3 (GPLv3).