专栏名称: 泡泡机器人SLAM
SLAM的最新资讯,干货内容。
目录
相关文章推荐
51好读  ›  专栏  ›  泡泡机器人SLAM

【泡泡机器人翻译专栏】 单目语义SLAM(上)

泡泡机器人SLAM  · 公众号  · 机器人  · 2017-06-12 00:04

正文

泡泡机器人翻译作品

原文:Towards Semantic SLAM using a Monocular Camera

作者:Civera J, Gálvez-López D, Riazuelo L, et al

翻译:赵博欣

审核:姜莽

编辑:胡琪

欢迎个人转发朋友圈;其他机构或自媒体如需转载,后台留言申请授权


摘要


目前单目SLAM系统主要通过提取图像中的特征点和边缘来构建三维几何地图,而没有用到点与线之间的相关信息与语义内容。


 本文提出一个语义SLAM算法将一些已知物体与原本毫无意义的点云地图相融合。在这个过程中未标注的地图仅通过单目图像序列来构建,目标(已知物体)的模型则通过另外的不同于SLAM的摄像头获取的少量图像来自动计算,构建的模型中包含了目标表面信息和三维信息。最后通过综合上述图像序列的点云和预先计算的目标模型来对地图中所包含的目标进行语义标注。


本文提出的算法包括EKF单目SLAM目标识别两个并行线程,其中目标识别是通过SURF特征点匹配和几何共性验证来实现,当一个目标被成功识别后,则将其插入到SLAM地图中,其位置信息将不断被后续的帧序列图像优化。


实验结果显示使用手持摄像头拍摄书桌环境可以实现实时语义地图构建与定位,当把摄像头安装在移动机器人上,让它在一般房间大小的场景下运动时,算法也可以实时运行。


I. 引言

SLAM表示同时定位与构图,旨在依靠(机器人)传感器信息实现其自定位并建立环境模型[8]。环境模型信息越丰富,其语义程度就越高,对机器人自主执行任务就越有利。目前,大部分SLAM算法生成的地图信息都是一些基本几何单元(例如点和线等)的联结,而没有用到语义信息或者其他标识。本文旨在利用一些(已知)物体的几何信息,对常规的单目SLAM算法生成的地图进行部分标注,从而丰富环境模型。


本文识别目标对象并把它们关联到估计的地图中,从而实现向几何SLAM中添加语义内容。我们选择单个摄像头作为整个系统的唯一输入,选择这样简单配置的原因有以下三点:1)在计算机视觉社区中有大量的目标模型可供识别算法使用;2)互联网上有大量的图片,可以让我们自主的选择并生成目标模型;3)可以在不同的步骤中使用不同的摄像头,(例如)物体模型构建和SLAM计算可以采用不同的摄像头作为输入,在本文的实验中即是如此。这样可以实现互操作性,即相同的模型可以用在各种各样的机器人上。


基于视觉信息的目标识别算法正在经历非凡的进步,但是大部分研究是针对单幅图像进行的(即判断当前图像中是否存在某个目标)。(这样做)对于某些目标识别应用领域(例如基于内容的网络图像分类等)来说是适用的,但我们认为在机器人领域则并不适用,具体来说促使我们将局部构图与目标识别结合起来用于解决机器人构图问题的,主要是因为以下三点


首先,机器人必须与其周围的环境进行交互,因此将目标的三维信息引入地图是很有必要的,以便其能够执行任何任务,而仅靠分析单幅图像中是否存在某一目标,在机器人应用领域则是不够的(例如,目标抓取任务)。


其次,大部分机器人的视觉输入都是图像序列,而不是单幅图像,因此识别算法也应该进行相应的调整,以更好的适用具体情况。


最后,每个机器人在执行任务过程中,需要考虑实时性的约束。比如在抓取任务中,我们需要知道机械臂在每个瞬间相对于物体的位置。在本文提出的算法中,目标一旦被识别后就会被关联到SLAM算法构建的地图中,然后这些目标的三维位置在后续的任何时刻都可用,即便是其已不在摄像头的拍摄范围内。


