论文翻译:Real-Time Simultaneous Localisation and Mapping with a Single Camera

Real-Time Simultaneous Localisation and Mapping with a Single Camera全文翻译

近期开始做毕业设计,毕设题目是动态场景下的语义SLAM算法,后期也会把做的一些东西在博客上更新(话说这会不会影响我自己的查重啊)。我们学校的毕业设计的第一个任务是翻译两篇英文文献,这几天就翻译了一篇,某种意义上说,这是我第一次翻译英文的东西,所以肯定会有不好的地方,请多海涵。
论文原文和翻译文字都在这个百度云链接里,可自提:
链接:https://pan.baidu.com/s/1nrbZmvbhMXQuA-8WB0QXfQ
提取码:uc12

开始正题

基于单个相机的实时定位与地图构建
Andrew J. Davison,Robotics Research Group, Dept. of Engineering Science, University of Oxford, OX1 3PJ, UK
摘要
在一个一般化的陌生环境中,使用一个相机在其中进行自由的运动,并使其能够进行较好的自我运动估计和对周围环境进行最大程度的重构是一个比较难的问题。当我们要求可以实时解决这个问题时,这个问题变得更具挑战性。这一类问题,即通过一系列的连续的且不断扩大的自映射视觉特征来估计相机的运动的问题,在机器人领域中被称为定位与地图构建问题(SLAM)。尽管很少有用相机来进行实时定位与地图构建,但我们仍认为,实时的地图构建要比离线的从运动的方式来重构地图要更适合解决这个问题,因为在相机位置的不确定性的传播过程中存在着更多关键信息。
我们通过使用基于运动建模和信息指导的主动测量的方法,绘制了稀疏自然特征点的地图,并提出了一种基于贝叶斯定理的用于单个相机定位的自顶向下的框架。特别的,我们提出了一种基于有因子采样的方法解决了实时特征初始化的难题。另外,通过主动测量和创建一个基于路标的稀疏地图,我们可以实现不确定性的实时处理,并具有较好的鲁棒性。在这个稀疏地图中,特征区域可以在一段时间后重新被访问,并且当此时只有少量特征可见时,定位仍然可以继续。最终我们的呈现了结合一个十分稀疏的先验场景地图,在PC上执行了对一个手持相机的实时定位的结果。
1、简介
如果可以实现基于相机的实时定位和建图,我们将会开启的新的应用领域:通过实时处理,我们可以在交互式场景中即时使用移动相机的运动估计。一个连接到计算机的实时相机可以成为实时位置传感器,该传感器可以以最少的领域知识应用于机器人技术(对于类似于人形机器人的移动机器人的运动估计),可穿戴机器人(对穿着带有相机的设备的人体的动作的估计),远程呈现(使用外向相机的头部运动估计)或电视(用于实时增强现实的相机的运动估计)。
在计算机视觉运动研究的知识体系中,使用相机穿过之前未知的场景并重构出此场景的地图已经成为了一个可以完全自动化解决的问题。但是到目前为止,这些成功的方法都是构建成离线算法,并且都必须同时处理序列中获取的所有图像。这些方法会在视频序列的每个图像中检测到大量感兴趣的,定位良好的特征(通常是角点或线),并且这些方法假定这些特征都是产生于环境中可重复识别的3D实体的。在识别到这些特征点之后,这些方法会在连续(或接近)的视频帧之间进行匹配。而后,基于场景物体的刚体假设,假定所有的与未知的但是是静态的3D物体之间联系的特征的运动纯粹是由于相机的运动引起的。通过这个假定可以导出一系列可以同时求解相机运动状态和周围环境中的感知到的3D物体的位置的方法。这一串帧到帧运动的解可以粘合在一起,以产生一个完整的相机轨迹和所有观察到的特征的完整3D地图的估计,并且总体方案的质量还可以通过进一步的约束(光束法平差法)变更。
当然,在非实时方法可以应用的场景下,批量处理是解决任意状态估计问题最精确且最鲁棒的方法。但是,在需要实时处理的场景下,场景对操作方法提出了严格的执行约束:特别是在数据以恒定速率输入的普遍的情况下,(例如,数据以30Hz的速度从相机传入)。在此情况下,定位估计的操作必须运行在一个恒定的时间内,在这个时间内需要完成处理每张图片所有可用的相关信息。这个恒定时间取决于处理器的性能,但是有一点必须要注意的是,整个算法的过程不能随着处理图片数目的增多而一直无限制的增加,否则总会到达一个违反实时性约束的点。因此,我们没有储存历史的测量数据,而是采用了基于状态的时间独立的展示,在这个展示中把此时的所有的相关的信息都包含进来。而后,我们使用所有的新的数据,按顺序一步步的对原本的状态进行更新。
2、可重复的定位
我们的目标不是取处理来自外部的图像序列,而是实时处理来自内部相机的数据,在这个场景下,我们要用到连接到个人计算机的实时相机模块(通过“IEEE1394“ Firewire”的是总线)。在一个房间内,相机将会从一个熟悉的物体边开启,并以此为起点,校准自己的尺度(这个物体可以只是简简单单的一张A4纸)。我们可以用手把它拿起并且平稳迅速的在一个房间里或者一个有限制的空间里进行三维的自由旋转和移动,通过这种方式,整个陌生的环境的不同的部分就可以进入到相机的数据。这样做的目的是为了之后相机在空间中进行长时间的任意的移动时,可以快速、连续且可重复的估计它自身的3D位置。这个过程肯定会涉及特征在环境中的定位和估计,但是在这种情况下的建图是获取相机定位的一种手段,而不是其本身的输出:建图的目的只是构建出足够给相机定位的特征。
这种方法的一个关键点是对可重复定位的需求:这意味着我们需要能够尽可能的准确定位出相机运动了10分钟以后的位置,和它运动了10秒钟以后定位的那样准确——不能允许存在随着时间变化而缓慢变化的定位漂移。为了达到这个目标,特征的检测和建图必须以一种稳定的、长期的路标的模式进行,而不是短暂的跟踪点的模式,并且这些特征要是比较突出的、易于被检测到的。这些特征要随着系统的运行一直传承下去。顺序运动估计的早期实现的方法是在离线状态下,使用标准的短暂的角点特征,对每张图片进行独立的估计,并且此方法还会随着时间的推移出现定位飘移:它们既不可以重新辨认出之前的特征,也不可以正确的使用测量数据,这意味着相机的运动轨迹估计将会随着时间的推移和基准坐标系之间会出现缓慢的漂移。
2.1、具有一阶不确定性传播的SLAM
在机器人学领域中,SLAM问题中的运动漂移问题现在已经解释的很清楚了。基于扩展卡尔曼滤波器(EKF)的算法,在机器人和地图特征位置的耦合估计中增加了一阶不确定性,结合各种技术来减少大型地图的计算复杂性,在使机器人能够准确估计其位置方面显示出了巨大的成功,并在较大的移动区域上表现出色。在一阶不确定性传播框架中,系统的整体状态表示为向量x,并且,可以将其划分为机器人(或摄像机)的状态 (x_v ) ̂ ,和其周围地图中的状态 (y_i ) ̂。这些状态之间的关系,可以用一个协方差矩阵P来连结,表示如下:
公式1
表示为一阶的协方差矩阵的作用是表现状态向量中所有的不确定性,当有需要时,特征估计向量(y_i ) ̂可以自由的添加或删除,x和P的矩阵大小会随之动态的增长或者缩小。在常规的操作中,x和P的变化分为两步:1、在运动过程中,通过运动模型可以计算机器人(或者相机)的运动,和它的不确定性的提升。2、当获得到特征数据时,测量模型可以描述地图和机器人的不确定性减少的方法。
SLAM研究已经证明,保持非对角先线元素完整的协方差矩阵P很重要,因为这些元素元素代表了估计之间的相关性,而这些相关性通常是建图过程中固有的:通常,接近的特征群将会有有关联的位置估计,尽管它们在世界坐标系中是无法确定的,但是由于它们的相对坐标系是已知的,且是十分接近的,因此我们可以得知。保留它们之间的相关性可以使得下次测量到这个群中任意一个特征时都会影响到整个群的特征,通过这个方法,我们可以在经过一段忽视时间后仍然可以重新访问并识别出这里的特征。
目前成功的SLAM方法通常不使用视觉传感器而是使用专用传感器(例如激光测距仪)在某些受限条件下运行,例如在已知机器人的控制输入和精确的动力学模型的情况下进行2D平面机器人移动和建图。在视觉方面,Davison和Murray做出了早期的在全协方差建图方面的进步。而Davison和Kita,也许完成了第一个全3D的SLAM系统,他们使用了一个曲率模型结合双目相机来估计在不平坦表面上移动的机器人。但是,这两种算法都局限于使用在具有已知的控制参数和双目相机参数并且可以平稳运行的移动机器人上。
用一个单目相机来估计机器人的3D运动是一类很困难的问题。在之前的工作中,Chiuso等人的论文和本文论述的最为相似,他们提出了一种实时的,基于全协方差卡尔曼滤波的模型去从运动中恢复有序的模型,但是他们的目标不是去进行定位,而是进行模型生成。另外,自底而上的2D特征跟踪意味着只有相对较慢的相机运动可以被还原,而且他们的系统还不支持在一段时间的忽略以后重新获取特征:他们的特征通常只在特征向量中存在20-40帧,然后就会被其他的特征所取代,这也意味着运动漂移最终还是会进入到系统中。
在可穿戴设备领域,基于相机的定位也吸引了很多关注。Foxlin演示了一个令人印象深刻的系统,该系统结合了精确的惯性传感器和对天花板的基准目标上自动建图的视觉传感器,通过这个系统,他们实现了在扩展的室内区域提供实时定位。Kourogi等人也把惯性传感器和关键路标点的视觉识别相结合,实现了基于定位的注释。
3、平滑运动相机模型
在贝叶斯实时定位系统中,在未校准的坐标系中进行估计会失去很多可以运用运动模型或者其他先验得到的有用的信息。除了在某些非常受限的情况下,基于加速度和角加速度的真实物理学的运动模型在通常用于运动的批处理结构的非度量,非欧几里得坐标系中根本没有什么意义。因此,我们假设相机是可以校准的,并且把所有的估计都放于基于直角的和SI单位制的世界中,当需要自我校验时,系统给出一个较合理的先验,这个先验可以在滤波器中进行完善(尽管在这里我们并不考虑这个情况)。
我们定义了一个世界坐标系W,和相机坐标系R(见图1),为了解决线性化和奇异化问题,我们选择了一个3D方向的非最小表述,并且使用了四元数。表述位置和方向的7个参数向量记为状态x_p。
在这里插入图片描述
图1 相机几何中的坐标和向量
乍一看,构建一个敏捷运动的模型,例如被一个人所携带的相机,和构建一个被轮子驱动的在平地上运行的机器人所携带的相机的运动模型会有很大的不同:最关键的区别在于,在机器人驱动的情况下,这个模型可以得到所有的关于驱动的控制信息,然而在由人驱动的情况下,我们没有这种先验的信息。但是,很重要的一点是,我们需要知道这两种情况都是它们所代表的连续物理系统的模型的其中一种情况。由于经典的物理学是确定的,在经典物理学概念中,我们总可以找到一组参数来对整个系统进行无限精度接近的建模,然后对未来所有时刻进行预测。但是,现实中的经典物理学模型的精度总是会到达一个程度就停滞不前,为了解决这个问题,一个关于模型和现实差距的概率假设诞生了:这就是所谓的过程噪声。在轮子驱动的机器人的情况中,这个噪声项考虑到了轮子的打滑,表面的不平整和其他主要的未被建模的部分的影响。在一个相机依附于一个人的情况中,这个噪声考虑了人的未知的意图,这个部分也可以在统计学意义上建模。
我们选择的初始模型是“恒速度、恒角速度模型“,我们不是假设相机一直以一个恒定的速度运动,而是假设相机的运动在一个时间间隔内,它的速度的不确定性符合高斯分布。该模型的含义是:我们在相机的运动期望上加了一个平滑。这个模型十分高效,即使在相机获得的视觉数据很稀疏时,整个系统也具有良好的鲁棒性。我们需要知道的是,在计算机视觉领域中,大部分从运动恢复结构的算法都不使用运动模型,他们的方法是丢弃所有的之前的信息,然后在每一个当前帧都重新开始定位。
如果要用这种方式对相机的速度进行建模,我们必须在状态向量x_p中添加位置状态x_v,
在这里插入图片描述

