第254篇 回环检测技术——词袋模型和位置识别
上一篇聊HDL-Graph-SLAM的时候末尾提到了回环检测。回环检测是SLAM系统中消除累积误差的关键一环。机器人走了一圈回到起点如果系统认不出我来过这里那轨迹就会漂移地图也会错位。这一篇我们深入聊聊回环检测的核心技术重点放在词袋模型和位置识别上。回环检测的本质是一个场景识别问题。给定当前帧的观测数据判断机器人是否曾经到过这个位置。听起来简单但实际挑战很多视角变化、光照变化、动态物体遮挡、感知混叠不同地方看起来很相似这些问题都会影响检测的准确性。词袋模型BoW的基本原理词袋模型是回环检测最经典的方案源自文本检索领域。核心思路是把图像表示成一组视觉单词的直方图然后通过比较直方图的相似度来判断两帧图像是否来自同一个地方。整个流程分三步。第一步是构建词典vocabulary。从大量图像中提取特征描述子比如ORB、SIFT用K-Means聚类把这些描述子聚成K个类每个类的聚类中心就是一个视觉单词。所有视觉单词组成词典。# 词袋模型的核心流程 features [extract_orb(img) for img in training_images] all_descriptors np.vstack(features) # K-Means聚类构建词典 vocabulary kmeans(all_descriptors, k10000)第二步是把每帧图像转换成词袋向量。提取当前帧的特征描述子把每个描述子匹配到词典中最近的视觉单词统计每个单词出现的次数或TF-IDF权重得到一个K维向量。第三步是比较词袋向量的相似度。常用的度量方式有余弦相似度、卡方距离等。相似度超过阈值就认为检测到了回环。DBoW2是目前用得最多的词袋库ORB-SLAM、VINS-Mono等主流系统都用它。DBoW2用了分层聚类来加速匹配把词典组织成一棵二叉树或四叉树查询时间从O(N)降到O(logN)实时性很好。TF-IDF权重和相似度计算直接用单词出现次数做相似度比较有问题——有些视觉单词在所有图像中都频繁出现比如天空、墙壁这些常见词对区分不同场景没什么帮助。TF-IDF就是用来解决这个问题的。TF词频衡量一个单词在当前图像中出现的频率。IDF逆文档频率衡量一个单词在所有图像中有多稀有。一个单词越稀有IDF越大权重越高。# TF-IDF权重计算 def tf_idf_weight(tf, df, n_docs): idf math.log(n_docs / (df 1)) return tf * idf两帧图像的词袋向量算好TF-IDF权重后用L1范数或L2范数计算相似度。DBoW2默认用L1范数归一化到[0,1]区间。相似度大于0.8通常认为是很强的回环候选。感知混叠和时序约束回环检测有两个典型问题。一个是感知混叠perceptual aliasing两个不同的地方看起来很像比如两条相似的走廊。这会导致误检false positive。另一个是感知变化perceptual variability同一个地方在不同条件下看起来不同比如白天和黑夜。这会导致漏检false negative。处理感知混叠常用的方法是加几何验证。词袋模型给出的只是外观相似度检测到回环候选后再用特征匹配计算相对位姿检查几何上是否一致。如果匹配的内点数不够多或者计算出的相对位姿和里程计估计差太大就拒绝这个回环。# 几何验证流程 def verify_loop(query, candidate): matches match_features(query, candidate) if len(matches) min_inliers: return False T estimate_pose(matches) if pose_error(T, odometry_estimate) threshold: return False return True处理时序约束可以利用时间一致性的先验。如果第i帧和第j帧之间有回环那第i1帧和第j1帧之间也很可能有回环。ORB-SLAM用了一个回环候选组的机制连续多帧都检测到同一个候选才确认回环大大降低了误检率。3D点云的回环检测词袋模型主要用于视觉SLAM。对于3D激光雷达SLAM回环检测的思路不太一样。Scan Context是一种很流行的3D点云回环检测方法。它把点云投影到一个极坐标BIN矩阵中每个BIN存储该区域内点的最大高度。这样就得到一个2D描述子可以快速比较两帧点云的相似度。# Scan Context的核心思想 def scan_context(points, num_rings20, num_sectors60): sc np.zeros((num_rings, num_sectors)) for p in points: r, theta to_polar(p) ring int(r / max_range * num_rings) sector int(theta / (2*np.pi) * num_sectors) sc[ring][sector] max(sc[ring][sector], p.z) return scScan Context的优点是计算快、对旋转不敏感可以通过列偏移来处理旋转。缺点是描述能力有限对视角变化大的场景效果不太好。后来还出现了M2DP、LiDAR Iris等改进方法描述能力更强。最近的趋势是用深度学习来学点云描述子比如OverlapNet、LPD-Net精度更高但计算量也更大。面试追问环节面试官词袋模型的词典大小怎么选词典大小是个trade-off。词典太小描述能力不够不同场景的词袋向量可能很相似导致误检。词典太大很多视觉单词只在少数图像中出现词袋向量太稀疏相似度计算不稳定。经验值是1万到10万ORB-SLAM2用的是10万的词典。具体要根据场景复杂度来调。面试官DBoW2的分层聚类怎么加速的DBoW2把词典组织成一棵K叉树。每个节点存储一个视觉单词的聚类中心。查询时从根节点开始每一层只走最近的分支不需要遍历所有单词。这样查询复杂度从O(N)降到O(L*K)L是树的层数K是分支因子。通常4层、10分支总共1万个叶子节点查询速度快很多。面试官回环检测误检了怎么办误检的后果很严重——会把一条错误的约束加入位姿图导致地图扭曲。处理方式有几层防线。第一层是几何验证检查匹配点的几何一致性。第二层是时间一致性要求连续多帧都检测到同一个候选。第三层是在优化阶段检查如果加入回环后优化误差突然增大就剔除这个回环。ORB-SLAM还有Essential Graph来传播回环校正避免单条错误回环破坏全局地图。面试官Scan Context和词袋模型有什么区别最大的区别是数据模态不同。词袋模型处理2D图像特征Scan Context处理3D点云。词袋模型需要训练词典Scan Context不需要训练是手工设计的描述子。词袋模型的描述维度是词典大小通常10万Scan Context的描述维度是RING数乘以SECTOR数通常1200。在激光SLAM中用Scan Context在视觉SLAM中用DBoW2多传感器系统两个都可以用。面试官动态物体对回环检测有什么影响影响很大。比如上次经过一个地方停了一辆车这次经过车开走了场景变化很大词袋向量差异就大可能漏检。反过来如果动态物体很多比如行人不同地方可能因为都有人而看起来相似导致误检。处理方法是在提取特征前先做动态物体检测和剔除只用静态物体的特征来做回环检测。回环检测是SLAM系统的记忆模块让机器人能够识别曾经到过的地方。词袋模型用视觉单词的统计信息做场景匹配Scan Context用点云的极坐标投影做位置识别。两者思路不同但目的一样找到回环消除累积误差。好的回环检测系统不是单一算法而是多层防线的组合——外观匹配给出候选几何验证排除误检时间一致性增强可靠性。上一篇第253篇 HDL-Graph-SLAM深度解析下一篇我们聊ICP点云配准这是回环检测和很多3D SLAM系统中的核心算法。如果这篇文章对你有帮助欢迎点赞支持一下你的鼓励是我持续更新的动力

