SLAM相关概念及ORB算法步骤总结

概念

1.四元素

三维世界中刚体运动的一种描述方法,有4个虚部:q=a+b*i+c*j+d*k,复数只有1个虚部
旋转矩阵,旋转向量,欧拉角,四元素都是坐标旋转平移变换的表示方法
由于旋转矩阵的冗余,加上旋转向量和角度的奇异性(锁),引入四元数,即用复数来表示旋转从而避免了奇异性。
2.运动方程,观测方程
3.视觉里程计
(特征点法+直接法)
利用两幅图像求解相机的三维运动,特征点匹配之后就得到了两幅图之间特征点的对应关系:
1).如果只有两个单目图像:对积几何:2d到2d的位置求解 (地图初始化的过程)
2).如果匹配的是frame和map(一个特征点从图像中提的,另外一个从地图中提的,地图是3D点):PNP问题:frame到map(图像到地图)之间的匹配,也就是3d到2d的求解,计算相机的位置
3).如果匹配的是rgbd图,得到的是3D-3D的对应关系:ICP问题:针对rgbd相机,有深度信息,利用点云的匹配关系,求解相机的三维运动
4.不用特征点计算视觉里程计(VO)
-光流(稀疏法LK光流+稠密法HS光流)
-直接法
-光流:表示像素在不同时刻不同图像里的运动关系。它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法 
5.单目SLAM: 
(1).PTAM(Parallel Tracking And Mapping):
2007年的SLAM项目,是第一个使用BA完成实时SLAM的系统,论文中提出的关键帧以及多线程处理思想成为之后视觉SLAM标配。
但其由于缺乏回环检测和重定位等功能,只能作用于小规模的场景,且稳定性也不是很高; 
(2).DTAM(Dense tracking and mapping in real-time):2011年,Direct SLAM方法的鼻祖; 
(3).LSD-SLAM(Large-Scale Direct Monocular SLAM):2014年一个半稠密SLAM系统; 
(4).ORB-SLAM:2015年一个比较完整的基于特征点的SLAM系统,稀疏图
6.ORB VS PTAM
ORB-SLAM一开始基于monocular camera,后来ORB-SLAM2扩展到Stereo和RGB-D sensor上
ORB-SLAM 基本延续了 PTAM 的算法框架,但对框架中的大部分组件都做了改进, 归纳起来主要有 4 点: 
1).ORB-SLAM 选用了 ORB 特征, 基于 ORB 描述量的特征匹配和重定位, 都比 PTAM
具有更好的视角不变性. 此外, 新增三维点的特征匹配效率更高, 因此能更及时地扩展场景. 扩展场
景及时与否决定了后续帧是否能稳定跟踪. 
2).ORBSLAM 加入了循环回路的检测和闭合机制, 以消除误差累积. 系统采用与重定位相同的方法来检测回路(匹配回路两侧关键帧上的公共点), 通过方位
图(Pose Graph)优化来闭合回路.  
3).PTAM 需要用户指定2帧来初始化系统,要求这2帧间既要有足够的公共点, 又要有足够的平移量. 平移运动为这些公共点提供视差(Parallax), 只有足够的视差才能三角
化出精确的三维位置. 而ORB-SLAM 通过检测视差来自动选择初始化的2帧. 
4).PTAM 扩展场景时也要求新加入的关键帧提供足够的视差, 导致场景往往难以扩展. ORB-SLAM 采用一种更鲁棒的关键帧和三维点的选择机制——先用宽松的判断条件尽可能及时地加入新的关键帧和三维点, 以保证后续帧的鲁棒跟踪; 再用严格的判断条件删除冗余的关键帧和不稳定的三维点, 以保证BA的效率和精度. 。
7.ORB-SLAM的优点
Tracking的平均时间约为20ms每帧,基本可以达到实时追踪
丢帧以后回到原来的场景,很容易就可以找回来。
定位的稳定性较好,姿态流畅,没有跳变。
在简单背景下,可以有效地追踪目标物体。
ORB-SLAM的缺点:
旋转时比较容易丢帧,特别是pure rotation。
地图中的点云很稀疏,完全不能看出任何结构。
加载地图需要一定时间(10秒左右,通过二进制词典可以加速,DBoW2的作者似乎是为了兼容性放弃了二进制)。
初始化时最好保持低速运动,对准特征和几何纹理丰富的物体。
作者为了增强系统的鲁棒性,在很多地方采用了多重判断,引入了N多参数。不同场景下的应用可能需要花一些时间理解和调整这些参数。
简言之,对于地图密度要求不高的定位和追踪问题,ORB-SLAM是个不错的选择更高效、更便于二次开发的最新的ORB-SLAM
8.SLAM的未来
  SLAM将来的发展趋势有两大类:一是朝轻量级、小型化方向发展,让SLAM能够在嵌入式或手机等小型设备上良好运行,然后考虑以它为底层功能的应用。因为在绝大多数场合中,真正目的都是实现机器人、AR/VR设备的功能,比如说运动、导航、教学、娱乐,而SLAM是为上层应用提供自身的一个位姿估计。在这些应用中,我们不希望SLAM占用所有计算资源,所以对SLAM的小型化和轻量化有非常强烈的需求。另一方面则是利用高性能计算设备,实现精密的三维重建、场景理解等功能。在这些应用中,我们的目的是完美地重建场景,而对于计算资源和设备的便携性则没有多大限制