综上所述,我们的工作受到目前目标识别和常规的几何SLAM算法的不足的启发:一方面,仅依靠目标识别算法不能够计算物体的三维参考坐标系,另一方面,常规的SLAM算法虽然能够得到精确的点云地图,但却不能用于针对具体物体操作的任务层面(比如“抓取茶杯”)。本文提出的语义SLAM方法包括目标识别,目标关联和局部SLAM三个环节,使机器人形成了一个基本感知能力,能够用于执行具体任务。(即机器人不仅仅知道“我在哪里”,还能够知道“我周围有什么”,方便其后续任务的执行。)


本文三个模块都用到了目前最前沿的算法实现:第一步,(在SLAM部分)我们使用了EKF单目SLAM算法,能够在线实时的为机器人提供当前摄像头的位置和稀疏特征点地图[6]。第二步,从运动到结构,我们从少数图像中预先计算出一个目标模型数据库[24]。第三步,通过视觉识别方法实现对图像序列中目标的识别[16]。


本文后续部分结构如下:在第II部分中对研究现状进行了分析,III部分总体描述所用算法。接下来的几个部分则主要进一步讨论了算法的细节:IV部分是目标模型,V部分是目标识别,VI部分是引入了目标特征的单目SLAM算法。最后,论文的第VII部分对算法进行了实验验证,VIII部分是总结与展望。


II. 研究现状

视觉识别算法在SLAM中主要用于场景检测,比如回环检测[7],[12],重定位[28]或者在语义内容中的地点分类[22],但却很少和SLAM结合用于目标识别。文献[12]则是这样做的为数不多的论文之一,作者为了获取更多的信息来对地点进行分类,使用了地图层与目标识别结合的方法。文献[26]的思想类似,通过立体摄像头将目标定位到三维空间中。基于图像的识别在文献[9],[17]和[29]中都有用到,在激光SLAM地图中对已知的物体进行标识。与上述这些工作不同的是,在本文中我们不仅用到了目标表面特征,还估计了目标模型的几何特征。第二个不同点在于,我们的几何SLAM算法在目标插入地图后,还继续对其特征进行跟踪。因此能够不断优化其三维位姿。至于传感器,我们在算法中的每一步都仅用一个单目摄像头来实现。


与本文思想最近似的方法是由Castle等人在文献[3]和[4]中提出的,方法中将平面目标物体引入到EKF单目SLAM算法中。他们利用SIFT特征点构建目标物体的表面模型,然后选取平面目标边缘的三个角点插入到SLAM地图中。相比而言,我们的算法能够克服目标必须是平面这一约束,可以处理各种几何形状的物体。论文中的目标模型不仅由其表面组成,而且还包括了目标上显著特征点之间的几何位置信息。当这个目标被检测到时,算法将使用平面—非平面常规的几何约束(非平面)将这些识别后的特征点插入到SLAM地图中。


“语义”一词意思很广,(为了避免语义模糊)在本文中我们将其特指为对SLAM地图中某一些特征点的标注,并不考虑其与场景中的物体之间的关系(就像文献[23]这样),尽管我们发现这是一条值得期待的研究路线。


III. 符号说明和整体综述

因为几何SLAM比目标识别要快很多,(为了保证实时性)算法分为两个线程并行运行:一个是单目SLAM算法,而另一个是目标识别。如图1所示是算法的整体框架,所用的图片是从本文实验中选取的。这部分简单总结了提出的算法,而每个子部分将在论文的后续部分详细说明。

图1 算法框架,其中图片来自本文实验,为了看的更清楚采用彩色标注


从第k-m步开始,这一时刻获取的图像Ik-m被用于单目SLAM线程和目标识别两个线程中。单目SLAM线程基于标准EKF公式,将系统几何状态x从上一步即k-m-1更新到第k-m步。与此同时,SLAM状态向量增加了当前的摄像头位姿信息,这种增加在每次识别线程开始用于一致性目标插入时都是必要的。识别结果将在第k步实现,但是目标插入是针对输入图像Ik-m来进行,更多细节将在本文第VI-B部分中描述。


我们对待识别的每个物体都有一个模型,定义为O1,…,Op,…,Oq,并存储于数据库中。每一个模型包含了从目标图像中提取出来的表面和几何信息。其中表面信息由目标图像中提取得到的SURF描述子组成,而几何信息则是这些SURF特征点的三维位置。


