Home / 机器人经典基础 / ORB-SLAM2:把单目、双目和深度观测接入同一套 SLAM 后端

089|ORB-SLAM2:把单目、双目和深度观测接入同一套 SLAM 后端

返回总览 · 上一篇:COLMAP · 下一篇:SE-Sync

论文:Raúl Mur-Artal、Juan D. Tardós,ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras,2016 年首次公开,2017 年发表于 T-RO。论文 v2 · 官方代码。

先接住前作的问题

ORB-SLAM已经有回环和恢复,但单目初始化与尺度仍是瓶颈;本篇直接继承其架构,把双目与 RGB-D 深度转为统一观测,并增加异步全局 BA。

五个前置概念

  1. 视差:校正双目中左右对应位置的水平差,与深度成反比。
  2. 公制尺度:重建长度对应实际单位,需要已知基线或深度等信息。
  3. 共视图:连接观察到共同地图点的关键帧。
  4. 重定位:跟踪中断后,相对已有地图重新估计位姿。
  5. 局部与全局 BA:调整的状态范围不同,计算频率和代价也不同。

一、问题设定:双目和RGB-D怎样接入原有单目SLAM架构

单目 ORB-SLAM 已能跟踪、建图、回环和重定位,但一张单目图像不能直接给出深度和公制尺度。双目或 RGB-D 可以更早得到三维点,却也带来不同的观测形式和噪声。

问题定义与背景

这是在线定位与建图系统,不是强化学习。输入分别可以是单目、校正后的双目或对齐深度图的 RGB-D;输出是相机位姿与地图点。这里“三种输入”是系统支持不同模式,不表示随时把任意三种设备自动混合标定。

单目模式继承前作的多视图初始化与尺度问题;双目和 RGB-D 以已标定的基线或深度尺度提供公制约束。一旦深度尺度标定偏了,地图也会受影响。因此“尺度可观测”不等于“尺度数值永远准确”。

长期漂移需要与旧地图重新建立联系。纯 VO 只向前累计局部变化;SLAM 通过回环与地图复用纠正累计误差。反过来,错误地点识别也可能污染地图,所以外观匹配之后必须几何验证。

二、统一观测表达,区分近点远点的信息

ORB-SLAM2 将这些输入统一为单目二维观测或双目三维观测。RGB-D 深度被转换成“虚拟右图坐标”,后端继续使用特征匹配、局部 BA、回环修正和全局 BA。近点和远点分开处理,让系统同时利用近点的平移信息与远点的旋转信息。

1. 虚拟双目观测

双目关键点可写为 (uL,vL,uR)(u_L,v_L,u_R),校正后的左右对应点位于同一扫描线。RGB-D 特征的深度 dd 可以转成:

uR=uL−fxbd.u_R=u_L-\frac{f_xb}{d}.

fxf_x 为焦距,bb 是等效基线。它让同一后端以相同形式处理深度,但虚拟右坐标并非真的拍到一张右图。噪声模型和深度尺度仍需要正确设定;深度无效的特征可保留为单目观测,不能当零深度点使用。

虚拟双目还暴露一个容易忽视的统计关系。令 k=fxbk=f_xb、深度为 dd,假设左像素误差 ϵu\epsilon_u 与深度误差 ϵd\epsilon_d 独立,方差分别为 σu2,σd2\sigma_u^2,\sigma_d^2。一阶展开给出 ϵuR=ϵu+(k/d2)ϵd\epsilon_{u_R}=\epsilon_u+(k/d^2)\epsilon_d,故左、右虚拟坐标的协方差为

Cov⁡ ⁣(uLuR)=[σu2σu2σu2σu2+(k/d2)2σd2].\operatorname{Cov}\!\begin{pmatrix}u_L\\u_R\end{pmatrix}=\begin{bmatrix}\sigma_u^2&\sigma_u^2\\\sigma_u^2&\sigma_u^2+(k/d^2)^2\sigma_d^2\end{bmatrix}.

原创手算。 取 fx=500f_x=500 px、b=0.1b=0.1 m、d=2d=2 m、σu=1\sigma_u=1 px、σd=0.04\sigma_d=0.04 m,则矩阵为 [1111.25]\begin{bmatrix}1&1\\1&1.25\end{bmatrix} px²。视差 uL−uRu_L-u_R 的方差是 1+1.25−2=0.251+1.25-2=0.25 px²,而把两项误认为独立会得到 2.25 px²。这里说明的是由共享左坐标产生的相关性,不是宣称原始 ORB-SLAM2 实现采用了这张完整协方差矩阵。

原文 III-A–B用虚拟坐标统一几何投影,并采用特征尺度相关的优化权重;“统一表示”本身不证明各种深度传感器具有相同噪声模型。下文 Freiburg2 的深度尺度补偿也属于另一层系统误差:再精细的随机协方差都不能自动纠正整体深度乘了错误比例。

2. 近点与远点