在这里,vW代表的是线速度,wW代表的是角速度,角速度的方向代表了物体旋转的轴,角速度的大小代表了物体旋转的速度(rad/s)。因此,整体的相机状态向量的维度达到了13维。(需要注意的是,状态向量中四元数部分的冗余的作用是让我们在EKF的每一步都进行归一化,使得四元数的值满足〖q_0〗2+〖q_x〗2+〖q_y〗2+〖q_z〗2=1,这个归一化伴随着相应的被协方差矩阵所影响的雅可比计算)。
我们假设在每个时间间隔中,未知的加速度aW和角加速度αW都呈现出均值为0的高斯分布,这会造成速度和角速度可以等效成一个个的脉冲:
在这里插入图片描述

在不同的情况下,VW和ΩW可能会耦合到一起(例如,假设在每一个间隔时间上都会有一个脉冲力作用在一个带有相机的刚性物体上,这会使得线速度和角速度之间产生关联)。但是在目前的情况下,我们假设关于矩阵n的噪声协方差矩阵是对角化的,这意味着我们假设所有线性和旋转的组件上的噪声都是独立的。基于这个假设,我们得出状态的更新如下:
在这里插入图片描述
此处的符号q((wW+ΩW)代表的是通过角轴旋转向量(wW+ΩW)∆t变换而来的四元数。
在EKF算法中,由于存在过程噪声,新的状态f_v (x_v,u)的估计必然会伴随着状态不确定性的提高,我们记这个不确定性为Q_v,通过雅可比的计算可得:
Q_v=(∂f_v)/∂n P_n 〖(∂f_v)/∂n〗^T

P_n代表的是噪声向量n的协方差。EKF的运作同样需要计算雅可比矩阵(∂f_v)/∂n,这个雅可比矩阵的计算很复杂,但是它的微分计算却比较简单,在此我们不证明这个结论。
在这个运动模型中,不确定性的增长率取决于P_n矩阵的大小,当改变矩阵参数的大小时,会改变我们期望的运动的平滑性。当把P_n改的比较小时,代表我们设定的加速度值很小,我们期望的运动十分平滑。当实际运动轨迹也很平滑时,这个模型将会很好的跟踪实际运动,但是模型会很难处理由突然的动作的情况。当把P_n的值改的比较大时,代表我们所期望的运动的不确定性会比较大,这种情况下的模型将会很好的处理有突发的加速度出现的情况,但是同时每个时间间隔中必须要存在足够多的观测数据,否则我们很难通过约束条件去消除这种不确定性。
4、视觉特征测量
Davison and Murray的前期工作表示,相对较大的图像块(99~1515像素大小)可以作为长期的路标点使用,并且有惊人的视点独立性(见图2(a))。使用Shi 和Tomasi的方法,用显著性的操作对每一个感兴趣的区域进行检测,并且使用归一化后的平方和差异进行匹配。
在这一节里,我们将会讨论测量已经在之前SLAM过程中已经测量出来的特征点的模型(我们会在后文讨论关于初始化的问题)。首先,我们有相机的位置x_v和特征的位置y_i(一个直接的3D点向量),这使得本次测量的值是可以被提前预测到的。结合图1 中所示的向量关系,特征点在相机坐标系中的位置可以表示如下:
在这里插入图片描述

使用针孔相机模型,可以得到特征坐标预测值的像素坐标系下的坐标为:
h_i=(■(u@v))=(■(u_0-fk_u  (h_LxR)/(h_LzR )@v_0-fk_v  (h_LyR)/(h_LzR )))
进一步的,我们可以计算出预测过程中的不确定性,使用更新协方差矩阵S_i表示,
在这里插入图片描述
测量的噪声的协方差R是对角化的,并且它的大小取决于图像的分辨率大小。
通过对S_i的了解,使得以完全主动的方法对图像进行搜索成为可能。S_i代表的是在像素坐标系下的2D高斯概率密度函数的形状,通过选择一个方差值(阈值,通常是3σ)可以得到一个椭圆形的搜索区域,我们想要找的特征应该就在这个搜索区域的某个概率较高的坐标处。在我们的系统中,相关的搜索会被限制在一个特定的阈值的区域内以最大化搜索效率并且最小化误匹配的概率。详见图2(b)。
在这里插入图片描述

图2 :(a)图展示的是特征图像块,我们使用[14]的方法把图像块检测出来,尽管通过检测反射或者深度的不连续会剔除一些候选对象,但是这些图像块在某种程度上仍然相当于是定位良好的物体:在SLAM中,这些动作可能会被拒绝,因为随着时间的流逝,当它们被多个视角看到时表现的和固定的路标一样。(b)图中展示的是高加速度下的搜索区域,找到特征的位置朝向大的椭圆的边界(小椭圆形代表的是经过滤波以后的位置估计)。
S_i在主动搜索方面表示为对期望的测量信息内容的度量。有着高S_i的特征检测(即结果较难预测的情况下),将会提供更多的关于相机位置估计和特征位置的信息。在一个搭载可转向相机的进行基于视觉的机器人SLAM实例中,高S_i会直接导致机器人进行主动控制相机观测方向以获得更多的信息。虽然我们不能直接控制相机的运动,但是在这种情况下会有很多种测量的备选方案,我们选择那些有着高更新协方差的方案即可。选择这样的测量旨在沿可用的最长轴减少系统中的不确定性,并且,这种方法有助于确保估计状态中任何特定元件的不确定性都不会过于大。
5、自动特征初始化
从相机的投影性质我们可以得知,尽管在给定相机的位置和特征的空间位置的情况下,我们可以知道特征在像素坐标系中的表示,但是在已知相机位置和特征的像素坐标系的情况下我们无法得到特征在空间中的坐标,因为特征的深度是未知的。因此,使用一个相机进行SLAM的初始化是一个比较困难的问题:特征的3D深度不能仅仅通过一次测量就得到。
一个显而易见的方法是在2D的像素坐标系中跟踪这些特征经过几帧,当获取到足够的深度信息后,再进行小批量更新。然而,这种方法违反了我们自顶向下涉及的初衷,并且浪费了很多可用的信息:当相机的运动很快时,这种2D的跟踪是很困难的,可能会导致一些不能跟踪到的特征点被浪费。另外,我们通常需要对特征进行比较快速的初始化,因为一些视野比较窄的相机可能一下子就掠过了这些特征。
在这里插入图片描述

图3:特征初始化期间,图像搜索过程的连续帧的特写图。在第一张图中,在一个搜索区域内有一个被检测出来的候选特征图像。沿着这个特征的方向,系统在SLAM地图中产生了一条3D的射线,并且这条线被映射到了后面的图中。在这条射线上代表0.5m~5m的地方产生了一系列的假设点,并依靠这点线映射到新的相机坐标系下,形成了椭圆的区域。通过给这些区域的基于贝叶斯的重新加权,产生了每个椭圆区域的可能性。通常,少量的时间间隔之后就可以充分的减少估计的高斯不确定性,并可以加入到SLAM地图中进行使用。
有一个很重要的点是,在基于贝叶斯滤波的框架里,“不可逆“之类的语句是没有什么意义的,因为在这类框架中,所有的东西都是基于概率分配的而不是仅仅通过一些二进制来陈述。即使我们只看到某个特征一次,我们也假设我们有一些关于它的深度的先验,并由此可以得到一个关于这个特征的3D位置的概率密度函数。但是,为了能够可以把这些特征在SLAM中应用起来,我们要求这些3D位置的概率密度函数必须是被多元高斯较好的建模的,因此我们不能仅通过一次测量就把所有特征点都初始化。因此,我们的初始化方法是在地图中初始化一条3D的直线,特征肯定位于这条直线的某一个点上。这是一条半无限的线,始于相机的估计位置,沿着特征被观测出来的方向一直趋向无穷的远方,当然,和其他所有的地图中的成员一样,这条线的参数也符合高斯分布。在SLAM的地图中,它表示成这样:
在这里插入图片描述
r_i代表的是这条线的端点,h ̂_i^W代表的是代表线的方向的单位向量。我们在这条线上进行了离散化假设,类似于一维情况下的粒子假设:在目前的室内的场景下,在这条线上的0.5m~5m的100个粒子的初始先验概率是均匀分布的(在大的环境场景中,这种初始分布可能不适用,因为在大场景情况里,特征有可能在很远的地方甚至是无穷的地方)。在随后的时间里,通过把所有的假设点都进行映射我们可以检验这些点的正确性。如图3所示,每一个粒子点都转化为一个椭圆的搜索区域。对每个椭圆区域进行特征匹配(通过针对同一图像块搜索多次重叠的椭圆区域的有效率的方法),给每个区域都产生了一个概率,并对每个概率进行加权。图4展示了随着时间流逝概率分配的演化——从一个均匀分布的先验演化出了一个尖峰,当深度的标准偏差和深度估计之间的比值小于了一个阈值,就把这个分布安全的转化为高斯分布,并将特征初始化为地图的一个点。这个初始化过程的重点在于重叠的椭圆的形状的搜索区域。深度值的先验消除了沿着整个极线搜索的需要,并且提高了初始化的速度和鲁棒性。在实时的初始化实现时,在每个步骤确定性的修剪掉可能性最小的粒子有助于提高粒子分布收敛的速度(并且节约相关搜索工作工作量)。
在这里插入图片描述

图4:粒子点集可能性的逐帧演化。初始时,100个相同权重的粒子分布在0.5m~5m的区域里,随着随后的测量,粒子的概率分布趋向于接近高斯分布。
5.1、地图管理
在有了向地图添加特征的能力后,很自然的我们会想到要制定什么时候应该向地图中添加特征,什么时候应该删除的规则。我们的目标是保持在每个相机视角所能观测到的特征数量是一个预先设定的值。这个值的大小取决于测量过程中观测到的特征数目,定位精度的要求和硬件的算力:在我们目前的这项工作中,我们取值为6~10。“可见性“(更准确的说是预测可观测性)是通过计算相机和特征的相对位置得来的,相机的位置是用初始化时的相机位置来表示:判断的标准是特征的像素坐标必须位于相机图像的像素大小之内,而且必须距离它一开始初始化的位置不太远,否则我们判断它为关联失败。这个规则是以效率为核心的,它不会无原因的添加很多特征进入到地图,也不会无端的增大滤波的计算量。特征检测使用了Shi和Tomasi的图像兴趣的方法,此方法把最佳的候选特征用一个限定大小(大约100*50像素)的方块在图像内框住——这是为了照顾实时检测的效率。目前搜索框被设定成可以随机放置在任何没有其他已存在特征的地方,并且基于当前对摄像机速度和角速度的估计,预计检测到的任何特征都不会从视野中立即消失。尽管通过改善定位信息来检测”有用的“特征是一个有意义的研究方向,但是目前还没有这方面的相关研究——当然更重要的是要找到广泛存在于图像中的显著性的特征。
如果遇到经过预先设定的次数的特征检测和匹配,特征理应被观测到但是仍有超过一定比例被判定为失败(我们设定的比例为50%)时,我们会把这个特征给删除。这一条规则去除的是假的3D点和经常被遮挡的不良特征。
通过设置一个混乱度指标,即使场景中存在遮挡现象只要遮挡物和路标物体不是很类似,并且不会在相机的预期可视范围内太频繁出现(这将会导致匹配失败并且过滤器更新暂停),系统还是可以运行,只有在遮挡物和路标物体的外观很相似的情况下会出现误匹配,这将会引起灾难性的错误。系统的正确运行取决于以下的要素,在大多数场景下,看起来很类似的物体通常不会靠的很近,至少不会近于一个图像搜索区域的距离(当在有重复性的纹理的场景中运行时,我们需要采取一些特殊的措施)。
6、结果
我们使用了一个20秒的视频来运行实时SLAM并展示如图5所示。6个对应于一张纸的六个角点的特征是已知的,会被当做系统的先验来使用(图像块的选择和保存是手动的,它们的3D坐标点是关联在一个定义好的坐标系中的并且坐标值被精确的测量了出来——这些特征以0不确定性放入了SLAM地图中,因此所有的关于这些特征点的协方差矩阵被设为了0)。初始的相机坐标x_v也是测量好的,尽管初始的相机坐标有一个代表测量的几厘米误差的协方差矩阵P_xx,但是只要初始的相机坐标的位置定义在一个合理的范围内,系统的后续跟踪还是可以照常进行的。在P_n中的线性速度噪声被设定为标准的偏差4〖ms〗(-1),角速度的偏差值设置为6〖rads〗(-1)。这些参数的设定保证系统可以又自由又平滑地跟踪上相机的运动。
在这里插入图片描述

图5:一段20s实时跟踪的视频图解,在这个阶段里,大约建立了60个特征。在每个时间间隔里,图像视图(所有的特征估计都投影到估计的相机位置上)展示在外部的3D视图边上,在3D视图中,相机的位置也可以看的到。不同的特征状态由以下描述的不同颜色来表示:红色=在此帧成功测量得到;蓝色=测量失败;黄色=没有选择这个特征来测量。在不同的时间步伐处,特征的不确定性、搜索区域或者图像块会被标示出来。完整的视频可以从http://www.robots.ox.ac.uk/˜ajd/Movies/realtime 30fps slam.mpg得到。
图5展示了相机内部视角和相机3D的外部视角,我们可以看到在相机的运动轨迹里有一点“抖动“,这反映了我们使用的特征的数量比较少的事实。但是跟踪非常可靠,即使缺少一些缺乏鲁棒性的统计学方法,但是在含有少量的误匹配时,跟踪结果还是很可靠的。当相机在没有重叠区域的观测区移动时,特征可能会在一长段的忽略时间以后重新被观测到。特征会随着SLAM的进行产生一些漂移,但是这些漂移会因为旧的特征被重新观测到而校正(在观测到重复的特征以后,一组特征点会隐式的移动校正)。此算法在几段只能观测到很少特征的时间段也可以成功跟踪,在没有运动模型的情况下,这是不可能做到的。在这种桌面级的场景下,这种跟踪的可重复性和适用性很强:在几分钟的长期跟踪的环境下的测试证明了这一点。另外,EKF的高斯分布假设从来没有遇到过重大的问题,但是在相机轨迹远离初始坐标系时,系统可能会遇上大问题。基于这些特性,这个方法最近被应用在了可穿戴视觉机器人上面。
图6中描述的一个简短的实验探究了绝对特征重建的准确性。

在这里插入图片描述

图6:使用一个人造的场景来探究场景结构的恢复:在两个高度纹理化的平面前使相机前后运动来进行实时SLAM。一开始的先验知识是在左边的平面里的四个特征点的位置。图中展示了15s以后地图的一组快照(相机图像和俯视的外部图像)。经过了很多次重复的特征测量以后,当特征位置的不确定性降低到一个较小的值时说明平面已经被精确的识别出来了。
6.1、运行时间
在奔腾2.2GHz处理器上,当帧率要求是30Hz时的一个典型的运行情况如下(这样一来每一帧有33ms的处理时间):
10ms 相关搜索
5ms 卡尔曼滤波更新
10ms 特征初始化搜索
一个基本的全协方差EKF SLAM的计算量都在滤波器的更新上面,它的复杂度是N2,N代表的是地图里的特征个数。卡尔曼滤波器的更新时间在特征数目接近100的时候会急剧增大,而要超过这个数目需要使用许多已发布的SLAM快捷方式之一(例如文献[11])。
7、总结
我们描述了一个有规则的、基于贝叶斯滤波的自顶向下的方法来从相机运动中进行SLAM或者从中重构出环境的方法。我们使用了一些在批量方法里面忽略掉的信息,并且成功突破了实时性的限制,最终在室内的场景下展示了一个鲁棒的表现。
但是,这样的一个系统在离开桌面级的环境,去给一整座建筑或者一个城镇建图之前,还需要做很多的研究。算法目前使用的是2D的补丁,由于视角差的限制,这些特征的作用比较有限,而类似于平面3D的补丁可以更好的通过不同视角从图像外观的变化上获益。
最后,我们深信基于信息内容的主动搜索有很大好处,但是在此领域严格地使用信息论还有很长的路要走。例如,当几个特征同时被几帧图像所观测到,一次成功的测量该怎么告诉我们如何去寻找其他的特征?而且,如果存在该测量是由错误的数据匹配导致的概率,我们又该怎么做?

注:以后一定要学LaTeX了,公式乱码挺麻烦的

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山楂没我渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值