视觉SLAM(simultaneous localization and mapping, SLAM)是指移动载体在未知环境中,通过获取自身携带的视觉传感器信息,创建与环境一致的地图,同时确定自身在地图中的位置[1-3]。该技术不仅在机器人导航、任务规划和远程操作等领域具有重要研究意义,也在计算机游戏、虚拟现实和增强现实等领域具有广阔的应用前景[4-7]。研究视觉SLAM问题常用的相机主要有深度相机[8]、单目相机[9]和双目相机[10],其中深度相机受光照条件影响苛刻,难以在户外大场景中应用;单目相机无法恢复尺度信息,应用价值有限;双目相机可计算像素深度,因此在学术和工业领域得到了广泛应用。
视觉SLAM可通过是否使用图像特征分为特征法和直接法两类[11],且上述2种方法在实际应用中各有优劣。特征法[12-13]通过匹配图像特征,构建相邻帧之间的对应关系,并通过最小化重投影误差(re-projection error)对相机运动和地图结构进行优化。基于特征法的视觉SLAM系统鲁棒性强,即使在较大帧间运动时也可正常工作;但特征匹配操作需消耗大量时间,且特征法仅针对图像中少量特征点进行运算,忽略了其他像素信息,无法实现稠密建图。直接法[14-15]仅考虑像素灰度信息,通过最小化光度误差(photometricerror)恢复相机运动和地图结构。基于直接法的视觉SLAM系统无需进行特征匹配操作,计算效率高,可使用图像中的所有像素信息进行稠密或半稠密建图;但直接法基于灰度不变假设,鲁棒性较差,且稠密或半稠密建图需对大量像素进行运算,CPU无法实时运行,需借助GPU加速实现。
本文以设计高精度、高适应性的双目视觉SLAM系统为目的,选择基于特征法的双目视觉SLAM系统作为研究对象。在众多基于特征法的双目视觉SLAM系统中,双目ORB-SLAM[16]是目前最完善易用的实时视觉SLAM系统之一[2]。然而,双目ORB-SLAM算法跟踪模块仅解算最新一帧图像对应的状态量,且精度有限,需通过回环检测模块对其进行修正。若实际运动不包含回环路径,状态估计结果将产生漂移,且随系统运行时间缓慢增大。本文对双目ORB-SLAM算法进行了改进,提出了一种基于滑窗非线性优化的双目视觉SLAM算法,通过引入滑窗思想,解算最新多帧图像对应的系统状态,同时采用了边缘化策略将其余状态量转换为先验测量信息,从而在保证算法实时性的基础上提高了不包含回环路径时系统的精确性。
1 算法框架本文算法运行原理图如图1所示,主要分为3个并行线程:1) 特征提取和跟踪线程,主要负责提取和匹配图像特征,如图1中红框部分所示;2) 状态量估计线程,主要负责视觉特征点重投影误差计算,状态量非线性优化以及边缘化处理,如图1中蓝框部分所示;3) 建图线程,主要负责采用线性三角化和光束平差优化构建增量式地图,如图1中绿框部分所示。
![]() |
Download:
|
图 1 基于滑窗非线性优化的双目视觉SLAM算法原理 |
双目视觉SLAM需对左右目图像以及相邻帧图像进行特征点检测与跟踪,由于图像间畸变微小,本文采用导向性FAST特征加旋转BRIEF描述子(oriented FAST and rotated BRIEF, ORB)[17] 特征实现特征跟踪,结果如图2所示。
![]() |
Download:
|
图 2 左右目以及前后帧图像特征跟踪效果 |
本文图像特征跟踪具体实现步骤如下:首先,以原始图像为基准构建尺度因子为1.2的8层图像金字塔,在金字塔各层图像上提取基于加速分割测试的特征(features from accelerated sagment test, FAST)[18];其次,计算各特征点的方向,构建ORB特征描述子;最后,将左右目图像与相邻帧图像进行匹配,构建特征点间的匹配对应关系。
3 滑窗双目视觉SLAM系统状态估计基于特征点的SLAM算法通常把状态估计问题构建为以视觉特征点重投影误差为代价函数的非线性优化模型,通过引入滑窗思想,本文构建了新的代价函数,并采用高斯牛顿法迭代地求解最优的状态变量。如图3所示,滑窗双目视觉SLAM系统代价函数可表示为
${{J}}({{\chi }}) = {\sum\limits_{k = 1}^n {\sum\limits_{i = 1}^m {{{r}}({\hat{ l}}_{{f_i}}^{{c_k}},{{\chi }})^{\rm{T}}} } }{{r}}({\hat{ l}}_{{f_i}}^{{c_k}},{{\chi }}) + {{{J}}_{{\rm{mar}}}}({{\chi }})$ |
式中:
![]() |
Download:
|
图 3 滑窗双目视觉SLAM状态估计示意 |
如图4所示,通过相机投影模型,将视觉特征点
![]() |
Download:
|
图 4 视觉特征点重投影误差模型示意 |
视觉特征点
$\begin{array}{c} {{r}}({\hat{ l}}_{{f_i}}^{{c_k}},{{\chi }}) = \left[ \begin{array}{l} {{r}}({\hat{ l}}_{{f_i}}^{{c_{k,1}}},{{\chi }})\\ {{r}}({\hat{ l}}_{{f_i}}^{{c_{k,2}}},{{\chi }}) \end{array} \right]=\\ \left[ \begin{array}{l} {{{\pi}}}({{R}}_{{\rm{wk}}}^{ - 1}({{p}}_{{f_i}}^w - {{p}}_k^w)){\rm{ - }}{\hat{ l}}_{{f_i}}^{{c_{k,1}}}\\ {{{\pi}}} ({{R}}_{{c_{k,2}}{c_{k,1}}}^{}({{R}}_{{\rm{wk}}}^{ - 1}({{p}}_{{f_i}}^w - {{p}}_k^w)) + {{p}}_{{c_{k,1}}}^{{c_{k,2}}}){\rm{ - }}{\hat{ l}}_{{f_i}}^{{c_{k,2}}} \end{array} \right] \end{array}$ |
式中:
$\frac{{\partial {{r}}({\hat{ l}}_{{f_i}}^{{c_k}},{{\chi }})}}{{\partial {{{\theta }}_{{{wk}}}}}} = \left[ \begin{gathered} \frac{{\partial ({ {{{\pi}}}}({{p}}_{{f_i}}^{{c_{k,1}}}))}}{{\partial {{p}}_{{f_i}}^{{c_{k,1}}}}}{[{{R}}_{{{wk}}}^{ - 1}({{p}}_{{f_i}}^w - {{p}}_k^w)]_ \times } \\ \frac{{\partial ({{{\pi}}}({{p}}_{{f_i}}^{{c_{k,2}}}))}}{{\partial {{p}}_{{f_i}}^{{c_{k,2}}}}}{{R}}_{{c_{k,2}}{c_{k,1}}}^{}{[{{R}}_{wk}^{ - 1}({{p}}_{{f_i}}^w - {{p}}_k^w)]_ \times } \end{gathered} \right]$ |
$\frac{{\partial {{r}}({\hat{ l}}_{{f_i}}^{{c_k}},{{\chi }})}}{{\partial {{p}}_k^w}} = \left[ \begin{gathered} {\rm{ - }}\frac{{\partial ({{{{\pi}}}}({{p}}_{{f_i}}^{{c_{k,1}}}))}}{{\partial {{p}}_{{f_i}}^{{c_{k,1}}}}}{{R}}_{wk}^{ - 1} \\ {\rm{ - }}\frac{{\partial ({{{{\pi}}}}({{p}}_{{f_i}}^{{c_{k,2}}}))}}{{\partial {{p}}_{{f_i}}^{{c_{k,2}}}}}{{R}}_{{c_{k,2}}{c_{k,1}}}^{}{{R}}_{wk}^{ - 1} \end{gathered} \right]$ |
$\frac{{\partial {{r}}({\hat{ l}}_{{f_i}}^{{c_k}},{{\chi }})}}{{\partial {{p}}_{{f_i}}^w}} = \left[ \begin{gathered} \frac{{\partial ({{{{\pi}}}}({{p}}_{{f_i}}^{{c_{k,1}}}))}}{{\partial {{p}}_{{f_i}}^{{c_{k,1}}}}}{{R}}_{wk}^{ - 1} \\ \frac{{\partial ({{{{\pi}}}}({{p}}_{{f_i}}^{{c_{k,2}}}))}}{{\partial {{p}}_{{f_i}}^{{c_{k,2}}}}}{{R}}_{{c_{k,2}}{c_{k,1}}}^{}{{R}}_{wk}^{ - 1} \end{gathered} \right]$ |
式中:
$\dfrac{{\partial ({{{{\pi}}}}({{p}}_{{f_i}}^{{c_{k,1}}}))}}{{\partial {{p}}_{{f_i}}^{{c_{k,1}}}}}{\rm{ = }}\left[ {\begin{array}{*{20}{c}} {{\alpha _{x,1}}\dfrac{1}{{z_{{f_i}}^{{c_{k,1}}}}}}&0&{{\rm{ - }}{\alpha _{x,1}}\dfrac{{x_{{f_i}}^{{c_{k,1}}}}}{{{{(z_{{f_i}}^{{c_{k,1}}})}^2}}}}\\ 0&{{\alpha _{y,1}}\dfrac{1}{{z_{{f_i}}^{{c_{k,1}}}}}}&{{\rm{ - }}{\alpha _{y,1}}\dfrac{{y_{{f_i}}^{{c_{k,1}}}}}{{{{(z_{{f_i}}^{{c_{k,1}}})}^2}}}} \end{array}} \right]$ |
$\dfrac{{\partial ({{{{\pi}}}}({{p}}_{{f_i}}^{{c_{k,2}}}))}}{{\partial {{p}}_{{f_i}}^{{c_{k,2}}}}}{\rm{ = }}\left[ {\begin{array}{*{20}{c}} {{\alpha _{x,2}}\dfrac{1}{{z_{{f_i}}^{{c_{k,2}}}}}}&0&{{\rm{ - }}{\alpha _{x,2}}\dfrac{{x_{{f_i}}^{{c_{k,2}}}}}{{{{(z_{{f_i}}^{{c_{k,2}}})}^2}}}}\\ 0&{{\alpha _{y,2}}\dfrac{1}{{z_{{f_i}}^{{c_{k,1}}}}}}&{{\rm{ - }}{\alpha _{y,2}}\dfrac{{y_{{f_i}}^{{c_{k,2}}}}}{{{{(z_{{f_i}}^{{c_{k,2}}})}^2}}}} \end{array}} \right]$ |
式中:
状态量
$\left\{ \begin{array}{l} {{{R}}_{{\rm{wk}}}} \leftarrow {{{R}}_{{\rm{wk}}}}{\rm{exp}}(\delta {{{\theta }}_{{\rm{wk}}}}) \\ {{p}}_k^w \leftarrow {{p}}_k^w{\rm{ + }}\delta {{p}}_k^w \\ {{p}}_{{f_i}}^w \leftarrow {{p}}_{{f_i}}^w{\rm{ + }}\delta {{p}}_{{f_i}}^w \end{array} \right.$ |
式中
在视觉SLAM系统中,随着运行时间推移,由视觉特征点三维坐标与相机位姿构成的状态变量数目将显著增加,算法复杂度将随状态量数目增加而增大。如果求解全状态SLAM问题将无法满足实时性需求;如果仅求解最新一帧图像对应的状态量将忽略各状态量间的关联,显著降低了SLAM系统的精度。本文引入了滑窗思想,有效限制了待求解状态量数目,采用状态量边缘化策略,且将其余状态量转换为待求解状态量的先验观测信息,有效实现了算法复杂度和精确性间的平衡。
3.2.1 边缘化原理采用高斯牛顿法求解状态增量的公式为
${{H}}\Delta {{\chi }} = {{b}}$ | (1) |
式中:
$\left[ {\begin{array}{*{20}{c}} {{{{H}}_{{{\mu \mu }} }}}&{{{{H}}_{{{\mu \lambda }} }}}\\ {{{{H}}_{{{\lambda \mu }} }}}&{{{{H}}_{\lambda \lambda }}} \end{array}} \right]\left[ \begin{array}{l} \Delta {{{\chi }}_\mu }\\ \Delta {{{\chi }}_\lambda } \end{array} \right] = \left[ \begin{array}{l} {{{b}}_\mu }\\ {{{b}}_\lambda } \end{array} \right]$ | (2) |
采用舒尔补(schur complement)[19]原理简化式(2),得
$\left[ {\begin{array}{*{20}{c}} {{{{H}}_{{{\mu \mu }} }}}&{{{{H}}_{{{\mu \lambda }} }}}\\ 0&{{{H}}_{_{{{\lambda \lambda }} }}^ * } \end{array}} \right]\left[ \begin{array}{l} \Delta {{{\chi }}_\mu }\\ \Delta {{{\chi }}_\lambda } \end{array} \right] = \left[ \begin{array}{l} {{{b}}_\mu }\\ {{b}}_{_\lambda }^ * \end{array} \right]$ |
式中:
求解方程
${{b}}_\lambda ^ * \leftarrow {{b}}_\lambda ^ * {\rm{ + }}\frac{{\partial {{b}}_\lambda ^ * }}{{\partial {{{\chi }}_\lambda }}}\Delta {{{\chi }}_\lambda }{\rm{ = }}{{b}}_\lambda ^ * {\rm{ - }}{{H}}_{{{\lambda\lambda}} }^ * \Delta {{{\chi }}_\lambda }$ |
固定滑窗内图像帧数目为n,本文边缘化策略的如下:如果滑窗内第n−1帧为关键帧,将边缘化滑窗内第1个关键帧对应状态量
1) 第n−1帧跟踪到的特征点数目大于60个;
2) 跟踪到的特征点中50%为未知三维坐标;
3) 地图构建线程处于空闲状态。
4 滑窗双目视觉SLAM系统地图构建视觉SLAM系统需根据相机运动状态以及观测到的特征点信息构建增量式地图。由于建图线程不受相机帧率限制,本文仅选用关键帧图像观测到的特征点构建地图。当滑窗内倒数第一帧图像为关键帧时,对该帧图像中未知三维坐标的匹配点,采用线性三角化方法,进行三维重建。记特征点
$\left\{ \begin{gathered} {{{{\pi}}}^{ - 1}}({{l}}_{{f_i}}^c) \times {{{T}}_{cr}}{{p}}_{{f_i}}^r = 0 \\ {{{{\pi}}}^{ - 1}}({{l}}_{{f_i}}^r) \times {{p}}_{{f_i}}^r = 0 \\ \end{gathered} \right.$ | (3) |
式中:
${{{{\pi}}}^{{\rm{ - }}1}}({{l}}_{{f_i}}^c){\rm{ = }}{\left[ {\begin{array}{*{20}{c}} {{\alpha _{x,1}}}&0&{{\beta _{x,1}}}\\ 0&{{\alpha _{y,1}}}&{{\beta _{y,1}}}\\ 0&0&1 \end{array}} \right]^{ - 1}}\left[ \begin{array}{l} u_{{f_i}}^c\\ v_{{f_i}}^c\\ 1 \end{array} \right]$ |
${{{{\pi}}}^{{\rm{ - }}1}}({{l}}_{{f_i}}^r){\rm{ = }}{\left[ {\begin{array}{*{20}{c}} {{\alpha _{x,1}}}&0&{{\beta _{x,1}}}\\ 0&{{\alpha _{y,1}}}&{{\beta _{y,1}}}\\ 0&0&1 \end{array}} \right]^{ - 1}}\left[ \begin{array}{l} u_{{f_i}}^r\\ v_{{f_i}}^r\\ 1 \end{array} \right]$ |
式中:
$\left[ \begin{gathered} {[{{{{\pi}}}^{{{ - }}1}}({{l}}_{{f_i}}^c)]_1}{[{{{T}}_{{{cr}}}}]_3} - {[{{{T}}_{{{cr}}}}]_1} \\ {[{{{{\pi}}}^{{{ - }}1}}({{l}}_{{f_i}}^c)]_2}{[{{{T}}_{{{cr}}}}]_3} - {[{{{T}}_{{{cr}}}}]_2} \\ {[{{{{\pi}}}^{{{ - }}1}}({{l}}_{{f_i}}^r)]_1}{[{{{I}}_{4 \times 4}}]_3} - {[{{{I}}_{4 \times 4}}]_1} \\ {[{{{{\pi}}}^{{{ - }}1}}({{l}}_{{f_i}}^r)]_2}{[{{{I}}_{4 \times 4}}]_3} - {[{{{I}}_{4 \times 4}}]_2} \\ \end{gathered} \right]{{p}}_{{{{f}}_{{i}}}}^r = {{Ap}}_{{{{f}}_{{i}}}}^r{{ = }}{{0}}$ |
式中:
${{A}} = {{{U}}_A}{{{\Sigma }}_A}{{V}}_A^{\rm{T}}$ |
式中:
选用欧洲机器人技术挑战赛(european robotics challenge, EuRoC)公开数据集[21]中的MH_05_difficult数据文件,将本文算法和双目ORB-SLAM进行对比测试,评估本文算法的精确性和有效性,其中本文算法滑窗内图像帧数目设为6帧,算法运行平台为配备Intel Core i7处理器,内存为8 GB的笔记本电脑。实验测试结果如图5~12所示,实验结果包括轨迹曲线、三维地图、位置绝对误差分量和姿态绝对误差分量;位置绝对误差和姿态绝对误差的统计结果如表1所示。
![]() |
Download:
|
图 5 运动轨迹 |
![]() |
Download:
|
图 6 稀疏三维地图 |
![]() |
Download:
|
图 7 横滚角绝对误差 |
![]() |
Download:
|
图 8 俯仰角绝对误差 |
![]() |
Download:
|
图 9 航向角绝对误差 |
![]() |
Download:
|
图 10 x轴位置绝对误差 |
![]() |
Download:
|
图 11 y轴位置绝对误差 |
![]() |
Download:
|
图 12 z轴位置绝对误差 |
从图5中可以看出,双目ORB-SLAM和本文算法都能有效估计载体位姿,且不发生显著漂移。从表1中可以看出,双目ORB-SLAM和本文算法的位置均方根误差分别为0.269 331和0.175 442 m,姿态均方根误差为1.591 809°和0.814 265°。由此可见,本文算法明显优于双目ORB-SLAM算法,其原因在于双目ORB-SLAM算法跟踪模块仅解算最新一帧图像对应的状态量,且精度有限;而本文通过引入滑窗思想,解算最新多帧图像对应的系统状态,同时采用了边缘化策略将其余状态量转换为先验测量信息,从而在保证算法实时性的基础上提高了系统的精确性。
![]() |
表 1 位姿误差统计结果 |
本文提出了一种基于滑窗非线性优化的双目视觉SLAM算法,主要包括:
1)在双目ORB-SLAM算法框架基础上,引入了滑窗思想,解算最新多帧图像对应的状态。
2)采用了边缘化策略将其余状态量转换为先验测量信息,从而保证了算法的精确性和实时性。
3)本文通过公开数据集测试实验,验证了算法的优越性。然而,本文双目视觉SLAM算法仅在PC(personal computer)端实现了实时定位与建图功能,未来可以考虑简化算法,将其移植到嵌入式系统或移动端应用中。
[1] |
SMITH R, SELF M, CHEESEMAN P. A stochastic map for uncertain spatial relationships[C]//International Symposium on Robotics Research, MIT Press, 1988: 467–474.
(![]() |
[2] |
权美香, 朴松昊, 李国. 视觉SLAM综述[J]. 智能系统学报, 2016, 11(6): 768-776. (![]() |
[3] |
刘浩敏, 章国锋, 鲍虎军. 基于单目视觉的同时定位与地图构建方法综述[J]. 计算机辅助设计与图形学学报, 2016, 28(6): 855-868. DOI:10.3969/j.issn.1003-9775.2016.06.001 (![]() |
[4] |
TJ LEE, CH KIM, DD CHO. A monocular vision sensor-based efficient SLAM method for indoor service robots[J]. IEEE transactions on industrial electronics, 2019, 66(1): 318-328. DOI:10.1109/TIE.2018.2826471 (![]() |
[5] |
JC TRUJILLO, R MUNGUIA, E GUERRA, et al. Cooperative monocular-based SLAM for multi-UAV systems in GPS-denied environments[J]. Srensors, 2018, 18(5): 1-24. (![]() |
[6] |
FORSTER C, PIZZOLI M, SCARAMUZZA D. SVO: fast semi-direct monocular visual odometry[C]//2014 IEEE International Conference on Robotics and Automation (ICRA), 2014: 15–22.
(![]() |
[7] |
CHOI H, YANG KW, KIM E. Simultaneous global localization and mapping[J]. IEEE/ASME transactions on mechatronics, 2014, 19(4): 1160-1170. DOI:10.1109/TMECH.2013.2274822 (![]() |
[8] |
S ZHENG, J HONG, K ZHANG, et al. A multi-frame graph matching algorithm for low-bandwidth RGB-D SLAM[J]. Computer aided design, 2016, 78(3): 107-117. (![]() |
[9] |
MATSUKI H, STUMBERG L, USENKO V, et al. Omnidirectional DSO: direct sparse odometry with fisheye cameras[J]. IEEE robotics and automation letters, 2018, 3(4): 3693-3700. DOI:10.1109/LRA.2018.2855443 (![]() |
[10] |
ZHANG G X, LEE J H, LIM J W, et al. Building a 3-D line-based map using stereo SLAM[J]. IEEE transactions on robotics, 2015, 31(6): 1364-1377. DOI:10.1109/TRO.2015.2489498 (![]() |
[11] |
SCARAMUZZA D, FRAUNDORFER F. Visual odometry: part I: the first 30 years and fundamentals[J]. IEEE robotics and automation magazine, 2011, 18(4): 80-92. DOI:10.1109/MRA.2011.943233 (![]() |
[12] |
DAVISON A J, REID I D, MOLTON N D, et al. MonoSLAM: real-time single camera SLAM[J]. IEEE trans pattern anal mach intell, 2007, 29(6): 1052-1067. DOI:10.1109/TPAMI.2007.1049 (![]() |
[13] |
GEORG KLEIN, DAVID MURRAY. Parallel tracking and mapping for small AR workspaces[C]//Proceedings of the 6th IEEE and ACM International Symposium on Mixed and Augmented Reality. NW Washington, DC, USA, 2007: 225–234.
(![]() |
[14] |
NEWCOMBE R A, LOVEGROVE S J, DAVISON A J. DTAM: Dense tracking and mapping in real-time[C]//IEEE International Conference on Computer Vision, Barcelona, Spain, 2011: 2320–2327.
(![]() |
[15] |
ENGEL J, SCHÖPS T, CREMERS D. LSD-SLAM: large-scale direct monocular SLAM[C]//European Conference on Computer Vision. Cham, Switzerlandi Spring, 2014: 834–849.
(![]() |
[16] |
MUR-ARTAL R, MONTIEL J M M, TARDÓS J D. ORB-SLAM: a versatile and accurate monocular SLAM System[J]. IEEE transactions on robotics, 2015, 31(5): 1147-1163. DOI:10.1109/TRO.2015.2463671 (![]() |
[17] |
RUBLEE E, RABAUD V, KONOLIGE K, et al. ORB: an efficient alternative to SIFT or SURF[C]//International Conference on Computer Vision. Bearcelona, Spain, 2011: 2564–2571.
(![]() |
[18] |
TRAJKOVI M, HEDLEY M. Fast corner detection[J]. Image & vision computing, 1998,16(2): 75–87.
(![]() |
[19] |
SIBLEY G, MATTHIES L, SUKHATME G. Sliding window filter with application to planetary landing[J]. Journal of field robotics, 2010, 27(5): 587-608. DOI:10.1002/rob.20360 (![]() |
[20] |
Huang G P, MOURIKIS A I, ROUMELIOTIS S I. A first-estimates Jacobian EKF for improving SLAM consistency[C]//xperimental Robotics. Berlin, Heidelberg, Springer, 2009: 373–382.
(![]() |
[21] |
M BURRI, J NIKOLIC, P GOHL, et al. The EuRoC micro aerial vehicle datasets[J]. International journal of robotics research, 2016, 35(10): 1157-1163. DOI:10.1177/0278364915620033 (![]() |