前言:
这里比较一下视觉SLAM和激光SLAM的区别,仅比较其在算法层面上的一些不同,这里拿视觉SLAM算法:ORB-SLAM系列和激光SLAM算法:LOAM系列对比。
一:特征提取
1.ORB-SLAM(视觉SLAM)
ORB-SLAM算法采用ORB特征点,ORB特征点一般提取在角点上面,每一个ORB特征点具有以下信息:
- 位置信息:该ORB特征点所在的图像像素坐标。
- 描述子信息:用来描述该特征点的周围信息。
2.LOAM(激光SLAM)
LOAM算法采用线点和面点作为特征点,每个特征点仅具备位置信息:
- 位置信息:该特征点在当前雷达坐标系下的空间点坐标
二:特征匹配
1.ORB-SLAM(视觉SLAM)
ORB-SLAM算法对于每个特征点寻找自己的匹配点,其根本方法都是比较特征点之间描述子之间的汉明距离,距离小于设定的阈值即可认定为是匹配点。对于如何寻找特征点的候选匹配点范围有以下几种方法:
暴力匹配(单目初始化):
对每一个当前帧特征点画圆,计算当前帧特征点与上一帧圆内的特征点之间的描述子距离,距离最近且小于一定阈值的认为是匹配点。
词袋匹配(回环检测,丢失重定位):
根据特征点的描述子距离,为每一帧的特征点赋予特征点在词袋中的节点信息。在进行特征匹配时,只在该特征点所属的节点内部搜索候选匹配点即可。
优点:
- 1.快速锁定候选匹配点,匹配效率很高
- 2.不需要位姿估计即可匹配。
缺点:
- 比较依赖字典,能够成功匹配的特征较少。
地图点投影匹配:
ORB-SLAM2中用到最多的匹配方式。其中地图点的来源主要如下:
- 恒速模跟踪模型中,地图点来自前一个普通帧。(会选择不同层级的金字塔中的特征点作为候选匹配点)
- 局部地图跟踪中,地图点来自所有局部地图点。
- 重定位跟踪中,地图点来自于候选关键帧。
- 闭环线程中,地图点来自于闭环关键帧及其共视关键帧。
相互投影匹配:
2.LOAM(激光SLAM)
激光中点云的配准主要以scan-to-scan或者scan-to-map为主。激光特征点寻找匹配点方式比较简单直接,对于当前帧每个点寻找上一帧或者地图中距离最近的点当做匹配点。
三:位姿估计
1.ORB-SLAM(视觉SLAM)
(1)第一阶段跟踪(目的:每一帧跟的上,粗略的位姿估计)
- 参考关键帧跟踪:采用3D-2D:PnP的方式进行最小化重投影误差求解位姿。
- 恒速模型跟踪:采用前一帧间的速度等于当前帧间的速度的方式来推导当前位姿。
- 重定位跟踪:利用重定位候选关键帧内和当前帧的匹配点通过EPnP方法估计当前位姿。
(2)第二阶段跟踪(目的:每一帧得到更多的匹配关系,得到相对准确的位姿)
- 局部地图跟踪:采用局部地图和当前帧匹配点的3D-2D:PnP最小化重投影误差的方式估计当前位姿。
2.LOAM(激光SLAM)
激光SLAM的位姿估计方法一般采用ICP的方式,ICP的方式在激光SLAM中又可分为3种:
- 点到点ICP:当不对雷达点云进行特征提取时,直接对当前帧点云进行匹配,采取点到点ICP非线性优化的方式进行位姿估计。
- 点到线、点到面ICP:当对点云提取线特征和面特征时,一般采用线点到线的距离最小化、面点到面的距离最小化的非线性优化方法进行位姿估计。
除了ICP的方法还有就是直接法NDT方法:
NDT方法是将目标点云按照一定的分辨率分成若干体素,计算每个体素中的均值和方差,配准时先计算每个点落在哪个体素中,然后建立该点与该体素的均值、方差构成的残差。通过建立的残差最小化二乘问题求解当前帧位姿。(我认为也可以认作是ICP的一种方法)
四:后端优化
1.ORB-SLAM(视觉SLAM)
参考文章:ORB_SLAM2 Optimizer_全局ba-优快云博客
ORB_SLAM2使用g2o库进行优化。
优化分为四种:
- 全局BA优化(在单目初始化之后、回环检测之后进行全局BA优化。对所有关键帧的位姿、路标点进行优化)
- 局部BA优化(在局部建图之后进行,对当前帧及其共视关键帧的位姿、路标点进行优化)
- 位姿图优化(仅优化位姿,在恒速运动模型、参考关键字模型、重定位、局部地图跟踪的时候执行)
- 本质图优化(在回环校正过程中进行优化,将闭环误差分配到本质图中)
- Sim3优化(检测到回环之后,会进行闭环帧和当前帧间的Sim3估计,随后进行Sim3优化)
需要注意的是,优化完路标点之后,要记得更改路标点的属性(如观测角度,平均深度等)。
(1)全局BA优化(GlobalBundleAdjustment)与局部BA优化(LocalBundleAdjustment)
全局BA:通过全局地图中的地图点进行遍历优化,优化观察到地图点的所以关键帧位姿,更新的是生成树中的关键帧位姿。这里3D-2D的重投影误差是全局地图中每一个地图点从世界坐标系变换到观察到它的所有关键帧坐标系的重投影误差。
(2)位姿优化(只优化相机位姿,不优化路标点坐标)
(3)优化本质图
优化本质图中的关键帧的位姿以及路标点坐标。
(4)筛选出的闭环帧的位姿优化
2.LOAM(激光SLAM)
参考文章:LOAM后端优化算法分析 - 知乎
LOAM,LeGO-LOAM,以及LIO-SAM在下面两个问题上使用了几乎完全相同的策略:
- 从扫描点云提取特征点云。都是根据扫描线的曲率提取Corner和surface两种特征点云;
- 特征点云到Map的匹配优化。都是使用相同的损失函数构造方法,并且都使用高斯牛顿法进行迭代优化。
基本原理是采用scan-to-map,ICP的方法进行非线性优化,详细内容见参考文章。