论文第 III-A 节采用约四十倍基线的深度阈值。近点的视差较可靠,对尺度和平移有帮助;远点视差小,旋转信息仍有价值,但单帧深度不稳定,需要更多视图支持。

对双目公式 Z=fxb/δZ=f_xb/\delta 求导,可以得到教学近似 ∣ΔZ∣≈Z2∣Δδ∣/(fxb)|\Delta Z|\approx Z^2|\Delta\delta|/(f_xb)。同样一个像素的视差误差,对远点造成更大的深度误差。这解释为何不能把所有点视为等精度,也说明“四十倍”是工程阈值而非普遍物理常数。

3. 三种 BA 的区别

跟踪中的 motion-only BA 固定地图点,只优化当前位姿;局部 BA 同时优化邻近关键帧和地图点,并让相关外部关键帧作为固定约束;全局 BA 在回环后优化整张地图,固定原点以消除规范自由度。

共同目标是鲁棒重投影误差:

min⁡R,t∑kρ(∥xk−πm/s(RXk+t)∥Σ−12).\min_{R,t}\sum_k\rho\left(\|x_k-\pi_{m/s}(RX_k+t)\|_{\Sigma^{-1}}^2\right).

πm\pi_m 输出二维单目坐标,πs\pi_s 输出三维双目坐标;ρ\rho 为 Huber 代价。这个公式是当前位姿优化形式,局部或全局 BA 还把相应地图变量放入优化。BA 的非线性局部求解不自动获得全局最优。

4. 回环之后,全局 BA 不能阻塞一切

系统先验证回环、融合重复点并优化位姿图,再用独立线程运行全局 BA。运行期间新关键帧仍可能加入,所以 BA 完成后需通过生成树传播修正;若又发现新回环,则中止旧优化并启动新的修正过程。

双目/深度下尺度可观测,相关回环处理采用刚体变换;单目仍要考虑尺度。不能因为软件名相同,就把两种模式的数学自由度混为一谈。

5. 定位模式与伪代码

定位模式关闭建图和回环线程,主要使用既有地图匹配,必要时重定位;进入未建图区域时还利用相邻帧生成的 VO 点。前者约束相对旧地图的累计漂移,后者仍可能漂移。“零漂移”应理解为持续相对既有地图定位,而非任何时刻绝对误差为零。

虚拟右坐标统一几何表达,近远点和传感器噪声仍提供不同强度的信息。下面检查观测到BA的接口,再按模式读米制定位结果。

三、运行局部与全局优化,检查米制尺度来源

输入:单目、双目或 RGB-D 流以及相应标定
提取 ORB;生成单目观测和真实/虚拟双目观测
按输入模式初始化地图
每帧:
    预测位姿,匹配局部地图,进行 motion-only BA
    若跟踪失败,检索历史关键帧并几何验证重定位
    若允许建图且需要新关键帧:
        插入关键帧,生成或三角化点,局部 BA,剔除冗余
    回环线程验证地点重访:
        融合地图并进行位姿图修正
        后台启动全局 BA;必要时中止旧任务
        完成后向新加入的关键帧和点传播修正
输出:相机轨迹与稀疏地图

这是教学流程。优化目标、系统机制和实测误差是三层概念;线程多也不是算法自动获得低延迟的证明。

具体例子与前置概念

自构例子,未运行。 取焦距 500 px、基线 0.1 m。2 m 处视差 25 px,20 m 处仅 2.5 px;0.5 px 误差对应的一阶深度误差约为 0.04 m 与 4 m。远点深度不准仍可对朝向变化提供约束,解释了“不丢掉所有远点,也不把远点当可靠近点”。

四、按传感器模式读跨场景实验

五组关键结果

表 I,KITTI 01。 双目系统能处理前作单目失败的高速公路序列;相对平移误差为 1.39%,Stereo LSD-SLAM 为 2.36%。但绝对平移 RMSE 为 10.4 m,对照为 9.0 m。两个指标给出不同排序,不能只挑一项说全面更准。KITTI 00 相对平移 0.70% 也高于对照 0.63%。

图 3、5:深度与尺度。 近点短暂可见时,双目较早初始化点有帮助;远点辅助旋转。作者用 KITTI 08 对比单目尺度漂移与双目轨迹,但它不是把传感器完全相同后只移除某一个代码模块的消融。

原论文图3:KITTI 01中近点和远点的彩色特征跟踪画面
Raúl Mur-Artal、Juan D. Tardós(2016),图 3,PDF 第 6 页;原文与图注。原版权保留。

读图:绿色点以立体基线倍数定义为近点,蓝色点更远;颜色并非跟踪正确与错误的标签。

原论文图5:KITTI 08单目与双目估计轨迹分别对照真值
Raúl Mur-Artal、Juan D. Tardós(2016),图 5,PDF 第 7 页;原文与图注。原版权保留。

读图:黑色为估计轨迹、红色为真值;左右使用不同传感信息,不能解释成只替换了优化器。