9.词袋模型
在词袋模型中,我们提取每张图像中的特征,把它们的特征向量(descriptor)进行聚类,建立类别数据库。比如说,眼睛、鼻子、耳朵、嘴等等(实际当中没那么高级,基本上是一些边缘和角)。假设有10000个类吧。然后,对于每一个图像,可以分析它含有数据库中哪几个类。以1表示有,以0表示没有。那么,这个图像就可用10000维的一个向量来表达。而不同的图像,只要比较它们的向量即可
10.Bundle Adjustment
中文是光束平差法,就是利用非线性最小二乘法来求取相机位姿,三维点坐标。在仅给定相机内部矩阵的条件下,对四周物体进行高精度重建
BundleAdjustment可以将所观测的图像位置和预测的图像位置点进行最小error的映射(匹配),由很多非线性函数的平方和表示(error)。因此,最小化error由非线性最小二乘法实现

http://blog.csdn.net/x_r_su/article/details/55270838


☆☆.ORB算法步骤


一.Map Initialization地图初始化
1).单目SLAM地图初始化的目标是构建初始的三维点云。由于不能仅仅从单帧得到深度信息,因此需要从图像序列中选取两帧以上的图像,估计摄像机姿态并重建出初始的三维点云
2).地图初始化常见的模型方法有三种(http://www.cnblogs.com/luyb/p/5260785.html )
3).ORB-SLAM的作者提出了一种基于统计的模型选择方法。该方法优先选择第三种方法,并期望在场景退化情形下自动选择第二种方法。如果选取的两帧不满足要求,放弃这两帧并重新初始化
二.tracking
1).提取ORB特征点
2).if tracking success for last frame-->根据上一帧进行姿态估计
   if tracking is lost丢帧-->通过全局重定位(global re-localization)对位姿进行初始化.(initial pose estimation)
3).Track local map,跟踪已经重建的局部地图,优化位姿(optimaze camera pose),
4).keyframe decision根据一些规则确定当前帧是否是新的关键帧
三.LocalMapping局部建图
1).加入关键帧(更新各种图)
2).验证最近加入的地图点并进行筛选(culling)(去除Outlier)
3).生成新的地图点(一般是用三角法)
4).局部Bundle adjustment(使用该关键帧和邻近关键帧进行调整,去除Outlier)
5).对加入的关键帧进行验证,去除重复的关键帧
四.Loop Closing闭环检测
这一部分主要分为两个过程,分别是闭环探测和闭环校正。
闭环检测先使用bow进行探测,然后通过Sim3算法计算相似变换。当检测到闭环时,闭环连接的两个关键帧的位姿需要通过Sim3优化(以使得其尺度一致)。优化求解两帧之间的相似变换矩阵,使得二维对应点(feature)的投影误差最小
闭环校正,主要是闭环融合和Essential Graph的图优化
1).选取相似帧(bag of words)http://www.cnblogs.com/luyb/p/5599042.html
2).检测闭环(计算相似变换(3D<->3D,存在尺度漂移,因此是相似变换),RANSAC计算内点数)
3).融合三维点,更新各种图
4).图优化,更新地图所有点

monoSLAM目前确实没有成熟可靠的民用产品。我自己的经验是,monoSLAM的漂移和误差都还是比较大,未来可靠的民用产品,肯定还是像project tango一样融合多传感器的信息,越多越好,室内就是RGB+Depth+IMU+其他,室外就是stereo+IMU+laser+GPS+其他,而且肯定会出现像visual SLAM的bundle adjustment的通用的、state-of-art的SLAM算法

你可能感兴趣的:(视觉SLAM,SLAM)