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.
- 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.
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 |
- cartographer - Real-time simultaneous localization and mapping (SLAM) in 2D and 3D across multiple platforms and sensor configurations. cartographer
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 | 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 | Yes | GPLv3 | None | Yes / Yes | No | 1 | 2017 (2022-09) | https://ieeexplore.ieee.org/document/8421746/?arnumber=8421746&source=authoralert |
OpenVINS | Yes | GPLv3 | None | Yes / Yes | N/A | 1 | 2019 (2023-04) | https://udel.edu/~ghuang/iros19-vins-workshop/papers/06.pdf |
Maplab | Yes | GPLv3 | N/A | Yes / Yes | Yes | 1 | 2018 (2023-04) | https://arxiv.org/abs/1711.10250 |
LIMO | Yes | GPLv3 | ? | ? / ? | 1 | 2018 (2022-09) | https://books.google.de/books?hl=en&lr=&id=cZW8DwAAQBAJ&oi | |
R-VIO | Yes | GPLv3 | ? | ? / Yes | 1 | 2018 (2023-04) | https://journals.sagepub.com/doi/10.1177/0278364919853361 | |
Momo | Yes | LGPLv3 | ? | No / Yes | No | N/A | 2017 (2022-09) | - |
Package | Active | License | Topics published | Stereo/Mono | SLAM | ROS version | Year (last update) | Paper |
---|---|---|---|---|---|---|---|---|
Learn VI-ORB | No | GPLv3 | None | Yes / Yes | Yes | 1 | 2016 (2017) | |
ORB-SLAM2 | No | GPLv3 | None | Yes / Yes | Yes | 1 | 2016 (2017) | https://arxiv.org/abs/1610.06475 |
OpenVSLAM | No | MIT | None | Yes / Yes | Yes | 1 / 2 | 2019 (2020) | https://arxiv.org/abs/1910.01122 |
VISO2 | No | GPLv3 | nav_msgs/Odometry / geometry_msgs/Pose | Yes / Yes | No | 1 | 2011 (2019) | http://t.cvlibs.net/publications/Geiger2011IV.pdf |
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 | No | BSD-2 | None | Yes / Yes | N/A | 1 | 2019 (2021) | https://arxiv.org/pdf/1910.02490.pdf |
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 | No | BSD-3 | None | Yes / Yes | Yes | 1 | 2019 (2020) | https://arxiv.org/abs/1806.00557 |
VINS-Fusion | No | GPLv3 | None | Yes / Yes | Yes | 1 | 2019 (2021) | https://ieeexplore.ieee.org/abstract/document/8593603 |
SE2SLAM | No | MIT | geometry_msgs::Pose / geometry_msgs::PoseStamped | Yes / Yes | Yes | 1 | 2019 (2020) | https://fzheng.me/icra/2019.pdf |
SE2CLAM | No | MIT | geometry_msgs::PoseStamped | Yes / Yes | Yes | 1 | 2018 (2020) | https://ieeexplore.ieee.org/document/8357438 |
VINS-FusionGPU | No | GPLv3 | ? | Yes / Yes | Yes | 1 | 2019 (2019) | - |
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 | No | GPLv3 | visualization_msgs::msg::Marker | |||||
SVO | No | GPLv3 | ||||||
SVO 2.0 | No | N/A (GPLv3?) | ||||||
ROS Mono VO | No | BSD-2 | ||||||
SIVO | No | GPLv3 | ||||||
dslam open | No | GPLv3 | ||||||
Stereo DSO | No | GPLv3 | ||||||
VISO2 Python | No | GPLv3 contamination | ||||||
MonoVO Python | No | N/A | ||||||
DPPTAM | No | GPLv3 | ||||||
StVO-PL | No | GPLv3 | ||||||
PL-SLAM | No | GPLv3 | ||||||
MSCKF_VIO | No | GPLv3/CC BY-NC 3.0-like | ||||||
REBiVO | No | GPLv3 | ||||||
DeepVO Tensorflow | No | MIT | N/A | Yes / Yes | No | 2017 | https://arxiv.org/abs/1709.08429 | |
DeepVO PyTorch | No | N/A | N/A | Yes / Yes | No | 2017 | https://arxiv.org/abs/1709.08429 | |
DF-VO | No | MIT | None | Yes / No | No | N/A | 2019 (2022-03) | https://arxiv.org/abs/1909.09803v2 |
okvis | No | BSD-3 | ||||||
geomapnet | No | CC BY-NC-SA 4.0 | ||||||
Mono-VO | No | MIT |
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.
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 |
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. |