近年来,视觉SLAM取得了很大的发展,但是在低纹理环境中依然有很大的挑战.在低纹理环境中,由于缺乏充足的特征点,基于特征点的SLAM无法可靠的估计环境结构和位姿.此外,当3d-2d对应特征点的数量不足以使用BA进行增量式相机位姿估计时,现有的视觉SLAM产生部分重建.这篇文章提出了Edge SLAM,它是一种基于特征点的单目视觉SLAM,可以在一定程度上解决上述问题.我们提出的edge SLAM从图像中检测边缘点,通过光流法追踪对应的点,使用三视图的几何关系进一步细化这些点的对应关系.由于对边缘点的跟踪,我们使用一种鲁棒的方法来初始化两个视图进行BA,我们提出的SLAM也确定了在已经完成的重建中估计新相机不可靠的潜在情况,我们采用了一种新的方法,使用局部优化技术可靠地估计新相机.我们采用最流行的开源数据集对所提出的SLAM进行了大量的评估,并且和最先进的SLAM算法进行了比较.实验结果表明与现有最新的SLAM算法相比,在纹理特征充足和缺乏的环境中Edge SLAM都很鲁棒并且结果可靠.
机器人的自主导航要求鲁棒地估计机器人的位姿和3d场景结构.近年来,研究者提出了大量的基于相机的SLAM算法.对于相机(机器人)的位姿和场景结构估计,这些视觉SLAM算法要求图像间点的对应关系.基于特征点的视觉SLAM试着通过使用sift,surf或者orb特征找到图像之间点的对应关系.使用这些特征点,通过增量式BA最小化重投影误差得到相机位姿和环境结构.这些SLAM依赖于所提取到的特征点,所以当提取到的特征点数量很少或者提取错误时,特别是当环境中纹理信息很少时(如图1所示)这些方法就会失败.因此,当3d-2d对应关系由于特征点对应关系不足或者BA三维点不足而减少时,这些SLAM算法经常会产生局部重建并且停止追踪.与基于特征点的SLAM相反,直接法通过最小化光度误差来寻找这些点,并且优化相机位姿.虽然这些SLAM方法与特征点的提取无关,但是当环境中光照和视角改变得到错误的光度误差估计时会导致错误的相机位姿估计.甚至在缺乏良好的纹理环境中也不会得到令人满意的估计结果.
这篇文章中,我们使用了基于特征点的方法检测图像中可靠的边缘,并且使用鲁棒的双向光流追踪边缘上的点. 这样的追踪方式将产生很强的点对应关系,并且使用三视图几何方法进一步细化. 使用这些特征对应关系和图像之间的极线几何我们选择关键帧进行结构估计所要求的两视图初始化.为了更好的初始化,在一个图像序列的许多关键帧中,我们提出并使用了一个新的两视图选择方法选择一对特定的关键帧.我们给出了所提出的初始化方法与流行方法的比较结果,很清晰地展示了我们方法的有效性.然后我们使用增量式BA估计新的关键帧和3d结构.与其他基于特征点的方法一样,如果在添加新相机期间3d-2d的点对应关系是病态的,那么我们采用一种新的相机追踪恢复方法来持续追踪相机.如果这种恢复方法没有得到一个可靠的相机估计,表示追踪丢失,然后试着进行重定位.同样的在每一次位姿估计时增量式的位姿估计累计误差会随着时间的推移造成相机位姿漂移,.Edge slam 使用图像中边缘的结构特性计算可靠的点对应关系,在局部BA进行3d重建时使用.一旦估计了一定数量的相机,我们就会优化全局重建.这个全局BA 将会纠正重建时产生的漂移.随后,回环检测将进一步优化相机位姿纠正漂移.我们的Edge slam在闭合一个回环时使用了图像中边缘结构的特性.我们提出的SLAM算法在纹理充足和缺乏纹理的环境中都是鲁棒且可靠的,如图1所示.我们所提出的SLAM的完整的流程如图2所示.这篇文章的贡献如下:
①在建立对应关系和回环检测中我们使用了边的结构特性
②我们通过地图的几何连续性校验地图重建的质量,从而提出了一个鲁棒的自动初始化流程
③当3d-2d对应关系不充足时位姿估计结果将会不可靠,针对这种情况我们提出了一种新的相机追踪恢复方法
我们这篇文章的组织结构如下.在第二部分我们回顾了相关工作,第三部分我们描述了edge slam的整个流程并且评估了我们的贡献.最后,在第四部分,我们展示了在流行开源序列上的实验结果.
在这个部分,我们描述了基于特征点法和直接法的SLAM的相关工作.
基于特征点的SLAM:Klein 和 Murray提出了第一个开创性的视觉SLAM,使用fast角点为特征点的PTAM,它通过解耦定位和建图模块提出了简单的位姿估计和建图的方法.在可使用特征点很少的低纹理环境中PTAM不能可靠的定位相机.Mur-Artal等人提出了orb slam,它使用orb特征点寻找点对应关系,在纹理充足的环境中精度很高.ORB SLAM提出了一种自动初始化的方法,它基于统计的方法在平面和非平面场景中分别使用单应矩阵或这基本矩阵建模实现.一个好的初始化方法能得到稳定的3d结构,但是因为重建地图的稀疏性,所以没有将它用于基准初始化.ORB SLAM在低纹理环境中无法使用.
直接法SLAM:直接法因为它可以建立半稠密地图而受到欢迎.最近,Engel等人提出了LSD SLAM,它最小化图像之间的光度误差并且维护一个半稠密地图.LSD SLAM通过使用逆深度参数化的方法用一个高度不确定的随机值初始化像素的深度,并且基于在图像像素上计算的视差来优化深度.通常由于初始化时有噪声和光度误差计算时噪声的存在像素深度的优化通常不会收敛到真值.因此直接法会产生错误的相机估计.
基于边的vo;Tarrio 和 Pedre提出了一个基于边的视觉里程计,使用边作为特征进行深度估计. 但是相机估计是错误的因为里程计仅适用于成对一致性,在长轨迹中全局一致性检查对于精确的相机估计是很重要的.Yang 和 Scherer提出了一种基于点和线特征的直接里程计的方法,其中估计的相机姿势与纹理环境中ORB SLAM 相当,但它没有考虑闭环.
基于点和线的SLAM:Pumarola等人提出了PL SLAM,建立在ORB SLAM 上.在追踪和建图时同时使用点特征和线特征.PL SLAM需要非常强大的处理能力才能进行双特征处理.
因此,没有基于特征点的SLAM,直接法SLAM,视觉里程计能很好的同时工作在有纹理环境和无纹理环境中.在这篇文章中,我们试着设计一个基于特征点的能同时处理有纹理环境和无纹理环境的SLAM系统.
特征对应关系的估计是一个主要的模块,它决定了基于特征的视觉SLAM的性能.不同于直接法,我们选择一组有效点来获得对应关系.特征提取的关键是保留结构信息特别是对于边特征来说,因此在一幅图像中我们首先检测可靠的边.一种流行的边缘检测方法是canny边缘检测法,它是一种基于梯度的边缘检测算法.这种方法检测到的边缘不适合于2d点的追踪,因为它对于光照变化和噪声敏感.一条边的精确定位和它在连续帧中的重复 对于边缘点的追踪是很重要的.Lindeberg提出了一种多尺度的边缘检测算法,Kovesi提出了一种基于相位一致性的边缘检测器.我们发现基于差分(DOG)算子的边缘检测是可靠的,因为在光照和对比度变化时它是鲁棒的.我们进一步缩小边缘生成单像素宽度的边缘.我们在收缩后的边缘上应用Juan和Sol[34]描述的边缘过滤过程来计算边缘点的连通性.这一点的连通信息在不同阶段验证边缘的连续性起到了关键的作用.如果输入图像模糊或散焦,可能无法正确计算边缘连续性。这些图像是错误特征对应关系的重要属性.我们利用图像边缘点的灰度变化的自适应阈值方法对图像进行识别和剔除.
在Edge SLAM中,我们利用LK光流的双向稀疏迭代和金字塔形式估计强度图像中边缘点的特征对应关系.我们使用基于窗口的光流法来避免光圈问题.仅使用光流法获得点的对应关系可能会包含噪声,从而在流向量的估计中产生漂移.我们使用一些滤波法去除噪声.首先剔除冗余像素,然后移除双向位置误差较大的点.如果在3个连续的关键帧中有2d对应关系,我们计算如图3所示的在中间关键帧上对应的极线,剔除不在极线交叉处的2d对应关系.对图像间噪声点滤波减少了噪声点,提高了追踪精度.
关键帧是图像帧的子集,我们选择它来避免低视差误差和机器人运动的冗余度.系统的整体精度因关键帧的选择和关键帧的数量而异.ORB SLAM提出了一种实用的关键帧选择策略,在我们的流程中采取了相同策略.I(t-1)和I(t)是两个连续帧,我们处理当前帧I(t)和上一次选择的关键帧K(m),其中0<=m ①我们使用极线几何的方法计算当前帧和上一关键帧之间的旋转.如果旋转超过一个阈值(通常是15°)就舍弃当前帧,因为光流追踪会产生对应的噪声,将上一帧I(t-1)作为新的关键帧K(m+1); ②我们计算每幅图像的平均追踪点数作为对应点.如果当前帧I(t)和上一次选择的关键帧K(m)之间对应的2d特征的数量低于平均追踪点数的30%,当前帧被舍弃.考虑场景有一个突然的变化或者光照改变,我们将上一帧I(t-1)作为新的关键帧K(m+1); ③如果3d-2d对应点的数量少于250对,我们将上一帧I(t-1)作为新的关键帧K(m+1); ④我们通过对所有对应点的前一个和当前像素位置之间的欧几里得距离进行平均,计算出当前帧I(t)和上一次选择的关键帧K(m)之间的平均位置变化.如果它大于图像宽度的20%,我们就把当前帧I(t)作为一个新的关键帧K(M+1). ⑤如果以上条件都不满足,我们在1s的固定时间间隔内考虑关键帧. SLAM使用增量式BA估计相机.为了初始化BA许多SLAM算法在计算图像对之间的极线几何并且三角化测量对应的点初始化3d结构后选择两个视图作为种子来初始化相机,然后使用BA进行再次调整.然后通过3d-2d对应关系重新划分把新的相机添加到已经存在的重建结构中.因此,用于BA初始化的种子对在结构估计中起着重要作用,结构估计通过重新划分可以产生正确的相机轨迹.然而,这样的相机和结构估计在低纹理环境中将不会得到很好的约束,并且输出将会有漂移和歧义.因此,许多现有的SLAM使用相机位姿的几何验证来可靠地初始化相机和结构。 在Edge SLAM中,我们也使用增量式BA,我们基于以下任一条件选择两个关键帧: ①两帧之间的旋转大于一个阈值(通常是15°) ②前一个和当前像素之间的欧式距离超过输入图像宽度的20% ③帧间有1秒时间差 我们基于5点算法求解的初始位姿,然后进行三角化生成初始的3d结构.然后使用BA优化初始结构.为了初始化的正确性我们提出了一种新的地图初始化方法.我们发现二维点之间的空间平滑度也应该符合重建的三维点.一条边可以被认为是小长度的连接直线,一条3d直线应该有相同的连续性,直线上点的顺序在二维和三维中应该保持不变.特别是二维中任意两个相邻边缘点在三维中也是相邻的,我们通过局部邻域梯度来识别直线.在二维图像和重建点云图中,使用两个视图中对应小直线的数量表示地图的质量.我们根据这个数量为地图分配一个质量因子,并继续查找两个视图直到质量因子高于一个阈值.如果质量因子大于阈值,我们就把种子对设置为BA的有效初始值,并且使用新的视图进行相机追踪. 图5展示了一个初始化的例子,它是TUM RGB-D标准数据集中的fr2_desk序列.图5(b)是使用前11帧内的视图进行初始化的一个结果,在第11帧时会产生不连续结构.直到第117帧时与真实轨迹相比的绝对轨迹误差的均方根值是1.12cm.在我们的流程中剔除了这个初始化.我们从第34帧开始进行初始化,直到第117帧时绝对轨迹误差的均方根值是0.48cm.这个结果表明了我们使用初始结构质量选择初始两视图的策略比其他方法要好.我们的初始化方法除了可以提高相机定位精度,同时也可以产生一个更好的3d重建结果.图4展示了一段时间内,由于我们的两视图初始化策略生成的3d结构比lsd slam和orb slam更好.我们认为这是因为lsd slam 和 ORB SLAM中进行初始化时使用的是规划的深度,并且没有进行结构校验. 使用两视图BA建立初始的3d结构后,我们使用Epnp的方法添加新的相机.我们只把新的关键帧添加到重建结构中(而不是所有的帧),我们使用Epnp方法进行位姿估计比ORB SLAM中使用匀速模型进行位姿估计更通用.对于任何非线性运动,匀速运动模型进行初始估计的精度可能会极大的降低. 在两视图初始化后我们通过3.2节介绍的关键帧选择策略寻找下一个关键帧.通过3d-2d对应关系使用EPnp的方法计算位姿,然后三角化将关键帧添加到已经存在的重建结构中.当两个关键帧共同观测到的3d点数大于100时,我们把这两个关键帧定义为共视关键帧. 我们在每25秒或者25个局部关键帧后对位姿和地图进行一次全局BA优化.这种优化策略可以有效的纠正漂移. 追踪失败是视觉SLAM中常见的问题.导致这种问题的一些显著的原因是遮挡,突然的运动,BA中对应点减少,由于低纹理环境中2d对应点的减少,现有的SLAM算法在追踪失败后都进行重定位,但是重定位在机器人移动过程中不一定会发生,除非相机返回到和它以前访问过的位置非常近的地方.为了在不重定位的情况下解决追踪失败的问题,我们采用三个连续的关键帧K(t-2),K(t-1)和K(t),前两个关键帧已经得到了估计位姿,而当前关键帧位姿无法通过EPnp的方法得到.有两个原因: ①在三个关键帧之间都有2d对应关系,但是由于前两帧重投影误差较大,我们没有建立对应的3d-2d关系,所以这种情况下我们使用2d对应关系估计位姿. ②由于光流不稳定,3d-2d关系不正确,不对这种情况进行处理. 我们使用2d-2d对应关系估计关键帧位姿,不同于SLAM坐标系.极线几何提供了从帧kt-1到帧kt的成对旋转和单位方向,其中帧kt-1位于原点。我们命名这个坐标系为L,它与SLAM坐标系有一个未知的尺度差,与SLAM坐标系的不同。我们通过三角测量创建具有二维对应关系的新三维点和帧kt−1和帧kt in l的估计姿态,并通过使用三维-二维对应关系重新剖分重新估计帧kt−2 in l。束调整进一步改进帧kt−2和帧kt的姿态,而不改变坐标系。例如,调整捆后,第kt-1帧的姿势保持不变。束调整为帧kt和帧kt-2分别产生稳定的成对旋转和平移对(r(t-1)→t、t(t-1)→t)、(r(t-1)→t(t-2)、t(t-1)→t(t-2))。只有当束调整产生足够多的入口三维点(超过100个)时,管道才会继续,否则尝试重新定位。主要的想法是在校正刻度差后将坐标L与SLAM坐标合并。图6以图形方式表示方法,其中三个连接的帧kt−2、kt−1、kt估计为l,然后与slam坐标合并。 我们利用SLAM和L坐标系中帧kt−2和帧kt−1的估计值计算两个坐标系之间的比例差,其中cli和csi分别表示L和SLAM坐标系中第i帧的相机中心。在L中,帧kt的比例校正摄像机中心遵循方程式3中给出的关系。 为了融合它们我们要求对齐两个坐标系的轴.因此,我们旋转SLAM坐标系的轴与第K(t-1)帧对齐,利用方程4计算当前帧的相机光心在旋转SLAM坐标系中的坐标,利用方程5给出反向旋转,计算它在SLAM坐标中的光心坐标.成对的旋转总是独立于任何坐标系统,因此我们使用当前帧的成对旋转获得在SLAM坐标系下的绝对旋转,如方程6所示. 最后,我们利用方程7计算了slam坐标中帧kt的平移矢量(ts t),并将ω集中存在的二维对应关系包括在内,通过三角测量[12]将其设置为slam坐标,以便更好地连接当前帧与以前帧。SLAM坐标系下当前帧的位姿估计误差较小,局部BA进一步优化了位姿.如果BA产生了足够多的内点,增量式的追踪将在下一帧继续,否则启动追踪失败程序. 我们在低纹理环境数据下评估我们的追踪失败恢复方法,例如序列fr3_str_notex_far在第61帧时由于3d-2d对应关系不充足导致相机估计不准确,我们提出的追踪失败恢复方法估计关键帧位姿的误差与真值相差0.3cm,如图7所示. 表1展示了实验细节.结果表明ORB SLAM在前两个序列中不能初始化,lsd slam在所有序列中追踪失败,我们的追踪失败恢复方法在所有的情况下产生了正确的估计结果. 在两视图初始化后使用增量式BA估计相机位姿.这种位姿估计方式会造成误差累计并且在轨迹估计时会有漂移.闭合回路通过不相邻关键帧之间图像匹配则纠正漂移. 如果两个不相邻的关键帧从不同的视角观测同一个场景我们就认为这是一个回环.我们的回环检测仅对关键帧进行检测.一个好的回环检测对于尺度变换,平移和场景的旋转都具有不变性.图像矩不变量是这些特定变换的不变量,是处理大图像集和大位移时使用的非常好的特征。这是一种很好的分类对象的技术,也适用于模式识别,在模式识别中,利用多边形的三阶矩不变量进行边缘匹配来识别对象。我们利用图像矩不变量,基于三阶矩对关键帧边缘进行匹配。随后,我们采用多级匹配机制,将每一关键帧划分为16个象限,根据一对关键帧之间的匹配象限计算匹配得分.我们利用每个象限的边缘数、平均边缘像素密度和平均强度三者的自适应加权平均值来寻找匹配的象限.我们平均不变矩和投票的平均分数得到两个关键帧之间的匹配得分.最初,我们的方法计算最后一个关键帧K(t)与最多之前5帧的匹配得分,它们之间的观测方向变化小于30°,保留最低得分M(min)作为选择匹配非相邻关键帧的阈值.随后,计算与K(t)所有非相邻关键帧的匹配得分,并且只保留分数大于M(min)的关键帧,仅当三个连续关键帧的匹配分数超过Mmin时,我们才将关键帧视为与Kt匹配的关键帧,以避免错误匹配.我们选择三个连续的关键帧中匹配分数最高的那个作为回环候选帧.随后,我们采用3.1所述的方法计算Kt和Kloop之间的点的对应关系.它是一组3d-3d对应.我们通过3d-3d对应关系计算Kt和Kloop之间的相似变换Tsim.如果这个相似变换有足够多的内点(大于100个)我们就认为Kloop是当前帧的回环关键帧. 回路融合纠正当前帧和它相邻关键帧之间的漂移.我们使用相似变换Tsim更新当前关键帧和它的相邻关键帧的位姿.Kloop和它的相邻关键帧的可见3d点是Mloop,Kt和它的相邻关键的可见3d点是Mt.我们把Mloop中的3d点投影到当前关键帧Kt和它的相邻关键帧中,在这些投影点和Mt中的3d点之间检测3d-2d对应关系.我们把找到3d-2d对应关系的点并且在相似变换中是内点的点进行地图点融合.之后进行全局BA优化. 我们提出了一个视觉SLAM,它在纹理充足和低纹理环境中都可以进行追踪,并构建可识别地图.我们通过一个校验处理进行初始化,针对低纹理环境中相机追踪不可靠我们提出了一个新的局部优化方法使得相机估计更稳定.我们的处理方法利用边缘结构特性进行高效可靠的回环检测.在语义理解上显示了地图生成的明显改进. 3.3 两视图的初始化
3.4 追踪和建图
3.4.1 增量式位姿估计和建图
3.4.2 追踪失败处理
3.5 闭合回路
3.5.1 回环检测
3.5.2 回路融合
4.实验结果
5.结论