openvslam------slam解读系列
是什么: openvslam是日本先进工业科技研究(National Institute of Advanced Industrial Science and Technology )所于2019年5月20日开源的视觉SLAM框架; github源码地址:https://github.com/xdspacelab/openvslam
干什么的: 先上图:
通过不同类型的相机(单目,双目,RGBD,鱼眼或者全景相机)拍摄的序列图像(视频),实时定位当前位置以及重建三维空间的开源SLAM框架
优势(1)增加了鱼眼和全景相机的接口;
(2)相比较业内开源代码ORBSLAM2速度和性能上更具优势,原文截图:
(3)详细的文档,地址:https://openvslam.readthedocs.io/en/master/
怎么做:原文截图:
解释:三个模块:tracking module,mapping module, global optimization module,分别对应跟踪模块,主要是实现特征提取和位姿估计以及关键帧检测;mapping module主要是实现三维点重建以及局部位姿和三维点信息的优化;global optimization module主要是实现回环检测以及全局优化;
本文主要是解析如何实现的这一过程,主要是结合原文和代码去解释如何实现的,主要的框架是参考ORBSLAM的框架,所以比较过程清晰,下面是代码的结构:
camera: 定义相机类型,单目,双目,RGBD,鱼眼,全景
data: 定义openvslam的数据结构,包括BOW特征匹配,keyframe,landmark,map,graph等
feature: ORB特征点的实现与提取
initialize: 初始化
io: 输入输出文件读取和保存
match: 各种匹配方法的实现,包括区域法,BOW法,robust match等
module: 具体每个步骤的实现模块,包括初始化,关键帧选取,localmap的构建清除,局部BA,重定位等
optimization: 各种优化算法实现过程,包括全局BA,局部BA,位姿优化,拓扑图优化等
solve: 位姿和三维点解算实现,包括基础矩阵求解位姿,本质矩阵求解位姿,单应性矩阵求解位姿,P3P,相似变换求解位姿
public: 显示的实现,包括特征点跟踪状态的显示以及三维重建位姿定位的显示,主要是通过Pangolin,socket.io-client-cpp实现
util: 一些额外的操作,比如随机数的生成,图像灰度化等
tracking module ,mapping module, global optimization module: 三个主要的模块
system: openvslam的接口
config: 读取控制参数的接口函数,通过yaml-cpp第三方库实现的;
。。。。。未完待续