相关新闻

Skill的格式  开发语言和工具

Skill的格式 开发语言和工具

Skill的格式 & 开发语言和工具 文章目录Skill的格式 & 开发语言和工具1. Skill格式介绍1.1 目录结构规范各目录说明1.2 SKILL.md 文件规范必需元数据:文件开头必须包含以下两个字段指令正文1.3 可选目录1.4 设计原则1.5 Agent Skills 是如何工作的三阶段工作…

2026/8/26 17:28:01 阅读更多 →
多模型对比写同一个函数:Gemini、GPT、DeepSeek 谁更靠谱?开发者横向实测

多模型对比写同一个函数:Gemini、GPT、DeepSeek 谁更靠谱?开发者横向实测

Q:同一个函数分别交给 Gemini、GPT、DeepSeek 来写,哪个更靠谱? A:如果只看“能不能快速给出一版可运行代码”,三者都能完成基础任务;但如果放到真实开发里,差别就出来了。我最近拿同一个函数做…

2026/8/26 17:27:00 阅读更多 →
ArcGIS JS 基础教程(29):CSVLayer 表格点位图层

ArcGIS JS 基础教程(29):CSVLayer 表格点位图层

ArcGIS JS 基础教程(29):CSVLayer 表格点位图层零、写在前面一、功能介绍二、功能实现2.1 创建并配置(3D)2.2 让点位「浮」起来(高程模式)2.3 自定义字段类型(numericFields 等&…

2026/8/26 17:27:00 阅读更多 →

最新新闻

2026 年 MCP 协议彻底火了:用 Python 从零搭建你的第一个 AI Agent 工具链

2026 年 MCP 协议彻底火了:用 Python 从零搭建你的第一个 AI Agent 工具链

2026 年 MCP 协议彻底火了:用 Python 从零搭建你的第一个 AI Agent 工具链如果 2024 年是 RAG 的元年,2025 年是 Function Calling 的普及年,那 2026 年毫无疑问属于 MCP(Model Context Protocol,模型上下文协议&#…

2026/8/26 17:57:31 阅读更多 →
嵌入式CAN通信学习记录(万字解析):从STM32到Linux双机联调实战

嵌入式CAN通信学习记录(万字解析):从STM32到Linux双机联调实战

1. 引言 CAN(Controller Area Network)总线是嵌入式系统中广泛使用的一种高可靠性、多主机的串行通信协议,尤其在汽车电子、工业控制等领域应用广泛。本文旨在记录我学习嵌入式CAN通信的完整过程,涵盖从STM32开发板的环回/静默模…

2026/8/26 17:57:31 阅读更多 →
当“问小白怎么复制表格”成为日常:从格式崩塌到一键归档的技术突围

当“问小白怎么复制表格”成为日常:从格式崩塌到一键归档的技术突围

当“问小白怎么复制表格”成为日常:从格式崩塌到一键归档的技术突围 问小白用户想必都经历过同一个噩梦:让AI生成了一份逻辑清晰的对比表格,对话框内完美渲染,复制到Word或Excel后,却变成了一堆挤在单元格里的竖线符号…

2026/8/26 17:57:31 阅读更多 →
【RAG实战】LlamaIndex 深度集成:常用 Reader 全解析与自定义 Reader

【RAG实战】LlamaIndex 深度集成:常用 Reader 全解析与自定义 Reader

LlamaIndex 深度集成:常用 Reader 全解析与自定义 Reader 实战 文章目录LlamaIndex 深度集成:常用 Reader 全解析与自定义 Reader 实战LlamaIndex 深度集成:常用 Reader 全解析与自定义 Reader 实战一、LlamaIndex Reader 体系架构1.1 BaseRe…

2026/8/26 17:57:31 阅读更多 →
【2026年】实验室补风系统热平衡与节能设计

【2026年】实验室补风系统热平衡与节能设计

实验室排风量大、换气频繁,若不妥善处理补风,容易造成室内负压过大、空调负荷失衡,甚至影响安全。补风系统的热平衡设计,直接关系到实验室能否在高效排风的同时保持舒适安全、降低能耗。合理的补风方案是实验室通风设计中容易被忽…

2026/8/26 17:57:31 阅读更多 →
TVA与VLA双系统驱动的具身智能导航技术研究

TVA与VLA双系统驱动的具身智能导航技术研究

前沿技术探索:TVA智能体(简称TVA) TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的系统级视觉技术框架。它融合深度强化学习(DRL)、卷积…

2026/8/26 17:56:29 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →