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