• Stars
    star
    202
  • Rank 193,691 (Top 4 %)
  • Language
    C++
  • License
    GNU General Publi...
  • Created over 2 years ago
  • Updated over 1 year ago

Reviews

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

Repository Details

DynaVINS : A Visual-Inertial SLAM for Dynamic Environments

DynaVINS: A Visual-Inertial SLAM for Dynamic Environments

📑 About DynaVINS (IEEE RA-L'22)

  • A robust visual-inertial state estimator algorithm for dynamic environments.
  • The robust bundle adjustment is used for dynamic objects such as cars 🚗, humans 🏃, buses 🚌, etc.

animated animated

  • Please refer our paper for detailed explanantions and experimental results!
  • Youtube video for the detailed explanation and the demo video.

IMAGE ALT TEXT

➕ Additional package : VINS-Fusion-SC (SwitchableConstraints)

  • In our paper, VINS-Fusion combined with Switchable Constraints (git)was compared with DynaVINS.
  • VINS-Fusion-SC, an algorithm that integrates Switchable Constraints into the loop closure module of VINS-Fusion, is also useful, so we released the algorithm.
  • You can visit here to use VINS-Fusion-SC.
  • When using VINS-Fusion-SC for your paper, don't forget to cite our paper!😉

Test Env.

This code is tested on

  • Linux 18.04 LTS
  • ROS Melodic
  • Ceres Solver 1.14.0
  • OpenCV 3.4.1

📦 Prerequisites

The dependency of DynaVINS is equal to that of VINS-Fusion.

1. Ubuntu and ROS

Ubuntu 64-bit 16.04 or 18.04. ROS Kinetic or Melodic. ROS Installation

2. Ceres Solver

Follow Ceres Installation.

3. Support file from VINS-Fusion

Due to the limiting file size of Github, we need one package and two files from the VINS-Fusion repository.

  1. Set the camera_models package in your workspace, which is included in VINS-Fusion.
  2. Copy support_files/brief_k10L6.bin in VINS-Fusion into our support_files folder
  3. Copy support_files/brief_pattern.yml in VINS-Fusion into our support_files folder

🏗️ How to build

Please follow the below commands to build DynaVINS (on ROS).

$ cd ~/catkin_ws/src 
$ git clone https://github.com/url-kaist/dynaVINS
$ cd ../
$ catkin_make  
(or if you use catkin tools) catkin build
$ source ~/catkin_ws/devel/setup.bash

🏃 To run the demo codes

VIODE dataset (Only BA) examples

For convenience, we also provide 3_high.bag file in the parking_lot scene. You can download the file by the following command:

$ wget https://urserver.kaist.ac.kr/publicdata/dynaVINS/VIODE_dataset/parking_lot/3_high.bag

Note that the larger the number of bag files in the VIODE dataset is, the more dynamic objects exist.

1. VIODE sequence with monocular camera + IMU

$ roslaunch dynaVINS viode_mono.launch
$ rosbag play 3_high.bag (or 0_none.bag, 1_low.bag, ...)

2. VIODE sequence with stereo camera + IMU

$ roslaunch dynaVINS viode_stereo.launch
$ rosbag play 3_high.bag (or 0_none.bag, 1_low.bag, ...)

Our dataset (with Loop Closure module) examples

You can use your own intel realsense d455! (calibration is required)

You can easily download our bag file by the following command:

$ wget https://urserver.kaist.ac.kr/publicdata/dynaVINS/d455_urban_robotics/e_shape.bag
$ roslaunch dynaVINS d455_mono.launch
$ rosbag play e_shape.bag (or loop_tempstatic.bag, ...)
$ roslaunch dynaVINS d455_stereo.launch
$ rosbag play e_shape.bag (or loop_tempstatic.bag, ...)

⚙️ Parameters

Parameters of DynaVINS. You can find the results of each parameter on the wiki page (param)

Time comparison according to various parameters can be found on the wiki page (time).

  • regularization_lambda

    The Lambda value of regularization term in paper. (Section III-C)

  • momentum_on

    Using the momentum factor or not (true/false)

  • momentum_lambda

    The Lambda value of momentum term in paper. (Section III-D)

  • alternating_converge

    The threshold for checking the convergence of the alternating optimization.
    90% is usually enough. If you want faster speed, please try to reduce it.
    Time comparison can be found on the wiki page.

  • margin_feature_thresh

    Features which have less weight than this value are not used in marginalization.
    This may affect accuracy, but is effective at reducing time costs.
    You can try uncomment line 848 of "vins_estimator/estimator/estimator.cpp" to enable these features also in optimization.

    //ADDITIONAL FEATURE : NO USE IN OPT.
    //if(it_per_id.weight<DYN_FEAT_MARGIN_THRESH) continue;
  • hypodiff_dist

    The distance threshold for grouping constraints into the hypothesis. (Section IV-B)

  • hypodiff_yaw

    The angle threshold for grouping constraints into the hypothesis. (Section IV-B)

  • hypo_regularization

    The Lambda value of regularization term in loop closure module. (Section IV-C)

  • hypo_alternating_converge

    The threshold for checking the convergence of the alternating optimization in the loop closure module.

🔖 Citation

If you use our codes, please cite our paper (arXiv)

@article{song2022dynavins,
    title={DynaVINS: A Visual-Inertial SLAM for Dynamic Environments},
    author={Song, Seungwon and Lim, Hyungtae and Lee, Alex Junho and Myung, Hyun},
    journal={IEEE Robotics and Automation Letters},
    year={2022}
}

📫 Contact Information

If you have any questions, please do not hesitate to contact us:

  • Seungwon Song ✉️ sswan55 at kaist.ac.kr
  • Hyungtae Lim ✉️ shapelim at kaist.ac.kr

More Repositories

1

patchwork-plusplus

Patchwork++: Fast and robust ground segmentation method for 3D LiDAR scans. @ IROS'22
C++
626
star
2

Quatro

Fast and robust global registration for terrestrial robots @ ICRA2022
C++
307
star
3

patchwork-plusplus-ros

ROS & ROS2 Implementation of Patchwork++
C++
282
star
4

TRAVEL

Traversable ground and above-ground object segmentation using graph representation of 3D LiDAR scans
C++
249
star
5

UV-SLAM

UV-SLAM: Unconstrained Line-based SLAM Using Vanishing Points for Structural Mapping
C++
235
star
6

Ground-Segmentation-Benchmark

Ground segmentation benchmark in SemanticKITTI dataset
C++
191
star
7

AlterGround-LeGO-LOAM

The page for PaGO-LOAM: Robust Ground-Optimized LiDAR Odometry
C++
172
star
8

outlier-robust-radar-odometry

Outlier-robust radar odometry (ORORA), which is accepted in ICRA'23
C++
108
star
9

Patchwork2

Are you ready for fast and robust ground-segmentation for all terrain robots?
89
star
10

kaistviodataset

"Visual-Inertial Dataset" (RA-L'21 with ICRA'21): it contains harsh motions for VO/VIO, like pure rotation or fast rotation with various motion types.
Shell
75
star
11

Struct-MDC

Official page of Struct-MDC (RA-L'22 with IROS'22); Depth completion from Visual-SLAM using point & line features
Python
47
star
12

Quatro-LeGO-LOAM

C++
39
star
13

VinsFusionSC

VINS-Fusion combined with Switchable Constraints
C++
32
star
14

ERASOR2

Accepted in RSS'23 (coming soon!)
6
star
15

url_bib_utils

Frequently used abbreviations of conf/journals when writing references by latex
TeX
4
star
16

HeLiMOS-PointCloud-Toolbox

HeLiMOS Toolbox
C++
1
star