Home / 机器人经典基础 / PTAM:跟踪要及时,建图可以慢慢想

056|PTAM:跟踪要及时,建图可以慢慢想

总览 · 目录 · 上一篇:GMapping · 下一篇:iSAM

论文:Georg Klein、David Murray,Parallel Tracking and Mapping for Small AR Workspaces,ISMAR 2007,225–234。牛津大学作者全文;官方代码说明。以下依据十页原稿正文、图表与局限部分;代码说明仅用于核对版本差异,没有将后续实现的改进归入 2007 年论文。

先接住前作的问题

联合SLAM滤波常每帧一起更新位姿和地图,手持AR却更急需低延迟跟踪。PTAM拆开线程和关键帧节奏。

五个前置概念

五个前置概念:关键帧是被长期保存用于重建的代表视图;三角化从有基线的多视图对应恢复三维点;束调整联合优化相机与结构的重投影误差;鲁棒估计限制异常残差的影响;规范自由度指对整体坐标和尺度的某些变换不改变单目投影解释。

一、问题设定:每帧跟踪怎样不必等待全图束调整

把虚拟物体放在桌子上,摄像机移动时,它应当稳稳留在原地。系统必须迅速回答“相机现在在哪里”,又必须不断整理“桌面和周围物体在哪里”。前者每帧都要做,后者涉及许多历史图像,没必要每帧从头完成。

背景:位姿更新和全局解释不必共用时钟

传统 EKF 单目 SLAM 把相机与地图变量放在一个递推估计器里。完整相关性很有价值,但地图变大时更新成本会增长。若每帧都必须完成地图更新,最慢的步骤就决定显示是否流畅。

PTAM 的状态包含关键帧位姿 TiT_i 与三维地图点 PjP_j。输入是预先标定的单目图像流,输出是每帧六自由度位姿及稀疏三维点地图。不存在强化学习的动作、奖励和训练回合。AR 程序使用估计结果渲染,用户的相机运动提供观测基线。

单目图像不能恢复绝对尺度。第 6.1 节初始化把两幅图像的平移假定为 10 cm 来选定尺度,再检测主平面建立 AR 坐标。这个人为尺度约定不是传感器测得的真实十厘米,也不是单目系统突破了尺度不可观测性。

原论文中的“stereo 初始化”是同一台相机先后两帧形成的运动立体视觉,并非配置两台同步相机。用户按键记录第一帧,平移相机,再按键记录第二帧;五点法、RANSAC 与三角化建立初图。纯旋转不能提供恢复深度所需的平移视差。

二、拆开跟踪和关键帧建图的时钟

跟踪线程:地图先固定,只求当前相机

跟踪器预测相机位姿,把可能可见的地图点投影到当前帧,在图像金字塔里搜索对应的小图块。它使用 FAST 角点作为搜索候选,不是对每个像素进行稠密光流。

为了吸收快速运动,先在粗层搜索约 50 个点并更新位姿,再用更小搜索区域寻找最多约 1000 个点。图块可以根据视角做仿射变形;部分匹配进一步做逆组合亚像素对齐。粗层给捕获范围,细层补精度。

用统一教学记号写,观测像素为 uju_j,相机投影函数为 π\pi,位姿左乘增量为 exp⁡(δξ)\exp(\delta\xi):

ej=uj−π(exp⁡(δξ)TPj),min⁡δξ∑jρ(∥ej∥σj).e_j=u_j-\pi(\exp(\delta\xi)TP_j),\qquad \min_{\delta\xi}\sum_j\rho\left(\frac{\|e_j\|}{\sigma_j}\right).

δξ\delta\xi 是六维局部刚体运动参数;ρ\rho 是鲁棒目标,原文使用 Tukey biweight;金字塔层级 ll 的尺度对应 σj=2l\sigma_j=2^l。按尺度归一化,是因为粗层一个像素代表原图更大的位置不确定性。

