前言
SLAM(SLAM Simultaneous Localization and Mapping)全称同步定位与建图,通常分为以下五个部分
基于视觉的SLAM输入的传感器信息可以为2d图像、图像与IMU融合数据、带有深度信息的图像数据等。
ORB_SLAM2
ORB为Oriented FAST and Rotated BRIEF的简写,表明该算法使用Features From Accelerated Segment Test角点检测算法进行特征点检测,使用Binary Robust Independent Elementary Features二进制特征描述符对特征点进行编码以便于进行特征匹配,并基于此进行改进,解决了FAST算法不具有旋转不变性的问题。并通过构建图像金字塔解决了尺度不变性的问题
跟踪线程
FAST算子
用于提取角点即像素与领域像素灰度值差别较大的点
将图像转化为灰度图,经典FAST算法会以当前像素点为圆心,依次比较该点与圆上的像素点的灰度值差值,一般取16个像素点,若灰度值差值大于阈值的像素点个数大于阈值则认为该店为角点或特征点
这里在上面的基础上仅选取像素点正四个方向上的像素点进行灰度值比较,减少了比较的像素点个数,加快了运算速度。
通过图像金字塔方法,将当前帧进行若干次缩放,并对每一次缩放后的图像也进行角点检测,由此使得算法具有部分尺度可变性。
BRIEF描述子
该算子是一种二进制描述子,N维描述向量仅有0或1组成
算子根据以下步骤得到
- 以特征点为中心取一个方形的领域
- 在领域内使用高斯分布模型随机取N对攻击2N个点,并对2N个点进行高斯平滑后进行灰度值比较,并根据比较规则生成01编码,由此生成N个编码串,构成该特征点的描述子
- 在进行特征点匹配时应确保两个特征点的编码方式一致,即取点方式一致。
- 通过对两个描述子进行异或得到两者的相似程度,由此判断是否为同一个特征点
注:此时若存在旋转,N对随机的点与中心特征点的相对位置关系会发生改变,会出现特征点无法匹配的情况,故称不具有方向不变性
为解决该问题,可以对领域内所有点求取灰度值质心,根据领域质心以及中心特征点的相对位置关系可以求取其角度信息,由此增加角度信息维度。比较时根据角度信息将坐标系对齐即可。
为防止角点数目过多且集中分布,使用四叉树结构对图像进行分解,并保留分解后区块内的最多一个特征点,以对角点进行稀疏。
特征点匹配
通过对特征点两两之间求解汉明距离进行匹配,汉明距离最小且满足阈值条件的一对特征点可以进行匹配,汉明距离为两串编码中相同位的个数,可转化为两串编码异或后1的个数。
局部建图线程
即通过位姿估计算法算得两帧之间的相对运动关系,在初始化点的基础上,对所有相对运动进行积分便可以得到当前相机的位姿,将当前帧中所有的点进行旋转平移至世界坐标系下便得到了世界坐标系下的点云信息。
位姿估计算法可以分为2d-2d的对极几何方法以及包含深度信息的3d-2d的pnp问题。
2D-2D位姿估计
其中2D-2D意为两平面点的匹配,如图
假设两帧之间发生的运动为旋转运动R以及平移运动t,根据成像模型,可以得到
3d-2d位姿估计
采用EPNP求解方法求解两帧之间的相对运动关系,该算法的时间复杂度为O(N)。
构造控制点即求解空间中的特征向量,并引入之心使系数可以满足和为1
上述过程通过旋转平移矩阵建立两帧中控制点的关系,由此将问题转化为求解两个控制点并通过其遗址分解求解R和t
回环检测线程
该方法同样起到跟丢后重新校准的作用,使用BOW(Bag of words)算法实现,简而言之即是将所有关键帧及特征点的描述子在词典中进行保存,若检测到当前帧中的特征点描述子与词典中已有的帧相似度高便判断出回路,对两帧进行重新匹配,随后对整图进行矫正
Dynamic-SLAM
在传统ORB_SLAM2系统的基本框架上,Dynamic-SLAM在帧读取和跟踪线程之间增加了物体检测线程和语义校正线程,其中物体检测线程主要包括通过多层神经网络对输入帧进行分类和定位,语义校正线程通过先验知识对输入帧中的进行的物体进行动态物体决策。
该算法使用SSD网络构造先验常见动态物体的数据集,并对画面中的动态物体进行检测,检测到动态物体后将其上的特征点进行剔除,不参与后续的特征匹配部分。
为解决常见运动物体静止以及不常见运动物体的特殊情况,该算法对所有动态特征点的平均位移与其他静态特征点进行比较,从而判断该物体是否真正处于运动状态,由此增加了可供匹配的特征点个数,从而提升了准确性。
ORB_SLAM3
在2的基础上增加了鱼眼相机以及增加了IMU的接口,可以使用视觉惯性里程计。