表 II:EuRoC 并非全部成功。 V1_02 为 0.020 m,对照 0.074 m;MH_04 为 0.119 m;V2_03 明确失败,原因是严重模糊。因此“厘米级”有具体序列条件,不能把失败行从总体稳健性叙述中删去。对照仅部分序列有数值,“—”不是零误差。

表 III:RGB-D 的优势与例外。 fr3/office 为 0.010 m、ElasticFusion 0.017 m;fr3/nst 则为 0.019 m、ElasticFusion 0.016 m。本方法不总领先。fr2/xyz 的 0.004 m 还应连同深度尺度补偿一起理解,不能单凭它证明稀疏 BA 普遍胜过稠密方法。

表 IV:实时跟踪不等于全图每帧更新。 EuRoC、KITTI、TUM 示例平均跟踪耗时分别 41.66、49.47、25.58 ms;TUM 示例全局 BA 本身约 1640.96 ms,在后台单次执行。平均跟踪低于相机周期支持实时运行,但误差条与单次记录不构成最坏延迟保证。

另一个限制是 KITTI 09 的末尾回环没有检测到;不能写成所有存在回环的序列都成功闭环。证据见原文第 IV 节。

Table I:同一序列中同时检查相对平移误差和绝对 RMSE,两种指标可能给出相反排序
原论文结果图/表摘引:Raúl Mur-Artal、Juan D. Tardós(2016),Table I,PDF 第 6 页;核对原文。原版权保留。

读图:同一序列中同时检查相对平移误差和绝对 RMSE,两种指标可能给出相反排序。KITTI 01 说明双目可完成单目困难场景,但并非每一列都比对照更低。

第二代系统的双目/RGB-D 地图有公制信息;ORB-SLAM3 的视觉惯性、多地图及鱼眼能力属于后作。

项目 原文报告
数据集 KITTI 11 条公开真值序列、EuRoC 11 条、TUM RGB-D 7 条选定序列,共 29 条评测输入
传感器 KITTI、EuRoC 使用双目视觉;EuRoC 虽提供 IMU,但本系统此处没有使用
计算 i7-4790、16 GB RAM;每序列运行五次,报告轨迹精度中位数
对照 Stereo LSD-SLAM、ElasticFusion、Kintinuous、DVO-SLAM 等,取原作者发表结果,并非全部同机重跑
精度指标 KITTI 同时报相对平移/旋转误差与绝对平移 RMSE;其他表主要报平移 RMSE
特殊处理 作者对 Freiburg2 深度约 4% 尺度偏差做补偿,承认这可能部分解释较好结果
时间统计 表 IV 一般任务为均值±两倍标准差;每条计时序列只有一次的大回环/全局 BA 任务报单次时间

五次同序列运行反映多线程非确定性,不等于五个独立环境。深度补偿与基线配置差异也限制了将全部改善归因于 BA 的强因果结论。

五、保留纯单目尺度、标定与稀疏地图边界

真正贡献是把多传感器视觉模式、地图复用及异步优化组织为可用系统,延续前作统一 ORB 特征的设计。它并不声称发明了双目、BA 或近远点区别,背景明确承认前人。

作者把更强模糊鲁棒性、全向或多相机、大规模稠密融合列为未来工作。我的分析是,地图复用需要环境和外观足够稳定,动态物体或长期场景变化可能破坏关联;公制深度也不能解决所有低纹理与遮挡。可靠的定位模式仍需检测何时已退化为会漂移的局部 VO。

六、追问:把RGB-D深度转成虚拟右图坐标后,是否意味着其噪声就与真实双目相同?

把RGB-D深度转成虚拟右图坐标后,是否意味着其噪声就与真实双目相同?

参考答案:统一的是观测表达和几何接口,不是传感器的误差生成机制。仍须按深度来源、距离与标定条件设置权重并验证。比较时也应区分双目、RGB-D和纯单目模式,避免把一种输入的尺度能力归给全部模式。

七、加入惯性和多地图,或转向稠密表面

八、自测与参考答案

问题 1:RGB-D 的虚拟右坐标是否意味着凭空增加了一个独立测量?

答案: 不是。它只是把原深度测量换一种参数表达,信息量来自原始深度。必须同步转换噪声含义,不能当作又获得一台独立相机。

问题 2:为什么论文平均跟踪约 26 ms,却允许全局 BA 超过一秒?

答案: 两者在不同线程、不同频率执行。跟踪使用当前地图继续定位,全局 BA 后台求解并在完成后传播修正;一秒级全局任务不等于每帧都阻塞一秒,但仍需关注更新与并发开销。

问题 3:如何解释“零漂移定位”?

答案: 在持续匹配稳定旧地图时,不会像无地图 VO 那样无界累积相对误差;但地图可能已有误差,测量有噪声,未建图区域也仍会漂移。它不是绝对位置始终完全正确的保证。