第 5.4 节用迭代重加权最小二乘求位姿。鲁棒损失降低异常匹配的影响,却不能防止大量重复纹理一起支持错误位姿。匹配成功比例过低时停止插入关键帧;持续失败后转入重定位。

建图线程:只把值得保存的帧带进优化

新关键帧要求跟踪质量好、距离上次插帧足够久,并与已有关键帧有足够位置差异。论文采用超过二十帧的间隔条件之一;距离阈值还随场景深度变化。关键思想是保证新视角提供有用基线,静止时多存几百帧并不会凭空得到深度。

新地图点在关键帧间沿极线搜索并三角化。随后做束调整,同时改变相机位姿与地图点:

min⁡{Ti},{Pj}∑(i,j)∈Oρ(∥uij−π(TiPj)∥σij).\min_{\{T_i\},\{P_j\}}\sum_{(i,j)\in\mathcal O} \rho\left(\frac{\|u_{ij}-\pi(T_iP_j)\|}{\sigma_{ij}}\right).

O\mathcal O 是已有观测关联集合。相比仅更新当前相机,这个问题可以让历史相机和三维结构互相纠正;但它仍依赖匹配关联与良好初始化,重投影误差小不等于场景结构必然真实。

局部束调整优化最新关键帧和地图中最近的四个关键帧,以及它们看见的点;其他看见这些点的关键帧保持位姿固定,却继续提供观测约束。这不是简单截断到最近五个时间帧,也不是丢弃窗口之外的全部观测。

有空闲时进行全局束调整,并重新检查旧关键帧中的观测关联。新关键帧到来会打断低优先级工作。错误匹配可以重新测量,仍异常才删除;这是数据关联的修复,不只是数值优化。

双线程没有消灭工作量,而是改变了截止时间

教学预算:相机30帧/秒,每帧约33毫秒;跟踪用8毫秒、一次地图优化用80毫秒。若每帧串行执行,两者88毫秒无法跟上;若关键帧每0.2秒才加入,建图平均每秒需5次、共400毫秒,另一核便可能处理完。这里仍要保证共享地图版本一致,且突发关键帧不能无限积压。

原文第2节更深的理由是信息冗余:相机静止时许多图像并未增加新几何,没必要每帧更新全部地图。地图线程可以做更昂贵BA,跟踪线程则使用现有地图维持低延迟;这不是统计独立的两个估计器。作者原文

本篇与EKF-SLAM是估计架构的平行路线,调用五点法作为初始化模块;后作ORB-SLAM继续发展关键帧跟踪与建图分工,并补上更完整的重定位和回环。论文标题限定小型AR工作空间,不能由局部低延迟推出无界地图可扩展性。

异步分工使跟踪使用现有地图,不必等待全部历史优化。下面沿共享地图的读写检查新关键帧何时进入结果,再读建图规模与跟踪帧率。

三、更新共享地图,用线程分工检查延迟来源

初始化:用户平移相机,选择两帧;估计相对位姿并三角化
         束调整初图,约定尺度和世界坐标

跟踪线程,每帧执行:
    建立金字塔和角点候选;预测当前位姿
    粗层匹配少量地图点,优化位姿
    精细匹配更多地图点,鲁棒优化最终位姿
    判断跟踪质量;失败则重定位
    质量好且基线、时间条件满足时,把关键帧交给建图线程
    输出位姿供 AR 渲染

建图线程,异步执行:
    优先接纳新关键帧、补充观测和三角化新点
    执行局部束调整
    有余暇时执行全局束调整、重新测量旧观测
    更新共享地图;新关键帧到来可中断低优先级任务

这是教学流程,不包含并发锁和内存一致性的具体实现。两个线程共享几何结果,概念上的任务分离并不代表可无约束地并发改写同一地图。

一个理解并行的例子

以下为教学构造。摄像机每 33 ms 到一帧,位姿跟踪需要 20 ms,全局建图需要 400 ms。如果串行要求每帧都完成两者,显示会明显卡顿;拆开以后,跟踪可以在旧地图上持续运行,建图每隔一段时间改进地图。

