伞红军,王汪林,陈久朋,谢飞亚,徐洋洋,陈 佳
(1.昆明理工大学 机电工程学院,云南 昆明 650500; 2.中国人民解放军第78098部队,四川 眉山 620031)
同步定位和建图(Simultaneous Localization and Mapping,SLAM)是智能移动机器人的核心技术,它利用视觉或激光传感器来实现机器人的定位和环境地图构建。通过相机采集环境信息,并将其作为主要输入的SLAM系统被称为视觉SLAM(Visual SLAM,VSLAM),其因能感知环境的纹理信息和丰富的色彩而逐渐成为了主流的SLAM系统。根据视觉里程计计算方式的不同,可以将VSLAM分为特征点法和直接法[1]。基于特征点法的SLAM系统主要有:MonoSLAM(Monocular SLAM)[2]、PTAM(Parallel Tracking and Mapping)[3]、ORB-SLAM2(Oriented FAST and Rotated BRIEF-SLAM2)[4]。基于直接法的SLAM系统主要有:LSD-SLAM(Large Scale Direct Monocular-SLAM)[5]、SVO(Semi-Direct Monocular Visual Odometry)[6]、DSO(Direct Sparse Odometry)[7]。特征点法通过对图像中特征点的提取和匹配来计算相机的位置和姿态,这种方法对特征点的提取和匹配精度要求较高。如果存在过多的误匹配,则相机的位置和姿态估计会产生较大的偏差。直接法不计算关键点或描述子,其基于灰度不变假设,直接根据图像的像素信息来计算相机运动轨迹,在高光环境中存在退化或失效等现象。目前,基于特征点法和直接法的VSLAM系统大多基于静态场景实现,动态场景中的动态物体会使系统发生误匹配,导致相机位姿估计退化,甚至出现错误,这也使得目前鲁棒性较高的SLAM系统无法在动态环境中发挥其正常的功能。
随着深度学习的快速发展,研究者们结合深度学习识别动态物体,并剔除动态物体来实现动态场景SLAM。文献[8]通过结合卷积神经网络 Fast R-CNN(Fast Region-Convolutional Neural Networks)[9]提出了一种动态的RGB-D SLAM(Red,Green and Blue-Depth SLAM)。文献[10]将ORB-SLAM2与RGB-D 相机深度值相结合来确定动态物体并移。文献[11]提出了自适应窗格匹配模型,并利用Mask R-CNN(Mask Region-Convolutional Neural Networks)实现语义信息识别,从而实现动态场景的三维重建。文献[12]结合多视图几何以及Mask R-CNN去识别动态场景物体。文献[13]提出的DS-SLAM(Dense Semantic-SLAM)利用 YOLO(You Only Look Once)深度学习模型和对极约束去识别动态特征点。
图1 本文SLAM系统流程Figure 1. Process of the proposed SLAM system
本文所提出方法的大致步骤为:首先利用目标检测语义分割算法对关键帧进行预处理,剔除位于潜在动态物体或者动态物体上的显著特征点;然后利用ORB-SLAM2框架进行优化,降低相机位姿估计的影响;最终建立无动态特征点干扰的三维稀疏点云地图。本文针对现有ORB-SLAM2算法在动态场景下的相机位姿估计精度差、鲁棒性差、特征点易丢失和误匹配等缺点进行改进,并完成了以下工作:
(1)对ORB-SLAM2算法进行改进,新增语义分割模块,较大幅度提升了ORB-SLAM2在动态环境下相机位姿估计的精度和鲁棒性;
(2)利用Mask R-CNN[14]对RGB-D相机读取的每一帧图像进行语义分割,剔除位于人身上的特征点,提高了特征点匹配的速度和精度;
(3)在德国慕尼黑工业大学的TUM数据集上进行实验,并将本文所提出的算法与ORB-SLAM2算法进行比较以评价本文算法的性能。
本文算法以ORB-SLAM2为视觉SLAM的后端,在跟踪、局部建图、回环检测以及回环检测后的全局BA(Bound Adjustment)优化的基础上新增了语义分割线程。系统首先接收RGB-D相机采集的关键帧,然后对关键帧进行预处理,通过语义分割模块和ORB-SLAM2模块建立无动态特征点干扰的三维稀疏点云地图。数据处理流程为:利用RGB-D相机采集彩色图和深度图,并将其输入Mask R-CNN模块;随后,采用Mask R-CNN模块对彩色图进行语义分割,提取位于动态环境中的人、狗、猫等动态物体并将其标注为黑色;然后,采用ORB-SLAM2模块中的跟踪线程对彩色图进行特征点提取,并将其与Mask R-CNN模块黑色区域进行对比,剔除位于动态物体上的动态特征点,只保留静态特征点用于跟踪、回环检测以及建图。算法总体流程如图2所示。
图2 本文SLAM系统框架Figure 2. Framework of the proposed SLAM system
目标检测的目的是从不同的视觉信息中心识别图像中所要确定对象的大小及位置情况,并将其从不同背景图像中分离出来[15]。为了提高动态物体目标检测算法的实时性和鲁棒性,本文采用YOLOv4进行动态物体检测。YOLOv4[16]是一款轻量级网络模型,集成了大量优秀的方法,主要由3个组件组成:(1)在不同图像细粒度上聚合并形成图像特征的卷积神经网络Backbone;(2)一系列组合图像特征的网络层,并将图像特征传递到预测层的Neck;(3)对图像特征进行预测,生成边界框和并预测类别的Head。选取PASCAL VOC数据集中包含“Person”类的图片对网络进行训练,训练后随机对数据集中的一张RGB图像进行检测,结果如图3所示,YOLOv4可以检测图像中的行人并添加边界框和检测的概率。
图3 动态物体检测结果Figure 3. Dynamic objects detection results
为了检测动态物体并获取像素级的图像语义分割,研究人员通过对多个R-CNN(Region-Convolutional Neural Networks)[17]进行分析后发现Mask R-CNN是一种先进的对象实例分割技术,既可以获得像素级的语义分割,又可以获得实例标签。本文使用像素级语义分割对关键帧进行分割,未来的工作中可以使用实例标签对不同物体进行跟踪。本文选取MS-COCO数据集中包含“Person”类的图片对神经网络进行训练,训练后随机对数据集中的一张RGB图像进行检测,结果如图4所示。Mask R-CNN可以检测行人并对图像进行语义分割。
图4 语义分割结果Figure 4. Semantic segmentation results
本文的实验环境为Ubuntu18.04、Intel i7-8750H CPU、NVIDIA GTX1060 GPU、8 GB显存。本文采用德国慕尼黑工业大学开源的TUM RGB-D数据集的8个动态帧中的4个动态帧来验证本文算法在动态场景下的鲁棒性和定位精度。该数据集提供了精确的相机实际运动轨迹以及完备的评估方案。本文中,8个动态帧按照动态帧高低分为4个低动态帧数据集(freiburg_sitting_static、freiburg_sitting_halfspere、freiburg_sitting_rpy、freiburg_sitting_xyz)和4个高动态帧数据集(freiburg_walking_static、freiburg_ walking_halfspere、freiburg_walking_rpy、freiburg_ walking_xyz)。本文所使用的两个评价指标分别是绝对轨迹误差(Abosolute Trajectory Error,ATE)和相对位姿误差(Relative Pose Error,RPE)[18-19]。ATE是相机真实位姿和SLAM系统估计位姿的直接差值,以图表的形式展示,可直观地反映SLAM算法精度和轨迹全局一致性。第i帧的绝对轨迹误差ATEi的定义为
(1)
式中,i=1,2,…,n;Qi,Pi∈SE(3)分别表示第i帧的相机真实位姿和SLAM系统估计位姿;S∈SE(3) 表示从相机真实位姿到SLAM系统估计位姿的变换矩阵。
RPE主要描述两个相邻固定时间戳的位姿变化量的差值,等同于直接测量视觉里程计的误差,可用于估计系统的漂移量。第i帧的相对位姿误差RPEi为
(2)
式中,i=1,2,…,m,Qi,Pi∈SE(3)分别表示第i帧的相机真实位姿和SLAM系统估计位姿;Δ表示两个相邻固定时间戳。
每个指标分别用其对应的均方根误差(Root Mean Square Error,RMSE)、平均误差(Mean)、中值误差(Medium)以及标准误差(Standard Deviation,SD)进行评估,其中均方根误差(RMSE)的计算式为
(3)
(4)
其中,trans(·)表示只取位移中的平移部分。
本文算法在ORB-SLAM2的基础上新增语义分割线程。Mask R-CNN对每一帧图像的检测可以分割图像中的物体,本文方案直接标注检测到的行人等动态物体,并在跟踪线程运行时剔除了每一帧图像中的动态特征点,只对静态特征点进行跟踪、建图和定位。
动态特征点剔除前后的效果如图5所示。图5(a)中提取了位于行人身上的动态特征点,这部分动态特征点将会影响相机的位姿估计,导致移动机器人无法准确定位并构建环境地图。图5(b)中剔除了位于行人身上的动态特征点,可以利用剩余的静态特征点实现SLAM,从而有效提高SLAM的鲁棒性和定位精度。
图5 动态特征点剔除(a)剔除前 (b)剔除后Figure 5. Dynamic feature point elimination (a)Before culling (b)After culling
本实验采用TUM数据集中的两个高动态帧数据集walking_rpy(简称w_r)、walking_static(简称w_s)和两个低动态帧数据集sitting_rpy(简称s_r)、sitting_static(简称s_s)来进行测试。
表1、表2分别为本文算法和ORB-SLAM2在4个动态数据集中的绝对轨迹误差对比和相对轨迹误差对比,其中Improvements的计算式为式(5)。
表1 绝对轨迹误差对比Table 1. Absolute trajectory error comparison
表2 绝对轨迹误差提升率Table 2. Absolute trajectory error improvement rate
(5)
从表1和表3可以看出,本文算法在TUM两个高动态帧数据集w_r和w_s中的位姿估计精度相对于ORB-SLAM2有显著的改善。walking_static高动态帧数据集只有两个高动态行走的人,相机的位姿没有移动,因此此数据集能够体现动态环境。从表2和表4可以看出,在ATE方面,RMSE提升了高达96.3%;在RPE方面,RMSE提升了高达41.2%。
表3 相对轨迹平移误差对比Table 3. Comparison of relative trajectory translation error
表4 相对轨迹平移误差提升率Table 4. Relative trajectory translation error improvement rate
为了直观地观察实验结果,将本文算法与ORB-SLAM2算法分别在w_s序列中运行。如图6所示,虚线表示相机轨迹计算值,实线表示相机轨迹的真值。显然,图6(a)中实线与虚线相差较大,表示相机运动轨迹与真实轨迹漂移量较大。图6(b)中实线与虚线相差较小,表示相机运动轨迹与真实轨迹漂移量较小,相机位姿估计精度较高。由此可见本文SLAM算法的相机位姿估计精度要高于ORB-SLAM2。
(a)
TUM高动态帧数据集w_r中有两个行人围绕办公桌行走,而相机也在空间的各个角度旋转,相比于其他的高动态帧数据集可以更好地反映动态特征点剔除情况。因此,本文选取TUM高动态帧数据集w_r作为构建三维稀疏点云地图的图像序列。如图7(a)所示,SLAM系统不考虑行人的影响,提取了位于行人身上的动态特征点,密集特征点出在相机前面,移动机器人会使用静态和动态特征点进行错误的位姿估计。如图7(b)所示,Mask R-CNN语义分割线程将行人身上的动态特征点剔除后构建了静态的三维稀疏点云地图,与图7(a)进行对比,图7(b)中行人身上的动态特征点被滤除,更有利于智能移动机器人的路径规划和导航等任务。
(a)
本文提出了一种面向室内动态场景的VSLAM方法。该方法在ORB-SLAM2系统的基础上融合了Mask R-CNN神经网络,新增语义分割模块,将室内动态场景下的动态特征点剔除,建立了只含有静态特征点的三维稀疏点云地图,提高了系统在室内动态场景下的位姿估计精度和鲁棒性,更加有效地为智能移动机器人提供了路径规划和导航的路线。但本算法仍然有改进空间,Mask R-CNN网络不仅有语义分割功能还有语义识别功能,后期可以结合稠密点云地图对环境建立语义地图,增加智能移动机器人的感知能力。在目前,本算法只适用于室内动态场景,未来会进一步提高其性能,使其可面向室外真实环境。