SLAM技术已经蓬勃发展起来,这里综述性地介绍下SLAM的主体知识。SLAM的主体技术很少,难点在于细节。来源是:技术分享.ppthtml
人类惆怅近千年的问题不是:我是谁,我要作什么,我要去哪里!而是:定位、定向、测速、授时!前端
定位是说物体在地球上的方位,定向是物体前进的方向,测速是物体的运行速度,授时是运动经历的时长。而定位和定向就是咱们要讨论的话题。算法
古代智慧的中国人们提出了夜观天象,基于遥远恒星的方位推断自身所处的位置,进而演变出一门博大精深的学科“牵星术”。后端
直到1964年,美国人完全打破了你们的游戏规则,创建了全球定位系统GPS。多说几句,GPS是给出物体相对于地心坐标系的经纬度以及相对于水平面的高度(三维信息),且GPS是狭义相对论的应用实例(卫星和地面的时间同步)。网络
GPS军用的P码能够达到1-2米级精度,开放给大众使用的CA码也可以实现5-10米级的精度。至此已基本上解决了室外的定位和定姿问题,可是室内怎么办?室外怎么优化位姿?app
SLAM的全称是Simultaneous Localization and Mapping,即定位与制图。SLAM和SFM有这千丝万缕的联系。框架
SFM(Structure From Motion),称之为传统三维重建,这是一门计算机视觉学科的分支,特色是把数据采集回来,离线慢慢处理。常见应用就是重建某建筑物的3d地图,比较炫的成果可见Building Rome in a day (—天重建罗马城)。iphone
SLAM是自动化控制学科的分支,提起SLAM就要提到ROS,网上开源的SLAM技术通常也都是和ROS集成在一块儿的。ROS是机器人操做系统,用一堆各式各样的传感器组装好一套硬件,采集各个传感器的数据,传送给ROS的处理节点(软件节点)。ROS会并行调度这些节点,这些节点有接受处理某类传感器信号的,有重合处理各项数据的,有展现结果/执行策略的。函数
因此学习SLAM就要简单了解下ROS,推荐找本入门书翻翻,一天就差很少啦。SLAM要作到的是实时!要作到的是低运算量!学习
总结即是:两者的数学理论类似,所属学科不一样,应用侧重点不一样。更直接点,如今的情况是:SFM提供了理论支撑,SLAM真正融入了人们生活。
另外一个问题是:SLAM和图像算法是什么关系?
SLAM同步构建周围世界的3d地图,并肯定robot所在的位置和方向。16年ICCV大会最后总结致辞:
SLAM是和ConvNets和Deep Learning互补的算法。SLAM专一于几何问题, Deep Learning主要解决感知与识别。
若是想让机器人走到冰箱而不撞墙,你须要SLAM;若是要识别冰箱内的物体,你须要卷积网络。
固然,深度学习的兴起,也会给SLAM/SFM提供新的养料。
首先明确三个问题:
因此,SLAM有一堆分支。可是整个SLAM框架能够分为前端和后端。根据不一样的前端配置采用不一样的后端策略,后端也提出了众多的算法理论。
前端:涉及传感器的选择以及传感器数据处理。好比里程计时间戳和Lidar点云时间戳的对齐等。按传感器功能,机器人的两个主要模块:
移动系统中的传感器能够选择一种或多重,甚至“没有”(参考视觉里程计VO,根据图片三维重建,反推摄像机位置,可是计算量大),通常SLAM硬件都会有一两种。
测量系统中,Laser激光精度高,就是价格昂贵,32线程一个30万左右,并且有些场景不适合。声呐雷达价格便宜,技术成熟,就是精度差,水下等特殊场景普遍采用。摄像机信息量丰富直观,但处理量大,对光照敏感。vision又分单目双目等,可见前端方案组合的多样性。
后端:综合前端信息,优化位姿。涉及数学知识较多。
常见的slam算法:vslam、rgbd-salm、monoslam、orb-slam等
因为运动估计传感器(移动系统)获得的位姿一般具备较大的偏差,于是咱们但愿使用测量系统获得的周围环境信息来优化位姿。
一个完整的处理过程以下:
R表示机器人,五角星表示地标。地标的选择是一个研究方向,简单的有特征点(静止点),更鲁棒更高级的是线段,平面均可以做为地标。路标还会涉及到路标的更新。
利用预测值和观测值计算系统状态——卡尔曼滤波。
u和z是硬件能够提供的,上述中x为系统状态:表示robot的位置,
表示robot的姿态(四元组或者3个角度值),
为地标的位置
u表示速度/加速度/角加速度等值。z表示测量系统获得的地标相对机器人的距离、角度。w和v表示噪声。
由此,能够根据上一时刻状态和当前时刻观测量更新获得当前时刻状态。这也是卡尔曼滤波所擅长的。
KF滤波是线性方程,可是距离等显然不是线性的,所以,SLAM中其实用的最多的是EKF(Extended Kalman Filter)。
EKF实质是把差值认为是线性的,思想仍是用线性系统代替非线性系统。计算能够参考《An Introduction to the Kalman Filter》。
目前,也有一些slam采用了粒子滤波PF,PF是基于马尔科夫蒙特卡洛方法的抽样滤波,适用非线性系统。PF中要维持全部的可能状态,对资源消耗大。
上述渐进式的匹配方式,存在累计偏差。若是有一帧错误,后续又基于这个错误的位置,后果不堪设想。因此最好和前面多帧进行对比(预测方程基于前面多个时刻)。
SLAM借鉴SFM中的捆集优化思想,21世纪走向了图优化的道路。
优化方法和滤波器方法有根本上的不一样。它并非一个迭代的过程,而是考虑过去全部帧中的信息。经过优化,把偏差平均分到每一次观测当中。
Graph-based SLAM是没法计算的,图的联结数目巨大,可是其实这是一个稀疏的,正是这个稀疏性,使得优化思路成为了现实。这里要感谢稀疏代数的发展,网上有不少优化库可解上述目标函数。
新来一帧数据,如何判断它在已有序列中是否出现过。
不用第一种:科学家认为前一种依靠有噪声的位置来减小位置的噪声,有点循环论证的意思。第二种就是:帧帧匹配。
在没有闭环的状况下,[k,k+t]这一段数据进行图优化,若是闭环出现(如绿色),就要把历史数据也考虑进来,入册能够显著减小累计偏差。
注意:闭环检测的引入是为了减小偏差的,不少场景很难出现闭环这种状况,可是人们有意设计了这种情况,好比扫机器人开启前期,走一段路就绕回来,为得即是制造闭环。
等等,I am anywhere! SLAM也即将开启超体时代。Google的cartographer也给SLAM添了一把火。
《SLAM for Dummies》
http://www.leiphone.com/news/201605/5etiwlnkWnx7x0zb.html