但假如用户每 100 ms 都进入全新区域,而后台每 400 ms 才能处理一个关键帧,队列会增长。前台即使计算很快,也可能因没有足够新地图点而失去支撑。这个例子解释了为什么论文区分“跟踪还保持帧率”和“地图已经难以继续扩展”。

四、读桌面AR与有真值合成比较

Fig. 4:点数增长与每帧跟踪耗时同图呈现:红色尖峰对应特定跟踪事件,平均时间不能代表每帧延迟
原论文结果图/表摘引:Georg Klein、David Murray(2007),Fig. 4,PDF 第 7 页;核对原文。原版权保留。

读图:点数增长与每帧跟踪耗时同图呈现:红色尖峰对应特定跟踪事件,平均时间不能代表每帧延迟。关键帧建图与实时跟踪分离,也并不保证耗时永远恒定。

实验设计与比较口径

项目 设定与要验证的问题
实拍 手持相机桌面视频 1656 帧;观察探索、快速运动、接近物体和丢失后恢复
相机与资源 640×480、30 Hz 输入;Intel Core 2 Duo 2.66 GHz、Linux、C++,两线程利用双核
合成比较 600 帧、600×480,两面垂直纹理墙;虚拟轨迹总长 18.2 m,提供几何真值
基线 基于 SceneLib、包含 JCBB 等增强的 EKF-SLAM 实现
指标 跟踪用时、关键帧/地图点规模、束调整用时、对齐后的轨迹偏差、AR 可用性展示
对齐 两种轨迹都先优化六自由度刚体变换和一个尺度,再与真值比较
参数与重复 第 7 节说明结果使用相同可调参数;没有给出多随机种子的统计置信区间
非直接等预算 PTAM 的跟踪时间不包含异步建图全部工作;EKF 的逐帧时间包含跟踪与建图

同一参数集有助于减少逐场景手工调整,但实拍主要局限在单个办公室,不能据此声称跨建筑、跨天气或长期运行泛化。合成场景提供真值,却只覆盖了一种持续探索的轨迹模式。

读懂五组结果

图 3、4:大多数帧约 20 ms,但不是固定上界。 桌面序列最后为 57 个关键帧、4997 个点。重定位阶段可到每帧 90 ms;大量点进入视野时正常跟踪也可到约 30 ms。曲线说明典型跟踪预算较稳定,同时揭示失效恢复开销。

原论文 Figure 3:桌面地图与选取的关键帧
原论文图摘引:Klein、Murray(2007),Figure 3,PDF 第 7 页;核对原文。点击图片可放大。原版权保留。

读图:上排从两个角度显示地图点和相机位姿,下方排列实际关键帧;关键帧集合服务于地图优化,并非视频每一帧都进入同样的优化。

表 1:主要时间花在寻找对应。 4000 点地图的典型跟踪总计 19.2 ms,其中图块搜索 9.8 ms,位姿迭代 3.7 ms。优化线性代数不是唯一瓶颈;把求解器换快,并不能直接消除搜索成本。

表 2:异步没有让全局优化变成常数时间。 从 2–49 个关键帧到 100–149 个,全局束调整的典型均值从 380 ms 到 6.9 s,局部束调整从 170 ms 到 440 ms。第 7.2 节解释,地图大时全局优化往往在探索中被中断,只有停下来或回到熟悉区域才有机会收敛。这里“全局”指优化变量范围,不指找到全局最优解。

图 5:合成序列上的精度差异很大,但条件明确。 作者报告对齐后相对真值的标准差为 EKF 135 mm、PTAM 6 mm;135/6=22.5 是这一个统计量的比值。PTAM 有约 6600 个点且含一些离群点,EKF 约 114 个点且看上去均为内点。不能把点多解释成所有点更可靠,也不能把这个比值推广为实拍误差总会降低 22.5 倍。