目标识别线程负责将目标插入到SLAM地图中,具体操作如下:首先,算法在图像Ik-m和目标数据库中每个物体模型O1,…,Op,…,Oq间进行匹配,提取Ik-m图像的SURF特征然后和预先存储的目标SURF特征进行匹配。然后基于RANSAC算法来计算每个目标的几何模型,使得匹配点数达到最多。如果有足够多一致的匹配点对,那么这些点则被认为属于同一个物体而被插入到SLAM地图中。这个过程一旦完成后,这些特征点将在后续图像中进行跟踪,并不断完善它们的位置信息。


本文假设没有重复目标出现,也没有目标错检(实际在我们的实验中,检测错误的情况也没有出现)。作者的观点是论文提出的方法能够简单的处理上述两种情况。当目标被几何注册后,如果在不同位置重复检测到同一目标,则认为是相同类的不同物体。而几何目标注册也能够处理错误检测的情况:目标特征一旦被插入地图之后,SLAM算法就一直对其进行监测,任何由于错误检测造成的几何不一致的特征点都会被1点RANSAC算法[6]排除。


IV. 目标模型

目标O的模型信息是从一系列包含目标的图像IL中提取的。为了构建目标模型,首先对图像IL提取SURF特征点,SURF描述子doL即为目标表面模型。SURF特征点yo的几何位置则使用基于匹配点的从运动到结构的算法[14]:使用SURF描述子在图像序列IL中搜索匹配点对,然后两两图像间采用鲁棒的算法和一个非线性优化方法最终生成SURF特征点yo的三维位置信息和图像集IL之间的相对运动关系。本文对于构建目标模型的这部分采用了Bundler[24]软件库来完成。


由于标准的摄像头通常不会在一幅图像中捕捉到完整的目标—即人们无法在同一时刻看到一个目标物体的前面和背面—因此目标模型被分解为多个表面。我们用数组表示每一个表面F,每个表面都对应的一个图像(在这个图像中物体所呈现出来某一面),dF表示SURF描述子,yFo是SURF特征点的三维位置,这是在后续目标插入过程中所必须的几何信息。每个表面F的数组中还包含了图像相对于目标坐标系O的位置tFo和姿态qFo。目标坐标系的原点设在三维点云的中心,两个坐标轴与其主成分平行。


除了每个表面F的模型,还要通过表面模型和目标图像来构建目标的全局密集点云模型,为此采用了多视角立体视觉算法(特别是软件包PMVS[11])。这里需要声明的是,构建的密集点云模型并不用于目标注册,也不用于识别,目标注册是通过表面模型来实现,而识别是通过SURF特征点来完成的。我们在这里引入密集点云模型是考虑到其在机器人应用领域的重要性,比如在抓取任务中;但在本文中,仅仅用于可视化。


图2显示了组成目标模型(泰迪熊)的三幅图像,在本文第一个试验中用到。这三幅图像是用于构建泰迪熊目标模型所用的20幅图像的一部分,(这20幅图像)覆盖到了目标的多个视角,每一幅图像都是一个面。图中将SURF特征点用黄色圆圈标识。最后,将插入到SLAM地图中的密集三维模型也在图2中显示。

图2 最上面一行和下面一行最左边的图片显示了用于对泰迪熊构建模型的20幅图像中的3幅。注意图中添加了用于识别的SURF特征。右下角的图像显示了插入到SLAM地图中的密集3D模型。


V. 目标识别

目标识别算法首先是提取图像Ik-m的SURF特征点。对数据库中的每一个目标O,通过最近邻距离比率(NNDR)[19]计算图像Ik-m和它的每一个表面F之间的匹配点对,然后检查这些匹配点对的几何一致性。通过RANSAC算法选取其中至少五对不同的SURF特征点对,然后在SLAM图像Ik-m和目标图像IF之间建立一个有效的变换,利用PnP算法计算平移量和旋转量这就定义了从图像特征到三维点之间的变换关系。但是,对于平面目标,要改用DLT方法[14]估计单应性。


与上述变换关系或单应性不一致的特征点对将被排除。如果我们获得了图像Ik-m和某一个表面F之间的有效变换,则停止搜索目标O余下的表面,因为我们已经找到了模型O表示的物体。


