/vo-survey

Visual Odometry and SLAM survey for ROS and ROS2

MIT LicenseMIT

A survey of ROS enabled Visual odometry (and VSLAM)

I've been trying to find a ROS2 package for visual odometry that publishes an odometry topic, and it turned out to be quite difficult. I decided to to this little write-up for others interested in the same thing, perhaps it'll make it easier for someone.

Contributions and updates are appreciated! Preferably a PR, if not create an issue if you see any problems.

Beware and avoid the GPL and CC Non-commercial licensed stuff, mostly just there for reference and for people in research.

Definitions of terms:

  • Odometry - in ROS twist (rotation) and pose (translation) of the robot
  • Visual Inertial SLAM (VI-SLAM) - is SLAM based on both visual (camera) sensor information and IMU (inertial information) fused.
  • Monocular visual odometry - Odometry based on a single (mono) camera.
  • Wheel odometry - using the size and angular motion (rotation) of the robots wheels calculate how the robot is moving.

Packages and code

SLAM

  • cartographer - Real-time simultaneous localization and mapping (SLAM) in 2D and 3D across multiple platforms and sensor configurations. cartographer

Visual Odometry

Package Active License  Topics published Stereo/Mono SLAM ROS version Year Paper
Learn VI-ORB Learn VI-ORB No GPLv3 None Yes / Yes Yes 1 2016
ORB-SLAM2 ORB-SLAM2 No GPLv3 None Yes / Yes Yes 1 2016 https://arxiv.org/abs/1610.06475
OpenVSLAM OpenVSLAM Yes MIT None Yes / Yes Yes 1 / 2 2019 https://arxiv.org/abs/1910.01122
VISO2 VISO2 No GPLv3 nav_msgs/Odometry / geometry_msgs/Pose Yes / Yes No 1 2011 http://t.cvlibs.net/publications/Geiger2011IV.pdf
XIVO XIVO Yes GPLv3/CC BY-NC 3.0-like None Yes / Yes N/A 1 2019 http://vision.ucla.edu/papers/tsotsosCS15.pdf
Rovio Rovio Yes BSD-3 None Yes / Yes N/A 1 2017 https://www.research-collection.ethz.ch/handle/20.500.11850/263423
Kimera-Semantics Kimera-Semantics Yes BSD-2 None Yes / Yes N/A 1 2019 https://arxiv.org/pdf/1910.02490.pdf
LSD-SLAM LSD-SLAM No GPLv3 None No / Yes N/A 1 2014 https://vision.in.tum.de/_media/spezial/bib/caruso2015_omni_lsdslam.pdf
CubeSLAM CubeSLAM Yes BSD-3 None Yes / Yes Yes 1 2019 https://arxiv.org/abs/1806.00557
VINS-Fusion VINS-Fusion Yes GPLv3 None Yes / Yes Yes 1 2019 https://ieeexplore.ieee.org/abstract/document/8593603
VINS-Mono VINS-Mono Yes GPLv3 None Yes / Yes No 1 2017 https://ieeexplore.ieee.org/document/8421746/?arnumber=8421746&source=authoralert
OpenVINS OpenVINS Yes GPLv3 None Yes / Yes N/A 1 2019 https://udel.edu/~ghuang/iros19-vins-workshop/papers/06.pdf
SE2SLAM SE2SLAM Yes MIT geometry_msgs::Pose / geometry_msgs::PoseStamped Yes / Yes Yes 1 2019 https://fzheng.me/icra/2019.pdf
SE2CLAM SE2CLAM Yes MIT geometry_msgs::PoseStamped Yes / Yes Yes 1 2018 https://ieeexplore.ieee.org/document/8357438
VINS-FusionGPU VINS-FusionGPU No GPLv3
DSO DSO No GPLv3 None Yes / Yes No No 1 2016
DSO Ros2 Yes GPLv3
Edge Direct VO Yes N/A N/A Yes / No No  None 2019 https://arxiv.org/abs/1906.04838
Maplab Maplab Yes GPLv3 N/A Yes / Yes Yes 1 2018 https://arxiv.org/abs/1711.10250
ORB_SLAM2 Ros2 ORB_SLAM2 Ros2 No GPLv3 visualization_msgs::msg::Marker
SVO SVO No GPLv3
SVO 2.0 No N/A (GPLv3?)
ROS Mono VO ROS Mono VO No BSD-2 
SIVO SIVO Yes GPLv3
dslam open Yes GPLv3
LIMO LIMO Yes GPLv3
Stereo DSO Stereo DSO No GPLv3
VISO2 Python VISO2 Python No GPLv3 contamination
MonoVO Python MonoVO Python No N/A
DPPTAM No GPLv3
StVO-PL StVO-PL Yes GPLv3
PL-SLAM PL-SLAM Yes GPLv3
MSCKF_VIO MSCKF_VIO Yes GPLv3/CC BY-NC 3.0-like
REBiVO REBiVO No GPLv3
R-VIO R-VIO Yes GPLv3
DeepVO Tensorflow DeepVO TF No MIT N/A Yes / Yes No 2017 https://arxiv.org/abs/1709.08429
DeepVO PyTorch DeepVO PyTorch Yes N/A N/A Yes / Yes No 2017 https://arxiv.org/abs/1709.08429
DF-VO DF-VO Yes MIT None  Yes / No No N/A 2019 https://arxiv.org/abs/1909.09803v2
okvis okvis No BSD-3
geomapnet geomapnet Yes CC BY-NC-SA 4.0
Momo Momo No LGPLv3

Additional information

Active is used loosely and subjectively, pretty much if I see that either some PR has been merged, commit has been made or even some maintainer/author has addressed an issue the past 9 - 12 month I consider it active.

Some libraries are addded that do not have a ROS-wrapper, however they might be there because it would be fairly straightforward to write a wrapper, or because the implementation is interesting for inspiration or similar.

I'm mostly interested in ROS2, so I do not break down the version on different release, neither for ROS1 or ROS2, but I see that that might be valuable as well.

VO tools and calibration

Package Active Topics published Stereo Mono Omni SLAM ROS version Year Paper License
VIO Data simulation Yes N/A N/A N/A N/A N/A N/A N/A
VSLAM evaluation
vicalib No
https://github.com/vislearn/LessMore
kalibr
Time Autosync
CRISP No GPLv3

Other VO resources

https://github.com/gaoxiang12/slambook https://github.com/avisingh599/mono-vo https://github.com/AtsushiSakai/PythonRobotics https://github.com/tzutalin/awesome-visual-slam https://github.com/marknabil/SFM-Visual-SLAM https://github.com/openMVG/awesome_3DReconstruction_list https://nbviewer.jupyter.org/github/kafendt/List-of-SLAM-VO-algorithms/blob/master/SLAM_table.pdf