原论文 Figure 5:合成序列中PTAM与EKF-SLAM的地图及轨迹
原论文图摘引:Klein、Murray(2007),Figure 5,PDF 第 8 页;核对原文。点击图片可放大。原版权保留。

读图:先看两种方法的地图表示,再看右侧与真值对齐的轨迹;这组受控实验不能直接覆盖任意真实场景和快速运动。

图 6、7:交互演示补充可用性,不替代误差统计。 跨尺度标签与桌面 AR 表明相机位姿能支撑视觉叠加;但没有量化长期漂移、遮挡准确率或用户成功率。图中虚拟对象看起来稳定,不等于已有完整场景几何与物理交互能力。

尚未内嵌:图 7。剩余两张 AR 应用画面含第三方角色素材,与当前跟踪计时、尺度跨度和合成对照的核心评论关联较弱;暂保留来源,不推断论文许可覆盖角色画面。

原论文 Figure 6:由键盘近景到整间房的跨尺度跟踪
原论文图摘引:Klein、Murray(2007),Figure 6,PDF 第 9 页;核对原文。点击图片可放大。原版权保留。

读图:四张画面从近到远仍显示同一空间中的增强标记;它展示尺度跨度下的跟踪能力,不等于没有模糊或遮挡限制。

五、限制地图增长、初始化与静态纹理条件

真正重要的改变是估计系统的组织方式:密集一些的特征、关键帧优化、按优先级异步处理,使前台跟踪可以利用后台逐渐变好的地图。它为后续视觉 SLAM 的跟踪、局部建图、回环等模块化设计提供了清晰范式。

代价包括第二个计算线程、逐渐增长的建图延迟、没有方便直接访问的完整协方差,以及局部地图点质量不齐。追求流畅跟踪是把部分瓶颈转移到探索速度,而不是删除了瓶颈。

作者在第 8 节明确列出:快速运动模糊导致角点消失;重复结构使错误关键帧污染地图;初始化失败需要用户重来;场景永久变化会导致失败;点云缺乏表面和遮挡理解。系统也不是为大回环设计的,不能把后续 ORB-SLAM 的完整回环能力归给 PTAM。

官方发布说明另外指出,参考实现使用 ECCV 2008 的重定位器,以及 Faugeras–Lustman 初始化器替代五点法。阅读源码时必须先确认版本;“论文说五点、代码不像五点”不必然是读错算法。

六、追问:跟踪帧率保持稳定,为什么仍要报告关键帧建图的滞后?

跟踪帧率保持稳定,为什么仍要报告关键帧建图的滞后?

参考答案:前端可以继续使用已有地图,而新点三角化与全局优化尚未完成;帧率并不反映地图更新是否跟上场景扩展。应同时记录跟踪质量、建图耗时和地图规模,并检查异步共享结果的使用条件。原文小范围AR设定不能直接当长期大地图保证。

七、给关键帧分工补上长期地图能力

八、自测与参考答案

1.局部束调整只优化五个关键帧,为什么仍要使用其他关键帧的观测?

答: 被优化的地图点可能也在历史关键帧中出现。那些固定相机的观测能约束点,避免局部结构只为迎合最新视图而漂移。固定变量并不等于删去相关残差;优化变量集合与参与约束的观测集合是两回事。

2.论文初始化“假设平移 10 cm”后,输出是否就是可靠的公制地图?

答: 只有真实平移符合该假设时尺度才相应正确。这只是给单目不可观测的整体尺度选一个数,图像本身没有验证真实基线。合成实验还对估计轨迹进行尺度对齐,因此其 6 mm 结果不能证明实拍直接输出准确绝对尺度。

3.把 PTAM 的 20 ms 与 EKF 的 40 ms 相除,能否说整个 SLAM 系统计算量减半?

答: 不能。PTAM 的这个时间主要是跟踪线程,建图在另一核异步进行;EKF 的帧时间包含建图。比较交互延迟可以有意义,比较总计算量则还要加后台开销、处理吞吐和硬件资源,并统计恢复阶段与探索阶段,而不只挑普通帧。