于 航 ,杨维鑫 ,李光雷 ,樊梦成 ,杨科成 ,余 铖
(浙江农林大学光机电工程学院,浙江 杭州 311300)
同时定位与建图(Simultaneous Localization and Mapping, SLAM)[1]是指机器人在构建当前环境地图时,同时定位自身位置和姿态的过程,其被广泛应用于机器人、无人机等领域。最早应用在SLAM 技术上的是基于概率统计的扩展卡尔曼滤波器(EKF)[2]。2002 年,Montemerlo 等针对EKF 计算量大的缺点进行改进,提出Fast SLAM1.0 和Fast SLAM2.0[3]。近年来,随着计算机图像处理技术的进步以及视觉传感器的高速发展,学者们逐渐将目光聚焦在视觉SLAM 技术上[4]。2010 年,Henry 等提出了一种结合RANSAC 和ICP 来计算机器人位姿的SLAM 方法[5]。2012 年,Sturm 等提出一种RGBDSLAM 算法评判标准[6]。2014 年,Forster 等[7]提出了SVO 算法。2014 年,Engel 等[8]提出了LSD-SLAM算法,LSD-SLAM 算法是一种基于直接法的单目SLAM 算法。2015 年,Mur-Artal 等[9]提出了一种ORB-SLAM 方法。ORB-SLAM 系统包含了跟踪、建图、重定位、闭环检测等模块,使用ORB 方法提取出每个图像中的特征,使用DBoW2 库进行回环检测,最后使用g2o 优化位姿,该方法的精度和实时性都得到了提高,但建图部分没有较好的地图模块。研究团队经过改进,在ORB-SLAM 的基础上推出了ORBSLAM2[10],在单目的基础上增加了双目和RGB-D 深度相机模式,使ORB-SLAM2有了更强的应用性。
本文提出基于改进ORB-SLAM2 的SuperPoint-SLAM 算法模型,使用SuperPoint 网络提取图片特征点以及计算描述子来取代原有ORB 特征提取。改进后的模型具有特征跟踪、局部建图、回环检测这三个线程,并通过System 总线程完成对三个线程的调度,可实现地图重用、回环检测以及重新定位等功能,实现移动机器人的定位与建图。SuperPoint 网络的特征提取与匹配取代ORB 特征提取与匹配的单目SLAM系统框图,如图1所示。
图1 SuperPoint-SLAM系统框架
该系统框架研究方法如下:
1)特征跟踪线程。主要功能为对地图关键帧进行匹配筛选,从而提升地图建图精度。使用SuperPoint 网络从当前帧图像中提取特征点,并在当前帧特征点中寻找与上一帧特征点相匹配的特征点,引入RANSAC 算法对特征匹配点进行误匹配剔除处理,计算单应性矩阵H 并估计相机位,然后对局部地图进行跟踪,将局部地图的地图点和当前帧投影得到更多匹配,优化当前帧的位置姿态,最后判断是否需要插入新的关键帧。
2)局部建图线程。主要功能为继续优化地图点,降低回环检测运算压力。在插入新的关键帧之后,局部建图线程首先更新共视图和生长树,计算词袋Bow,插入到地图中,接下来剔除冗余的地图点,避免误匹配和错误的三角化,保留高质量的地图点。同时,对新插入帧中没有匹配到的特征点与局部地图点进行匹配,使其满足极线约束,并进行正深度检验、视差检验、重投影误差检验和尺度连续性检验,创建一个新的地图点。然后,对地图点和位姿进行局部BA 优化。最后,剔除冗余关键帧,减轻回环检测线程计算压力。
3)闭环检测线程。主要功能为检测地图点闭环程度,并进行闭环优化。首先,计算当前关键帧与回环候选帧之间的相似度,约束Bow 向量相似度、共有单词数量及连续性。如果判断存在回环,则将当前帧的共视图和匹配帧的共视图的地图点进行匹配,建立共事关系,以融合重复的地图点。然后,使用本征图优化轨迹位置。最后,对所有关键帧和地图点进行优化。
SuperPoint 是一种基于全卷积网络的自监督网络模型,区别于传统的SIFT 算法,SuperPoint 神经网络同时输出特征点与特征点的描述子。将带有描述子的SuperPoint 神经网络引入SLAM 算法中可以大幅提高特征点匹配精度。SuperPoint 神经网络主要分为三部分:共享编码器、特征点解码器以及描述子解码器,各部分结构如图2所示。
图2 SuperPoint网络结构图
编码器结构如图2 所示,一共有8 个3×3 的卷积层,padding 值均为1,步长值均为l,卷积核的数量依次为64、64、64、64、128、128、128、128,每个卷积层后面都有激活函数ReLU,卷积核的步长均为1,在经过第2、4、6 次的激活函数后还会用2×2 的最大池化进行降采样。最后输出W/8×H/8×128,减少了输入图像的维度。
检测关键点的解码器输入为W/8×H/8×128,在经过通道数为256 的CR 模块后,进入通道数为65 的卷积层,输出W/8×H/8×128 的张量信息。因为经过三次最大池化后,一个像素点的信息对应原始图像中不重叠的8×8 区域大小的像素信息,再加一个通道用于没有关键点的情况,所以最后的卷积层通道数是65个123。将关键点提取问题转换为分类问题,即8×8像素大小的区域中是否有关键点,并找到关键点的位置。通过Softmax 函数去掉没有关键点存在的通道,变为W/8×H/8×64,最后将图像大小W/8×H/8 恢复W×H,同时通道数从64 变成1,即可在输入图像中找到对应的关键点。
计算描述子的解码器输入为W/8×H/8×128,在经过通道数为256 的CR 模块后,进入通道数为256的卷积层,输出了W/8×H/8×256 的张量信息。然后,用双三次插值把W/8×H/8×256 变成W×H×256,最后,用L2 范数将描述子归一化即可得到描述子。SuperPoint 在编码器部分实现了关键点和描述子的参数共享,减少了计算量。
损失函数由两部分组成,如式(1)所示。式中,Lp是提取关键点的解码器损失函数;Ld是生成描述子的解码器的损失函数;X和D是图像经过网络输出后的特征点特征图以及描述子特征图;Y为图像特征点的标签值;X',D',Y'为图像经过单应性变换后再输入网络后输出的特征点特征图、描述子特征图和图像特征点的标签值;λ是超参数,用来平衡特征点检测损失和描述子损失。
实验采用TUM 标准数据集dynamic objects 中的freiburg3_sitting_xyz 静态和freiburg3_walking_xyz_validation 动态数据集来进行定位实验验证,使用EVO 工具对关键帧轨迹和实际轨迹进行对比得到轨迹偏差。
实验采用绝对轨迹误差的均方根误差与特征点选取质量来评价估计的轨迹偏差。绝对轨迹误差均方根公式如式(2)所示:
将改进后SLAM 算法与ORB-SLAM2 算法分别在freiburg3_sitting_xyz 与freiburg3_walking_xyz_validation 两个数据集进行训练验证,对实验结果进行绝对轨迹误差图绘制,结果如图3 所示。图3 中,虚线标识代表真实轨迹,实线标识代表算法轨迹。由图3(a)和(b)可知,两种算法在对静态环境的特征跟踪过程中,与真实轨迹对比,均表现出了良好的定位跟踪效果,但SuperPoint-SLAM 在y方向的追踪效果更优。由图3(c)和(d)可知,在相同环境引入动态干扰时,SuperPoint-SLAM 对真实轨迹的定位跟踪效果明显优于ORB-SLAM2算法。
图3 静态动态绝对轨迹误差对比
基于不同数据集,两种方法的各项指标比较如表1 所示。对于sitting_xyz 静态数据集,SuperPoint-SLAM 与ORB-SLAM2 均根方误差相差不大,仅相差0.000 9 m,关键帧数也相差不大,定位精度差别很小。但在walking_xyz_validation 动态数据集中,SuperPoint-SLAM 的均根方误差小于ORB-SLAM2,相差0.008 m,且关键帧数量提高50%。实验结果表明,SuperPoint-SLAM 算法在具有动态干扰时的采定位效果及精度均远优于ORB-SLAM2。
表1 基于数据集各项指标比较
本实验以Kinect1.0 和移动机器人为数据采集平台,采用英特尔六核i7 CPU,NVIDIA GeForce GTX 1650 的笔记本,系统版本为64 位的Ubuntun18.04 TS,在真实环境下比较了SuperPoint-SLAM 和ORBSLAM2在特征点识别和跟踪上的差异。
无论是强光还是昏暗环境ORB-SLAM2 系统由于采集的特征点过少,一直处于初始化失败的状态,如图4 所示。相反SuperPoint-SLAM 算法在阳光直射下可以采集到足够的特征点。由实验结果可知,ORB-SLAM2 开始到结束一直未提取到特征点,从而初始化失败,无法估计相机位姿;SuperPoint-SLAM则在强光下可持续提取到特征点,为系统估计相机位姿提供了条件。
图4 ORB-SLAM2与SuperPoint-SLAM特征点提取比较
本文提出基于改进ORB-SLAM2 的SuperPoint-SLAM 算法模型,在动态环境检测与复杂环境条件下明显优于现有ORB-SLAM2 算法模型,相比于传统ORB 算法,其在复杂条件下具有更好的性能和更优秀的鲁棒性,在特征点提取数量上提升近50%,轨迹误差减少0.008 m。
实验结果表明,SuperPoint-SLAM 算法在特征提取性能上优于ORB-SLAM2 算法,SuperPoint-SLAM算法在光照强弱环境中对图片的特征提取效果明显好于ORB-SLAM2 算法,并且该算法能够获得优于传统ORB-SLAM2 算法的定位精度。由于ORBSLAM2 是一种基于稀疏特征的轻量级定位方案,无法利用其稀疏地图进行机器人导航。未来研究团队将利用Kinect2.0,基于SuperPoint 与ORB-SLAM2,进一步进行稠密地图构建,实现机器人导航。