A stereo visual SLAM system with featured-based VO and keyframe-based optimization.
This video shows the stereo visual SLAM system tested on the KITTI dataset sequence 00.
Check out my portfolio post for a detailed description of the components and algorithms used in this implementation.
This project built a stereo visual SLAM system from scratch. It has feature-based visual odometry using ORB features, and a keyframe-based map management and optimization backend. The system is integrated with ROS.
The system has six major components:
config/
├── kitti_config.rviz
└── kitti_param.yaml
include/
└── stereo_visual_slam_main
├── library_include.hpp
├── map.hpp
├── optimization.hpp
├── types_def.hpp
├── visual_odometry.hpp
└── visualization.hpp
launch/
└── run_vslam.launch
src/
├── stereo_visual_slam_main
├── map.cpp
├── optimization.cpp
├── types_def.cpp
├── visual_odometry.cpp
└── visualization.cpp
└── run_vslam.cpp
config/kitti_param.yaml
contains the path to the datasetlibrary_include.hpp
include libraries that are commonly used in the packagemap.hpp
definition of map management moduleoptimization.hpp
implementation of non-linear optimization using G2Otypes_def.hpp
definition of frame, landmark, feature structvisual_odometry.hpp
functions for the stereo visual odometryvisualization.hpp
the visualization modulerun_vslam.cpp
is the ROS node for running this systemfork
this repository, then git clone
or build using wstool
catkin_make -DCMAKE_BUILD_TYPE=Release
in release modeconfig/kitti_param.yaml
if_rviz
to true in config/kitti_param.yaml
if_write_pose
to true in config/kitti_param.yaml
source devel/setup.bash
and roslaunch stereo_visual_slam_main run_vslam.launch
The table below shows the performance of my implementation on KITTI Dataset sequence 00. The runtime is around 0.18s for a keyframe and 0.04s for a non-keyframe.
Seq 00 on KITTI | Translational Error (%) | Rotational Error (deg/m) |
---|---|---|
Without Optimization | 4.40 | 1.38 |
With Optimization | 4.17 | 1.37 |
The figure below shows the trajectory estimated by my implementation compared to the ground truth. The system has been tested on KITTI sequence 00 and 01 without lost.