当一个目标的表面被检测到,则通过选取所有的局内点来估计并改进目标最终的姿态,而与此同时,与数据库中SURF描述子匹配上的三维点将被输入到SLAM系统中,细节部分在VI-C中详述。


VI. 单目SLAM

本文采用的方法是基于目前最新的EKF单目SLAM算法提出的。在这部分我们还将会介绍标准模块外增加的其他内容。


A. 标准EKF模块

根据文献[6]中提出的1-点RANSAC算法,估计的参数可以建模为一个多维高斯变量x,变量包括第k步的摄像头运动参数xCk和n个组成地图的特征点yi。检测到的目标的几何信息将被添加到这个标准系统中。

第k步的摄像头参数xCk包括摄像头位置tCk和姿态qCk,以及线速度vCk和角速度。对特征点yi,采用逆深度参数化来初始化其深度,当投影方程有高线性度[5]时,则将特征点的坐标转化为欧氏坐标所有的几何参数都是相对于同一个坐标系W,在本文中为了使公式看起来简洁将其省去了。


鲁棒的数据关联主要基于1-点RANSAC EKF实现,这已被证明是对EKF框架中的干扰进行抑制的有效手段,而且对于大量的匹配点和大量的干扰数据 [6]运算量较低。


B. 过去的摄像头姿态的状态增量

当第k-m步识别线程开始时,单目SLAM的状态就会随着当前摄像头的位置而逐渐递增。这个过程通过将摄像头tCk-m位置和姿态qCk-m复制到状态向量中,并传递对应协方差来实现。在第k-1步中,即目标插入的前一步,状态向量如下:


这个增量过程一直持续到目标识别线程结束,一般来说会经历数个EKF步骤。如果数据库中的某个目标被成功识别,那么过去摄像头的位置则会用于对这一识别的目标进行延时了的初始化过程。初始化后,摄像头状态的增量则不再需要,因此过去的摄像头位置tCk-m和姿态qCk-m将会从状态向量中删除。


C. 目标插入

目标识别线程的输出是在目标参考坐标系O下的一系列点yFO,这些点也在SLAM过程中出现,SLAM摄像头Ck-m和目标表面F之间的相对运动关系也能够估计得到。每个点都要转换到SLAM参考坐标系W下进行插入,转化公式如下:

其中,Hab表示从参考坐标系b到坐标系a的齐次变换矩阵。tCk-m和qCk-m是目标识别初始化时候SLAM摄像头的位置和姿态,这些信息被存在状态变量x中,在本文VI-B中将会介绍。表示SLAM摄像头和目标坐标系O之间的运动转化关系,能够通过下式获得:

其中tFO和qFO是目标坐标系O下表面F的位置和姿态,从目标模型(文章第IV部分)可以得到。表示目标表面F和SLAM摄像头Ck-m之间的运动关系,从识别线程(本文第V部分)中获得。点的协方差相应传递,在坐标系W下的点yFW最终被插入到SLAM地图中。


当目标模型上的点的三维信息都估计出来后,它们的欧氏坐标将被插入到SLAM状态中。然后,这些目标上的点将在后续图像帧中被跟踪,而其位置信息也相应的可以通过文献[5]中用到的EKF单目SLAM公式来进行改进优化。


D. 重定位

在实际应用中,任何单目SLAM系统都可能由于各种各样的原因使得特征点跟踪失败:比如图像中有很多动态目标,或是图像丢失、突然运动导致的模糊等等。而重定位系统能够重新恢复摄像头相对之前地图的位置,这对实际应用来说非常重要。本文我们将采用文献[28]提到的重定位系统。在论文附件的视频中,大家能够看到在我们的第一个实验中,EKF单目SLAM算法在特征跟踪时是如何失败的,以及在几帧之后又是如何重新恢复的。


更多实验结果与小结见《单目语义SLAM(下)》

敬请期待

泡泡机器人SLAM的原创内容均由泡泡机器人的成员花费大量心血制作而成,希望大家珍惜我们的劳动成果,转载请务必注明出自【泡泡机器人SLAM】微信公众号,否则侵权必究!同时,我们也欢迎各位转载到自己的朋友圈,让更多的人能进入到SLAM这个领域中,让我们共同为推进中国的SLAM事业而努力!

商业合作及转载请联系[email protected]