/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.

Other Surveys/Paper

Title Year Link
Comparison of modern open-source Visual SLAM approaches 2023 https://arxiv.org/abs/2108.01654
Deep Learning Techniques for Visual SLAM: A Survey 2023 https://ieeexplore.ieee.org/abstract/document/10054007
The list of vision-based SLAM / Visual Odometry open source projects, libraries, dataset, tools, and studies 2022 https://github.com/tzutalin/awesome-visual-slam
Another list of Visual-SLAM algorithms 2022 https://github.com/marknabil/SFM-Visual-SLAM
A Comparison of Modern General-Purpose Visual SLAM Approaches 2021 https://arxiv.org/abs/2107.07589
List of SLAM / VO algorithms 2017 https://nbviewer.jupyter.org/github/kafendt/List-of-SLAM-VO-algorithms/blob/master/SLAM_table.pdf

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

Active

Package Active License  Topics published Stereo/Mono SLAM ROS version Year (last update) Paper
ORB-SLAM3 (somewhat*) GPLv3 N/A Yes / Yes Yes N/A 2020 (2022-02) https://ieeexplore.ieee.org/abstract/document/9440682
XIVO XIVO Yes GPLv3/CC BY-NC 3.0-like None Yes / Yes N/A 1 2019 (2023-03) http://vision.ucla.edu/papers/tsotsosCS15.pdf
VINS-Mono VINS-Mono Yes GPLv3 None Yes / Yes No 1 2017 (2022-09) https://ieeexplore.ieee.org/document/8421746/?arnumber=8421746&source=authoralert
OpenVINS OpenVINS Yes GPLv3 None Yes / Yes N/A 1 2019 (2023-04) https://udel.edu/~ghuang/iros19-vins-workshop/papers/06.pdf
Maplab Maplab Yes GPLv3 N/A Yes / Yes Yes 1 2018 (2023-04) https://arxiv.org/abs/1711.10250
LIMO LIMO Yes GPLv3 ? ? / ? 1 2018 (2022-09) https://books.google.de/books?hl=en&lr=&id=cZW8DwAAQBAJ&oi
R-VIO R-VIO Yes GPLv3 ? ? / Yes 1 2018 (2023-04) https://journals.sagepub.com/doi/10.1177/0278364919853361
Momo Momo Yes LGPLv3 ? No / Yes No N/A 2017 (2022-09) -

Inactive

Package Active License  Topics published Stereo/Mono SLAM ROS version Year (last update) Paper
Learn VI-ORB Learn VI-ORB No GPLv3 None Yes / Yes Yes 1 2016 (2017)
ORB-SLAM2 ORB-SLAM2 No GPLv3 None Yes / Yes Yes 1 2016 (2017) https://arxiv.org/abs/1610.06475
OpenVSLAM OpenVSLAM No MIT None Yes / Yes Yes 1 / 2 2019 (2020) https://arxiv.org/abs/1910.01122
VISO2 VISO2 No GPLv3 nav_msgs/Odometry / geometry_msgs/Pose Yes / Yes No 1 2011 (2019) http://t.cvlibs.net/publications/Geiger2011IV.pdf
Rovio Rovio No BSD-3 None Yes / Yes N/A 1 2017 (2019) https://www.research-collection.ethz.ch/handle/20.500.11850/263423
Kimera-Semantics Kimera-Semantics No BSD-2 None Yes / Yes N/A 1 2019 (2021) https://arxiv.org/pdf/1910.02490.pdf
LSD-SLAM LSD-SLAM No GPLv3 None No / Yes N/A 1 2014 (2014) https://vision.in.tum.de/_media/spezial/bib/caruso2015_omni_lsdslam.pdf
CubeSLAM CubeSLAM No BSD-3 None Yes / Yes Yes 1 2019 (2020) https://arxiv.org/abs/1806.00557
VINS-Fusion VINS-Fusion No GPLv3 None Yes / Yes Yes 1 2019 (2021) https://ieeexplore.ieee.org/abstract/document/8593603
SE2SLAM SE2SLAM No MIT geometry_msgs::Pose / geometry_msgs::PoseStamped Yes / Yes Yes 1 2019 (2020) https://fzheng.me/icra/2019.pdf
SE2CLAM SE2CLAM No MIT geometry_msgs::PoseStamped Yes / Yes Yes 1 2018 (2020) https://ieeexplore.ieee.org/document/8357438
VINS-FusionGPU VINS-FusionGPU No GPLv3 ? Yes / Yes Yes 1 2019 (2019) -
DSO DSO No GPLv3 None Yes / Yes No No 1 2016 (2018)
DSO Ros2 No GPLv3 ? ? / ? 2 2019 (2019) -
Edge Direct VO No N/A N/A Yes / No No  None 2019 (2019) https://arxiv.org/abs/1906.04838
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 No GPLv3
dslam open No 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 No GPLv3
PL-SLAM PL-SLAM No GPLv3
MSCKF_VIO MSCKF_VIO No GPLv3/CC BY-NC 3.0-like
REBiVO REBiVO No GPLv3
DeepVO Tensorflow DeepVO TF No MIT N/A Yes / Yes No 2017 https://arxiv.org/abs/1709.08429
DeepVO PyTorch DeepVO PyTorch No N/A N/A Yes / Yes No 2017 https://arxiv.org/abs/1709.08429
DF-VO DF-VO No MIT None  Yes / No No N/A 2019 (2022-03) https://arxiv.org/abs/1909.09803v2
okvis okvis No BSD-3
geomapnet geomapnet No CC BY-NC-SA 4.0
Mono-VO No MIT

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 12 month I consider it active.

somewhat for ORB-SLAM3 means that people are working on it but the main author is not reacting to pull requests, but its SOTA.

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
kalibr Yes N/A Yes
VIO Data simulation No N/A N/A N/A N/A N/A N/A N/A
VSLAM evaluation No
vicalib No
https://github.com/vislearn/LessMore No
Time Autosync No
CRISP No GPLv3

Other VO resources

Link Descritpion
https://github.com/KopanevPavel/SLAM-Dockers Docker-container for different SLAM-algorithms
https://github.com/gaoxiang12/slambook Code written for a book about visual SLAM called "14 lectures on visual SLAM" which was released in April 2017.
https://github.com/AtsushiSakai/PythonRobotics Python code collection of robotics algorithms (basics, without V-SLAM or VO)
https://github.com/openMVG/awesome_3DReconstruction_list A curated list of papers & resources linked to 3D reconstruction from images.