Type 1 · Directly applicable 证据 A 收录
PadLoc: Training-Free Floor-Plan Localization by Sparse Geometric Matching
发布 · 收录于 2026-11-05
定位“我在平面图的哪里”不需要学习型的稠密 (x, y, θ) 网格滤波器:用墙体主方向缩小朝向、用掩码相关打分、再用少量高斯假设跟踪,就能同样准甚至更准、更省。
- 任务
- 已知 2D 平面图下的全局定位(floor-plan localization)
- 数据
- Gibson、Bonn LiLocBench、Hilti-Trimble 工地
- 传感器
- 单目/RGB-D/2D LiDAR/鱼眼相机 + 里程计,可换
- 代码
- 已开源(github.com/mbookhahn/padloc)
- 主结果
- Bonn 池化 SR@1m 0.56/0.71/0.79 vs UnLoc 0.30/0.49/0.46
证据等级 A · 真机 + 多基准 + 消融 (A 真机 + 多基准 + 消融 / B 仿真充分 / C 单一基准或无代码)
动机
问题:机器人拿着一张现成的楼层平面图(只画了墙),要知道自己在图上哪里、朝哪个方向。平面图便宜、长期不变、不怕光照和外观变化,很适合做长期定位的地图。
现有方法卡在哪:F3Loc、UnLoc 这类方法先用网络从图像预测每一列的深度,再在整张图的 (x, y, θ) 稠密网格上做贝叶斯滤波(Bayes filter,按概率一步步更新“我可能在哪”)。这样很稳,但网格很大(UnLoc 在 GPU 上要 8–147 MB),换楼要重新预计算,而且后端和某一种深度网络绑在一起 → P.1、P.8。
为什么难:单帧看到的墙很少,很多位置都“长得像”;朝向又是连续的,要逐角度搜索,代价随地图面积线性增长。
方法
- 1攒窗口5 帧深度+里程计拼成局部扫描
- 2猜朝向墙体角度直方图对齐,约4个候选
- 3相关打分掩码 NCC 在全图上滑动打分
- 4多假设留前10个峰,高斯混合跟踪
- 5共识定锚所有窗口得分叠加选全局位置
比喻:像拿一张撕下的描图纸(你走过时看到的墙和空地)在整张平面图上滑来滑去找最吻合的位置。关键是:只比较你真正看到的部分,没看到的地方不算分。
模块 1:朝向只剩几个候选。室内墙大多互相垂直。PadLoc 把看到的墙段和平面图的墙段各做一个“墙角度直方图”,两者对齐就得到少数几个朝向候选(再加上各自 180° 的镜像),不再对 36 个角度逐个搜索 → P.3。
模块 2:掩码归一化互相关(masked NCC)。NCC 是衡量两张图相似度的标准方法。这里加了掩码:撞到的墙权重大(55),看到的空地如果和图上的墙重叠就扣分,没看到的格子直接不参与。全部用 FFT(快速傅里叶变换)一次算出整张图上每个平移的得分 → P.3 式 (1)。
模块 3:CONS 后端。每个窗口只保留得分图里前 K=10 个峰,作为一组高斯候选;一个移动的高斯混合贝叶斯滤波器(GM-BF)用里程计把它们往前推,并用马氏距离门限(gate)挡掉离当前主假设太远的峰。滤波器只负责“窗口之间的相对位置”,真正的绝对位置由“共识”决定:把所有窗口的原始得分图按相对位移对齐后加起来,最高点就是锚点 → P.3–P.5。状态只有一个 560 字节的混合和一个累加图,不随轨迹变长 → P.8。
实验
本文方法 对比方法 · 数据来源:Table 4, P.7
本文方法 对比方法 · 数据来源:Table 1, P.5
本文方法 对比方法 · 数据来源:Table 3, P.6
指标:last-10 SR@1m(最后 10 帧都在 1 m 内才算成功,越高越好);工地数据用在线 SR@2m(全程每个输出位姿在 2 m 内的比例,越高越好);RMSE 误差越低越好。
Gibson(仿真照片场景,9 个场景):固定每个对手的深度输入,只换后端。用 UnLoc 的深度时,PadLoc 在线版在每个轨迹长度都不低于 UnLoc 在线滤波;离线版从 T=35 起不低于 UnLoc 的离线精修。作者还发现 UnLoc 报告的“精修提升”其实全部来自读出方式的变化 → P.5 表 1。但在 T≥35 时 UnLoc 更精确(全体中位误差 0.11–0.12 m vs 0.15–0.19 m)→ P.6 表 2。
Bonn(真实公寓,有家具变化和行人):同一单目结构深度、同一地图下,PadLoc(轮式里程计)池化 SR@1m 为 0.56/0.71/0.79,UnLoc(用真值运动)只有 0.30/0.49/0.46;只喂 UnLoc 用的 16 条射线也仍领先 → P.7 表 4。换成 270° LiDAR + 轮式里程计,静态序列达到 100% 成功、中位误差 9–10 cm → P.7。
Hilti 工地(几百米的楼层,只用鱼眼相机):5 个会话里 3 个达到 0.90–0.98;加上学习型墙体分割后 5 个全部在 0.67–0.92。把后端换成“每块独立找最大值”就崩到 0.05–0.11,说明跨窗口的多假设+共识才是关键 → P.8 表 5。
消融:在漂移很大的 VO 下关掉门限,T=450 的成功率从 0.842 掉到 0.368 → P.6 表 3。
代价:完整后端在 M1 Max CPU 上每窗约 40 ms(约 8 ms/帧),深度网络本身要 114 ms,定位不是瓶颈;商场尺度的单次匹配比 UnLoc 快约 15 倍,但在家庭尺度 UnLoc 更快 → P.8 图 3。
要点 Take-home
- 平面图定位不必用稠密 (x,y,θ) 网格,墙体朝向+掩码相关+少量假设就够
- 真实公寓数据上,同样深度输入时成功率比 UnLoc 高 23–32 个百分点
- 跨窗口的门限和共识是关键,关掉门限后强漂移下成功率减半
- 依赖墙体与图纸一致,家具多或墙未画进图纸时会失败
Claude 读完全文后的提炼。
更多:先读哪 · 值得看的理由 · 质疑
先读哪
先看第 1 页图 1 和第 4 页图 2,再看第 7 页表 4 与第 8 页表 5
值得看的理由
- 在同一深度输入下只换后端,Bonn 真实数据上池化 SR@1m 比 UnLoc 高 23–32 个百分点 → P.7 表 4
- 后端完全无训练、状态不随轨迹变长,笔记本 CPU 每窗约 40 ms,代码已开源 → P.8 第 4.6 节
质疑
- 所有固定超参数都是在 Gibson 测试场景上选的(作者自己承认),且 T=15 时与 UnLoc 的 95% 区间仍重叠(P.21),Gibson 上的小幅领先要打折看 → P.11 第 C 节
审稿人笔记
所有真实数据都是离线回放录制好的序列,没有闭环上机,且领先主要出现在短轨迹和真实数据上,长轨迹仿真中对手更精确。