1. 引言
随着人工智能的快速发展,在海洋科学等相关学科的研究中水面无人艇(Unmanned Surface Vehicle, USV)发挥着越来越重要的作用。无人艇不仅拥有自主运动控制和对复杂环境适应性强,而且可以进行目标识别和跟踪。在复杂的水面环境中,无人艇安全运行的关键是能否进行准确的定位与导航。解决这一问题的关键就是无人艇同步定位与建图(Simultaneous Localization and Mapping, SLAM)技术。视觉SLAM技术为无人艇在未知的水面环境下进行自主导航和环境探测提供了可行性方案 [1]。
2. 视觉SLAM框架
经典视觉SLAM的框架如图1所示,由传感器数据、视觉里程计(Visual Odometry, VO)、后端优化(Optimization)、回环检测(Loop Closing)以及建图(Mapping)构成。

Figure 1. Classical visual SLAM flow
图1. 经典视觉SLAM流程
1) 传感器数据
视觉SLAM中用于获取数据使用的相机主要分为:单目、双目、深度相机。如表1所示。

Table 1. Analysis of the characteristics of different vision sensors
表1. 不同视觉传感器特点分析
2) 视觉里程计
在视觉SLAM中,前端是通过图像之间的位姿变换获得相机运动的过程。VO的实现方法,按是否需要提取特征分为直接法前端和特征点法前端。
3) 后端优化
后端主要是将前端传输过来的结果进行优化,利用扩展的卡尔曼滤波(extended Kalman filter,EKF)、粒子滤波(PF)等滤波理论或者优化理论进行树或图的优化,最终获得较优的位姿估算。
4) 回环检测
回环检测是指根据传感器信息判断机器人在之前有没有访问过某个地方,用于校正VO漂移产生的偏差,从而获得信息一致的地图。
5) 建图
对于建图来说,没有固定的算法和形式。侧重于定位时,主要使用稀疏的路标地图;侧重于真实场景建模时,需要对3D地图进一步网格化。
3. 视觉SLAM算法
3.1. PTAM算法
G. Klein等在2007年提出了并行跟踪与建图技术(Parallel Tracking and Mapping, PTAM) [2],首次区分了前端和后端,后端优化使用非线性优化的方法。该技术将跟踪和建图分为两个独立的任务,并在并行的线程中分别进行处理。在跟踪的线程中,对运动的相机进行位姿估计;在建图的线程中,从先前观察到的视频帧中产生一个点图像的三维地图。
由于跟踪和建图分为两个独立的任务,并在两个独立的线程上并行运行,这样能够在不影响相机跟踪实时性的情况下,提高相机跟踪算法的鲁棒性和精确性,同时减少系统处理每帧图像的时间。但主要为了小场景设计的,导致场景局限;在相机快速运动时跟踪容易丢失。
针对使用特征点法的机器人定位容易丢失等问题,刘贵涛等提出了一种基于多个双目相机紧耦合的视觉SLAM算法 [3],通过将多个多目相机的测量信息融合在一个统一的最小二乘法中来完成对自身的定位,有效解决了局部弱纹理环境下机器人定位丢失的问题。
针对算法的实时性问题,汪泽睿等在回环检测的过程中,先通过计算图像之间相同单词个数来去除掉与新图像差异度较大的历史图像,然后再进行图像查找的后续流程,提高回环测算法的实时性 [4]。
3.2. LSD-SLAM算法
2014年,Engel J等提出的LSD-SLAM (large-scale direct SLAM) [5],该算法的提出标志着单目直接法 SLAM的成功问世。LSD-SLAM主要分为图像位姿跟踪、深度估计以及地图优化三大模块,其中地图构建为该算法的主要模块;该算法通过建立大尺度直接单目SLAM的框架,提出一种用来直接估计关键帧之间相似变换、尺度感知的图像匹配算法,在CPU上实现了半稠密场景的重建。
针对相机快速运动时跟踪容易丢失问题,李攀伟等提出了一种结合特征关键子和直接灰度匹配方法前端视觉里程计信息融合方法,使在快速运动的情况下跟踪目标不容易丢失,以取得稳定的单目视觉定位效果 [6]。王英格等通过将线特征加入到LSD-SLAM视觉里程计中,提高了相机位姿估计的鲁棒性和准确性 [7]。
3.3. ORBSLAM算法
Mur-Artal等提出了ORB-SLAM算法 [8],该算法基于PTAM的思想,在PTAM的算法框架的基础上进行了优化和改进,使用了3个独立并行的线程进行追踪、地图构建和回环优化 [8]。ORBSLAM整个算法过程基于ORB (Oriented FAST and Rotated BRIEF)特征点,具有较高的特征点利用率,提高了系统的实时性。另外,ORBSLAM具有地图自动初始化,全局重定位功能,并能实时对每帧图像进行回环检测和优化,提高了系统的定位精度。经过Mur-Artal等人的不断优化,2016年提出了ORB-SLAM2 [9],它支持单目、双目和RGB-D三种相机。
该算法具有相对完善的的功能和框架,可用于室内外场景以及大小不同的场景,有着优越的鲁棒性。但是,ORB-SLAM使用了大量的特征点,计算这些特征点需要花费大量时间;另外构建的地图为稀疏地图,没有办法满足路径规划的需求。
针对ORBSLAM算法特征点问题,陶卓等采用FAST算法对特征点进行检测,同时利用点特征提取算子去除特征点中的伪角点,提高了特征点的质量 [10]。赵宇琦等在原始ORB算法的基础上采用快速自适应图像金字塔,三维描述子质心法与四叉树特征管理算法等方法进行改进,改进后的算法提取的图像特征点鲁棒性更强 [11]。秦绪佳等通过对提取周边点的方式和判断特征点条件进行了改进,使算法能够更快速准确的提取到图像上的特征点,减少了噪点的数目,提高了特征点的检测效率 [12]。
4. 视觉惯导SLAM算法
纯视觉的SLAM在自身及周围环境发生剧烈变化的时候会受到较大的影响,而惯性导航测量单元(IMU, Inertial Measurement Unit)可以实时记录来自加速度计和陀螺仪的信息,在视觉信息失真的时候,可以通过短时积分以此来提供相对准确的自身运动信息。在一定程度上,相机和IMU这两个传感器能够互补,相机数据可以有效修正IMU的漂移,而IMU可以降低动态环境对相机的负面影响,视觉信息和惯导信息融合使用可以取得较为准确的定位结果。
4.1. MSCKF算法
2007年Mourikis等人提出以多状态约束卡尔曼滤波的SLAM算法(MSCKF, Multi-state Constraint Kalman Filter) [13] [14],MSCKF采用滑动窗口(sliding window)的形式,通过连续时间段内的相机位姿状态建立非线性三角化约束,实现滤波更新和状态估计,大大提高了系统的鲁棒性和收敛性。
针对MSCKF的初始化阶段的缺陷,赵忠堂等采用Sig-ma 滤波器和三焦点张量约束快速完成系统初始化,所生成的状态向量与MSCKF一致,从而实现了系统初始化阶段和后续导航之间的无缝衔接,提高了系统状态估计的鲁棒性和精度 [15]。
针对传统MSCKF 算法在光线不好的情况下造成滤波器估计准确度和稳定性降低,王磊等融合了交互式多模型(IMM)估计和多状态约束卡尔曼滤波(MSCKF)算法,提出了一种IMM-MSCKF算法,算法以MSCKF为模型匹配子滤波器,融合各子滤波器的输入、输出,大大提高了系统的鲁棒性和精确性 [16]。
4.2. OKVIS算法
2015年,Stefan等人提出了基于非线性优化的后端优化与图像中关键帧使用的视觉惯导SLAM算法(OKVIS, Open Keyframe-Based Visual-Inertial SLAM) [17],该算法是通过将视觉信息和惯导信息紧耦合的方式进行融合,后端通过优化的方法实现位姿准确估算。该方法利用视觉测量误差与惯导测量残差建立代价函数,同时对视觉信息和惯导信息进行优化,进而得到相对准确的位姿估算。同时优化视觉信息和惯导信息降低了系统的数据计算量,保证了算法的精确性和实时性。
针对视觉惯性里程计在处理图像信息的时候,特征点正确的匹配率较低问题,刘铠铭等通过结合图像的梯度信息提高实际纹理不同区域的描述子间的差异,并利用特征点的像素坐标信息,对相邻时刻采集到的图像间的待匹配特征点对进行筛选,提高了特征点正确匹配率 [18]。
黄坤等对OKVIS算法进行改进,提出一种MyVIO跟踪注册算法 [19]。把OKVIS算法使用的BRISK描述符算法替换为MyFREAK描述符算法,对图像数据进行处理,提升图像匹配的实时性和鲁棒性;还增加一种视觉惯性初始化过程,提升了算法整体的鲁棒性。
4.3. VINS-MONO算法
香港科技大学Tong Qin等学者提出了一种基于优化的紧耦合视觉惯导SLAM算法(Monocular Visual-Inertial Systems, VINS-MONO) [20] [21],VINS-Mono是VINS开源的单目视觉惯性SLAM方案,是基于滑动窗口优化实现的 VIO,使用IMU预积分构建紧耦合框架,具有自动初始化、在线外参标定、重定位、闭环检测以及全局位姿图优化功能的一套完整的SLAM系统。该算法有效利用了视觉信息和IMU信息,提高了算法的实时性,在实际运行过程中具有良好的表现。
针对VINS-MONO的视觉导航系统初始化的性能不太理想,徐晓苏等提出了一种基于IMU预积分封闭解的初始化算法,该方法利用多约束的卡尔曼滤波器融合了IMU数据和相机数据,提高了原来系统的定位准确度 [22]。
针对VINS-MONO在水下环境中回环检测效果不太理想,进而导致定位精度较差。赵恒飞等提出了一种基于几何约束和ORB字典的水下回环识别算法。将原来VINS-MONO使用的FAST角点替换成ORB特征点,相对于FAST角点,ORB特征点在水下环境中能提供大量正确的回环候选帧,提高回环检测效果以及定位精度 [23]。
5. 结论
应用视觉SLAM算法在水面环境中对无人船进行实时定位和建图,纯视觉的MONOSLAM、PTAM和ORB-SLAM/ORB-SLAM算法仅使用高清相机来获取周围环境信息对无人船进行位姿估算,但高清相机获取的图片信息中包括水面的动态区域部分,会使图片中检测到的有效特征点不足的情况,导致无法准确估计位姿信息,因此纯视觉SLAM 应用在水面环境下略有不足。相比于纯视觉SLAM,视觉惯导信息融合的MSCKF、OKVIS和VINS-MONO算法能够弥补纯视觉SLAM算法的不足。MSCKF算法融合双目视觉和惯导信息进行位姿估算,但在水面环境中要对图像进行再处理,算法整体计算量太大,实时性表现不好。OKVIS算法没有闭环检测模块,在大尺度环境下不能位姿校正,因此不适合大尺度水面环境。VINS-MONO算法具备相对完善的系统架构,有较好的定位精度,大尺度水面环境下有较稳定的表现。
综合近年来SLAM算法的研究成果,如表2所示,无人艇在SLAM领域正不断向鲁棒性、实时性和准确性方向发展,未来可从以下方面展开探索与研究。

Table 2. Comparison table of visual SLAM algorithms
表2. 视觉SLAM算法对比表
1) 考虑多种传感器融合,如将激光雷达、GPS、相机以及 IMU 等多传感器进行融合,实现对环境的感知。
2) 深度学习在传统的图像领域表现良好,将slam和深度学习融合来完成一些更复杂的任务。
基金项目
2022年研究生科研与实践创新计划项目支持
NOTES
*通讯作者。