构建室内导航系统

想象一下在大型企业园区、地下仓库或机场中导航。一旦你走到混凝土屋顶下,标准 GPS 就会失效。LiDAR 传感器可以解决这个问题,但它们成本数千美元且消耗大量电力,限制了轻型机器人的实用性。如果你能仅用一个廉价摄像头和实时 GPU 后端实现厘米级室内定位呢?

在这篇文章中,我将带你了解我们如何构建了一个基于层次视觉的空间定位和跟踪系统。通过将 Meta 的 DINOv2 与闪电般快速的 XFeat 局部匹配模型和定制的时空门控过滤器相结合,我们设计了一个实时视觉定位引擎,可以在标准桌面电脑上流畅运行。

以下是我们构建它的具体方法,为什么我们放弃了 SIFT 等经典计算机视觉基线,以及我们如何解决了视觉导航中最难的问题之一:感知别名

1、核心架构:两阶段视觉流水线

系统采用实时摄像头流,并估计其相对于预映射工作空间的精确坐标位置(X、Y、Z)和旋转角度(横滚、俯仰、偏航)。为了使系统适合实时操作,定位分为两个阶段:全局检索(粗略猜测)和局部特征对齐(精确定位)。

1.1 DINOv2 全局检索(粗略猜测)

在大型建筑的整个 3D 点云中搜索每一帧在计算上是昂贵的。为了减少搜索空间,系统使用 Meta 的 DINOv2,一个自监督视觉 Transformer。

当捕获实时摄像头帧时,DINOv2 提取其全局 CLS(分类)token 描述符。我们使用 FAISS(Facebook AI 相似性搜索)查询此描述符与离线数据库中的预映射图像位姿,以执行 O(1) 的即时相似性检查。

在毫秒内,系统将我们的搜索空间从数千个可能缩小到 Top-K 最相似的候选帧(例如,"你位于东大厅接待台附近的某个地方")。

1.2 XFeat 局部匹配(厘米精度)

一旦我们有了候选帧,我们就需要将摄像头定位到精确的厘米级别。这就是 XFeat(加速局部特征)发挥作用的地方。

XFeat 在我们的实时帧上运行,并识别出独特、稳健的像素地标(标志的角落、窗框的边缘)。它将每个关键点与 64 维描述符向量关联。然后我们将这些实时关键点与我们 COLMAP 3D 重建地图中预保存的关键点进行匹配。

通过将实时 2D 关键点(u、v)与其在数据库中匹配的物理 3D 世界坐标(Xw、Yw、Zw)对齐,我们建立了一组数学约束。

2、从像素到数学:RANSAC 和 PnP 求解器

下一步是将匹配的图像点转换为物理摄像头位置。系统将 2D-3D 匹配输入到 **RANSAC(随机采样一致性)**循环内的 **PnP(透视 n 点)**求解器中。

2.1 求解逆问题

如果你知道摄像头的光学参数(K)、房间中物理地标的 3D 坐标,以及这些地标在摄像头像素网格上的确切位置,PnP 使用线性代数(特别是奇异值分解)来求解缺失的变量:旋转(R)和平移(T)。

2.2 用 RANSAC 对抗噪声

特征匹配可能产生错误的对应关系。RANSAC 通过选择匹配点的随机子集、计算临时摄像头位姿并根据所有其他匹配进行验证来处理这个问题。只有具有最高"一致性"(内点)的位姿被保留。不正确的匹配(外点)被丢弃。

3、闭环:使用 A* 的动态路径规划

计算我们的厘米级坐标只是完成了一半。要作为功能性的室内导航器,我们的系统必须使用这些实时坐标来引导用户或机器人沿着安全、无障碍的路线到达指定目的地。

我们通过将物理 PnP 坐标投影到 2D 占用网格并执行实时 A(A 星)寻路算法*来弥合这一差距。

3.1 寻路背后的数学

A* 算法通过评估坐标空间并找到当前位置和目标之间的最短路径来工作。它通过考虑实际行驶的物理距离(g 成本)和剩余距离的启发式估计(h 成本)来实现。对于每个节点 n,A 算法计算以下值:

f(n) = g(n) + h(n)

  • 其中 g(n) 是从起始视觉位置到节点 n 的精确物理距离。
  • 其中 h(n) 是启发式成本,使用从节点 n 到目标目的地的欧几里得(直线)距离估计。

通过优先处理具有最低 f(n) 分数的节点,算法避免了向错误方向探索空旷空间,在毫秒内计算出数学上最短的路径。

4、突破:解决相同物体幻觉问题

我们必须解决的最大挑战之一是感知别名。

想象一下在企业办公室中行走,大厅、自助餐厅和会议室中挂有多个相同的"CARNOT RESEARCH"标志。如果你的摄像头指向其中一个,DINOv2 和 XFeat 会感到困惑。从视觉上看,这些帧看起来完全相同。这会导致你的跟踪点在地图上疯狂地传送。

为了解决这个问题,我们在定位后端引入了马尔可夫时空门控过滤器

4.1 利用时间和物理原理

我们意识到,虽然视觉数据可能说谎,但物理原理不会。以人类速度移动的摄像头无法在几分之一秒内物理传送 40 米。

我们构建了一个轻量级历史数据库(滑动窗口),跟踪我们最后一个受信任的物理位置、当前时间戳和摄像头的最大物理速度限制(Vmax)。在信任候选匹配之前,我们从数学上评估其物理可能性。

4.2 空间验证逻辑

时空门控过滤器只需执行五个简单的逻辑步骤:

  1. 历史日志:我们维护一个滑动记忆窗口,包含我们最近 N 个高置信度物理坐标及其精确时间戳。
  2. 距离查询:当 DINOv2 返回候选匹配时,我们计算从最后已知位置到此新候选位置的直线物理距离。
  3. 速度测试:我们将该距离除以经过的时间,以计算执行该跳转的所需速度
  4. 指数分数惩罚:如果所需速度超过我们的物理限制(Vmax),我们根据传送的不可能程度以指数方式惩罚候选置信度分数:

5. 状态反馈循环:如果速度在逻辑参数内,我们验证坐标,更新视觉跟踪界面,并将坐标推送到历史日志中,作为下一次验证的参考帧。

通过应用此过滤器,重复的视觉地标被中和。不正确的数据库候选被立即惩罚,我们的跟踪点保持在其真实物理路径上。

5、性能:SIFT 与 XFeat

当我们设计第一个原型时,我们使用经典的 SIFT(尺度不变特征变换)算法来执行局部特征匹配。SIFT 在计算机视觉界曾是标准,但它对我们的应用程序有一些严重的性能影响:

  • CPU 瓶颈:SIFT 在 CPU 上运行。这迫使我们的应用程序在 GPU(用于 DINOv2)和 CPU 之间不断传输大量图像数据。
  • 延迟:SIFT 特征匹配每帧需要高达 400 毫秒,将跟踪器限制为迟缓的更新。

通过将流水线升级到 XFeat,我们实现了真正的 GPU 加速。XFeat 在 GPU VRAM 内的 PyTorch 张量上原生执行特征提取和描述符匹配。

6、结束语

通过结合 DINOv2 的结构表示、XFeat 的轻量级局部匹配能力,以及对物理限制的基本理解,我们构建了一个直接与昂贵的基于硬件的跟踪系统竞争的室内导航系统。

构建空间系统不再仅仅是将原始感官输入馈送到神经网络并期望获得最佳结果。真正的魔力发生在我们设计智能视觉层次结构并用经典几何算法和简单物理定律加强它们的时候。


原文链接:Spatial Intelligence for Indoor Navigation Systems: Combining DINOv2, XFeat, and a Dash of Physics

汇智网翻译整理,转载请标明出处