想象你是一位蒙着眼睛的探险家,被带进一座从未踏足的巨型博物馆。你既看不见展品,也看不见墙壁,只能靠手杖轻轻敲击地面和雕像来感知远近,靠耳朵捕捉回声判断空间大小,靠脚下的触感判断自己走了多远。你想知道自己“现在站在哪”——可这需要一张地图;你想画出“这座博物馆长什么样”——可这需要先知道自己在哪。这就是一个活生生的“鸡生蛋”困局,而 SLAM(Simultaneous Localization and Mapping,同步定位与建图)要解决的,正是这个困局。 整个探索过程中,你会不断做几件事:用手杖收集线索(传感器数据)、记住那些独特的地标(特征提取)、认出“这尊雕像我刚才摸过”(数据关联)、绕了一大圈后惊喜地发现回到了入口(回环检测)、最后回家把草稿图摊平、首尾对齐地重画一遍(位姿图优化)。SLAM 算法干的就是这件事:在一个陌生环境里,一边用传感器感知周围,一边同步回答“我在哪”和“周围长什么样”。
对 AI 从业者而言,SLAM 是机器人、自动驾驶、AR 眼镜等所有“需要自主行动”系统的地基技术。掌握它的概率模型与核心流程,你就能理解机器如何在未知世界中一步步建立空间认知,这是从“感知”走向“行动”的关键一跃。
目录
可视化演示
本节配有交互动效(进入视口后自动加载,约 3KB)。
SLAM轨迹建图 前端里程计估计位姿 逐步构建环境地图 x_t = f(x_{t-1}, u_t) 同时定位与建图的核心循环
SLAM 的问题定义:我在哪?周围有什么?
回到那位蒙眼的探险家。他每走一步,大脑里都在飞快地打转:我刚刚是往左转还是往右转?走了大约几步?前面那根柱子的触感,是不是我在入口处摸过的那根?如果他不知道自己在哪,就无法把新的触感放进地图的正确位置;如果他没有地图,就无法判断眼前的回音和障碍对应哪个坐标。这就是 SLAM 的第一个要义——同步。定位与建图不是两件先后完成的事,而是同一时刻、互相纠缠地推进。
把这个问题放进数学世界,我们需要一个能容纳“不确定”的语言。探险家不可能精确知道自己的坐标,他只能说“我大约在 A 点附近,偏向 B 一点”。于是 SLAM 用概率分布来描述一切:机器人的位姿(位置加朝向)是一个随机变量,地图也是一组随机变量。整个 SLAM 问题,就是给定从第 1 时刻到第 t 时刻的所有传感器观测和所有控制指令,去估计“当前位姿 + 环境地图”这个联合状态的分布。
探险家的大脑从来不说“我一定在这里”,而是说“我八成在这里,两成在那里”。SLAM 的整个演进史,就是如何把这团概率云算得又准又快的历史。
- 位姿与地图x_t 表示 t 时刻机器人的位置和朝向,m 表示整个环境地图(一堆地标/障碍的位置),它们是我们要猜的两个主角。
- 观测数据z_{1:t} 是从开始到现在的所有传感器读数,好比探险家一路上所有手杖敲击和耳朵捕捉到的信息。
- 控制指令u_{1:t} 是机器人自己发出的行动指令(前进、转弯),相当于探险家“走了几步、转了多少度”的腿部记忆。
- 联合后验P(…… | ……) 表示在已知观测和控制的前提下,位姿与地图所有可能取值及其概率。它不是给出一个“死答案”,而是给出一团“概率云”,越浓的地方越可能是真相。
传感器与观测模型:探险家的手杖与耳朵
蒙眼探险家靠什么感知世界?手杖敲击地面和墙壁,通过回弹手感判断距离——这就像激光雷达,发射激光束并测量反射回来的时间,得到环境的三维点云。他竖起耳朵,通过脚步声的回音、雕塑表面纹理的细微差异来判断空间结构——这就像视觉相机,把光线变成图像像素。他还有敏锐的内耳前庭系统,能感知自己在加速、转弯——这就像惯性测量单元 IMU,输出加速度和角速度。三种“感官”各有长短:激光雷达精度高但贵且稀疏,相机信息丰富但怕光照变化,IMU 完全自主但会随时间累积漂移。
在数学上,我们用一个观测方程把客观世界与传感器读数连接起来:传感器输出的 z,本质上是“真实位姿 x 与真实地图 m 经过某个函数 h 后应该产生的理想读数”,再加上一份噪声 v。
探险家心里清楚:手杖传来的距离感永远有一两厘米的误差,耳朵的判断更是会骗人。他不奢求“绝对准”,只希望“噪声有规律”——只要噪声的统计规律已知,就能用概率工具把它抵消掉。
- 理想观测函数h 是“物理规律”,例如激光打到某个地标后应该测出多远、相机把某个 3D 点投影到图像的哪个像素。
- 真实读数z_t 是传感器实际输出的数值,比如“前方 2.3 米有障碍”或“图像第 420 列出现一个亮斑”。
- 噪声项v_t 是随机扰动,通常建模成均值为零的高斯分布,代表测量误差、电磁干扰、光照变化等一切不可控因素。
贝叶斯估计框架:大脑里的概率小本本
探险家手里有个随身小本本,每走一步就翻出来更新一版“我大概在哪”的草图。刚开始,他只知道自己被放在博物馆入口附近——这是一个先验。接下来发生的事每时每刻都在帮助他:听到喷泉声在左边,他就把“我在喷泉厅西侧”的可能性调高几分;手杖敲到一根独特的雕花圆柱,他又把“我在中央大厅”的概率推高。这种“用新证据修正旧判断”的机制,数学上就是贝叶斯公式。
这套“预测—更新—再预测—再更新”的循环,构成了贝叶斯滤波的骨架。探险家每走一步,先按脚感推演下一步(运动模型),再用手杖和耳朵的新证据修正(观测更新),小本本上的概率云始终跟着真相跑。
- 先验 p(x)在拿到最新观测前,你原本对机器人位置的相信程度,来自上一时刻的后验再经过运动模型推演的结果。
- 似然 p(z|x)假如机器人真的在 x 处,计算出当前观测出现的概率。越符合物理预期的观测,似然越高。
- 证据 p(z)所有可能位置下观测的总概率,起归一化作用,保证算出的后验分布积分为 1。
- 后验 p(x|z)融合了先验与新证据后的最终判断——探险家本本上更新后的“概率云”。
特征提取与描述子:给地标起外号
巨型博物馆里的每一面墙都长得差不多,探险家不可能记住指尖掠过的每一块砖。他的策略是:只记住那些“显眼、独特、好认”的东西——入口处那尊断臂女神像、中央大厅那根雕满葡萄藤的柱子、盥洗室门口歪掉的铜牌。在计算机视觉里,这些被选中的“显眼点”就是特征点(如 ORB、SIFT 角点/斑点),而描述它们的向量就是描述子——相当于地标的外号。
特征点检测算法会在图像里寻找那些“无论怎么看都很特别”的像素位置:角点(两条边缘相交处)、斑块(与周围反差极大的区域)。找到后,算法截取该点周围的一小块图像,把它编码成一个二进制串,这就是描述子。两个特征点的外号越接近,它们就越可能是同一个地标。
探险家不需要记住整座博物馆,只需要记住十几个地标的外号和它们的大致方位。地图的精髓不在“全”,而在“准”。
- 描述子向量a 和 b 是两个 n 位二进制串,每个特征点都有一串属于自己的“指纹”。
- 逐位比较\(\mathbf{1}(a_i \neq b_i)\) 表示“第 i 位不同则计 1,相同则计 0”,把所有位的不一致数累加起来。
- 总距离d_H 越小,两个描述子越相似。通常取一个阈值,小于它就认为匹配成功。
数据关联:认出同一个地标
探险家绕到博物馆西翼,手杖又碰到一根雕花柱子。他停下来,仔细摸了一遍纹路——藤蔓、葡萄、断裂的藤尖……“等等,这不是中央大厅那根柱子吗?我怎么绕到它背面来了?”能够把“此刻的触感”与“记忆中的某个地标”对应起来,这个能力就是数据关联。它是 SLAM 中最容易出错的环节:认错了地标,地图立刻崩溃;认对了,位置估计就能瞬间收紧。
数据关联的经典做法是最近邻准则:根据当前估计的位姿,预测每个已知地标在传感器里“应该出现在什么位置”,然后把当前观测分配给那个“预测位置最接近”的地标。
探险家的每一次“恍然大悟”,都是一次成功的数据关联。但真实的传感器更嘈杂,偶尔会把两根不同的柱子认成同一根——这就是误关联,需要后续用鲁棒核函数或随机抽样一致性(RANSAC)等方法把“认错”的外点剔除掉。
- 当前观测z_t 是此刻传感器给出的一个测量值,比如激光点坐标或图像特征点位置。
- 地标投影预测h(x_t, m_j) 是“如果机器人真的在 x_t、地标 j 真的在 m_j,那么传感器应当测到什么”。
- 取最近者遍历地图里所有地标,计算预测值与实际观测的欧氏距离,挑出距离最小的那个编号 j\*。
位姿图优化:把草图摊平微调
探险家回到驻地,把当天在博物馆摸索时画的十几张草稿纸全部摊在地上。问题立刻暴露出来:第 3 张图上走廊是直的,第 7 张图却画成弯的;第 12 张图里的出口位置,和第 1 张图差了整整三米。每一段局部路线单独看都挺合理,拼在一起却处处矛盾。怎么办?他拿起铅笔,把这些草稿当作一张有弹性的网,轻轻拉动每个节点,让所有“我记得从这里到那里走了多远、转了多少度”的记录尽量同时得到满足——这就是位姿图优化。
在数学上,把每个时刻的机器人位姿当作一个节点,把两次位姿之间的相对约束(里程计读数、回环检测结果)当作边。优化目标就是调整所有节点位置,使所有边的“理论相对变换”与“测量相对变换”之间的误差总和最小。
探险家微调每一张草稿时,“拉这一块”总会牵动“那一块”。位姿图优化也是如此:牵一发而动全身,最终所有节点的位置达成一个全局折中。局部里程计造成的漂移被“摊平”到整张图上,地图首尾终于能严丝合缝地闭合起来。
- 误差向量e_{ij} 是“节点 i 与节点 j 之间的理论差值”与“实际测得差值”之间的偏差,好比草稿图上某段路线首尾没对齐的缝隙。
- 信息矩阵Ω_{ij} 描述这条边约束的可信度。传感器越准,Ω 越大,这条边在优化中就越“不容商量”。
- 整体目标E(X) 是所有边误差的加权平方和。优化就是寻找一组位姿 X,让 E 最小。
回环检测:哎呀,我绕回来了!
蒙眼探险家已经在博物馆里转了二十分钟,手杖在黑暗中划出许多道弧线。突然,他又摸到了入口处那尊被无数游客摸得发亮的铜像——底座那只小乌龟的缺口,手感一模一样!“我居然绕回来了!”这一瞬间的惊喜,对 SLAM 来说价值连城。因为在没有任何绝对坐标的世界里,“回到原点”是唯一能彻底纠正累积漂移的金色时刻。
回环检测要回答一个问题:“当前的场景,我以前来过吗?”常用方法是词袋模型:把图像分割成许多局部特征,再用聚类把相似特征归成一个个“视觉单词”。于是一幅图像就变成一份“单词出现次数”的直方图——探险家看到的是“女神像×1、葡萄藤柱×2、铜龟底座×1”。回环检测就是比较当前直方图与历史所有位置的直方图有多像。
一旦回环检测确认“这里就是入口”,算法就会在当前位置与记忆中的入口位置之间添加一条“回环边”。这条边像一条橡皮筋,把已经漂移出去的轨迹猛地拉回正确位置,整个地图的误差随之大幅收缩。
- 词袋向量v_a 和 v_b 分别表示两幅图像的视觉单词统计向量,每个元素是某个单词的出现次数(或加权权重)。
- 点积分子是两向量对应分量相乘再求和,衡量两个“单词集合”有多少重叠。
- 归一化分母把两个向量的长度除掉,使相似度只看“内容比例”而不受图像包含特征多少的影响。
主流开源框架:装备库里的现成探险包
自己从零实现一整套 SLAM,就像蒙眼探险家坚持自己磨手杖、自己养导盲犬——精神可嘉但周期太长。幸运的是,开源社区已经留下了好几套久经考验的“探险装备包”,你只需要根据场景选择合适的装备。
- ORB-SLAM(视觉派):只靠一个普通摄像头就能运行,性价比极高,适合无人机、手机 AR 等轻量设备。它的绝活是熟练运用特征点 + 词袋回环,在纹理丰富的室内场景中表现优异。
- LIO-SAM(激光惯性派):把激光雷达与 IMU 深度融合,在室外大场景、颠簸运动下依然稳如磐石,适合自动驾驶和复杂地形机器人,但对传感器硬件要求较高。
- Cartographer(全能派):既能接激光雷达也能接视觉,自带强大的子图(submap)回环策略,在室内外切换、走廊反复穿梭等场景中都很可靠,扫地机器人常客。
选择框架时,可以用绝对轨迹误差(ATE)来定量评估一个 SLAM 系统到底跑得好不好——把算法估计的轨迹与高精度真值轨迹逐点比较。
装备没有绝对的好坏,只有合适与否。蒙眼探险家如果只在室内书房转悠,一根轻巧的手杖就够了;如果要去雪山荒野,就得背上激光雷达和惯性导航的重型行囊。理解原理,才能选对装备。
- 估计轨迹点p_i 是算法在时间点 i 估计出的机器人位置。
- 真值轨迹点p_i^{gt} 是同一时刻由高精度设备(如动捕系统)测得的“标准答案”位置。
- 逐点求差取平均把 N 个时刻的位置误差全部加起来求平均,得到一个衡量整体精度的标量。
AI 应用场景
扫地机器人的家庭建图与导航
阶段:前端感知 + 后端优化 + 应用决策
解决的问题:传统扫地机只能“盲扫”,路线随机、漏扫严重。搭载 SLAM 后,机器人一边用激光雷达扫描客厅,一边实时建立房间地图并定位自己,实现弓字形全覆盖清扫。
具体案例:米家/科沃斯等扫地机器人内置 Cartographer 或自研 SLAM 方案。开机后先绕场一周完成“快速建图”,之后每次清扫都会对比当前观测与已有地图,发现家具移动就增量更新地图。
自动驾驶园区的物流车定位
阶段:多传感器融合 + 回环检测 + 高精定位
解决的问题:工业园区的无人配送车没有 GPS 信号,且人流、叉车往来导致环境动态变化。传统方式依赖磁条或反光板,施工贵且不灵活。SLAM 利用激光雷达点云和 IMU 融合,在动态环境中维持厘米级定位。
具体案例:某电商园区的无人配送车在楼宇间穿行,通过 LIO-SAM 类框架实时建图,每当绕回同一个装卸区时触发回环检测,消除长时间运行累积漂移,保证停靠精度在 5 厘米以内。
AR 眼镜的空间锚定
阶段:视觉特征提取 + 位姿估计
解决的问题:AR 需要把虚拟物体“钉”在现实世界的固定位置上,用户转头、走动时虚拟物体不能飘移。Visual SLAM 用相机实时估计眼镜位姿并维护一张稀疏特征地图,实现稳定的空间锚定。
具体案例:某款 AR 眼镜在用户戴上后快速扫描房间、提取数百个特征点,构建稀疏地图。用户走到厨房再看客厅,眼镜依然能通过特征匹配认出“我曾经来过这里”,虚拟宠物始终蹲在原来的茶几上。
Python 演示
"""极简位姿图优化:用线性最小二乘同时修正整条轨迹。"""import numpy as np def build_problem(T, edges): """把边约束组装成线性方程组 A @ x = b。""" A = [] b = [] for i, j, d in edges: for k in range(2): row = np.zeros(2 * T) row[2 * j + k] = 1.0 # x_j row[2 * i + k] -= 1.0 # -x_i A.append(row) b.append(d[k]) # 锚点:把机器人起点钉在原点,否则方程有无穷多解 for k in range(2): row = np.zeros(2 * T) row[k] = 1.0 A.append(row) b.append(0.0) return np.array(A), np.array(b) def main(): rng = np.random.default_rng(42) T = 12 true_traj = np.cumsum(rng.normal(0, 0.35, (T, 2)), axis=0) true_traj = true_traj - true_traj[0] # 起点对齐到原点 # 里程计边:相邻位姿相对位移,叠加噪声(这就是“漂移”的来源) edges = [] for i in range(T - 1): d = true_traj[i + 1] - true_traj[i] + rng.normal(0, 0.25, 2) edges.append((i, i + 1, d)) # 回环边:探测到“我又回到起点附近”,提供远距离约束 d_loop = true_traj[0] - true_traj[-1] + rng.normal(0, 0.25, 2) edges.append((T - 1, 0, d_loop)) # 优化前:把里程计增量直接累加(误差会一路累积) est_before = np.zeros((T, 2)) for i, j, d in edges: if j == i + 1 and i < T - 1: est_before[j] = est_before[i] + d # 位姿图优化:一次线性最小二乘 A, b = build_problem(T, edges) x, *_ = np.linalg.lstsq(A, b, rcond=None) est_after = x.reshape(T, 2) err_before = np.mean(np.linalg.norm(est_before - true_traj, axis=1)) err_after = np.mean(np.linalg.norm(est_after - true_traj, axis=1)) print(f"优化前平均误差: {err_before:.3f}") print(f"优化后平均误差: {err_after:.3f}") if __name__ == "__main__": main()
edges.append((i, i+1, d))构建里程计边:相邻位姿之间的相对位移,叠加高斯噪声模拟传感器误差。d_loop = true_traj[0] - true_traj[-1] + ...构建回环边:假设机器人回环检测成功,得到了“终点相对起点”的位移观测。row[2 * j + k] = 1.0; row[2 * i + k] -= 1.0把"x_j - x_i = d"的约束写成线性方程,逐行填入系数矩阵。np.linalg.lstsq(A, b, rcond=None)用最小二乘法求解超定方程组,得到让所有约束误差平方和最小的轨迹。est_before[j] = est_before[i] + d优化前直接串联里程计读数,误差随路径长度累积漂移。err_after = np.mean(...)计算优化后轨迹与真值的平均距离,直观看到回环约束带来的精度提升。
常见误区
误区我一直以为 SLAM 就是给机器人装个定位系统,让它知道自己坐标就行。地图什么的,感觉是附带的产物。
正解SLAM 的精髓恰恰在“同步”二字:定位需要地图作为参照,建图需要位姿作为前提,两者互为条件、交替推进。如果只做定位不建图,那叫“已知地图下的定位”(localization),不是 SLAM。就像探险家若手里有一张现成博物馆地图,他只需要找自己在哪;而 SLAM 要求的是“没有地图也能摸清环境”。
为何常见:很多导航产品对外宣传“定位精度多高”,用户容易把导航的整体体验归功于定位,忽略了背后同步建模的复杂过程。
误区我看激光雷达的 3D 点云挺精细的,把每一帧点云拼在一起不就是地图吗?为什么要搞贝叶斯、图优化那么复杂?
正解真实传感器的噪声永远存在,而且里程计误差会随时间累积——就像蒙眼探险家每跨一步都有一两厘米的脚感误差,走一公里后就完全不知道自己在哪了。SLAM 的所有数学工具(贝叶斯滤波、最小二乘优化)都是为了在噪声中做“最优估计”,而不是简单拼接数据。直接拼接的点云图会重影、错位、漂移,在长走廊和重复环境中尤其严重。
为何常见:看 demo 时点云地图平滑漂亮,容易让人忽略算法的估计和修正作用,误以为传感器本身“足够好”。
误区我觉得回环检测和普通的数据关联差不多,都是把当前看到的特征和数据库里的特征匹配一下,匹配上就完事了。
正解两者尺度完全不同。数据关联解决的是“当前观测对应地图中哪个地标”的局部问题,发生在相邻帧或局部窗口内;回环检测解决的是“当前场景是否曾出现在任意历史位置”的全局问题,必须在整张地图的尺度上搜索和判别。好比探险家伸手摸到柱子,判断“这是刚才那根还是另一根”是数据关联;而走了一小时后突然意识到“这里我两小时前来过”,是回环检测。后者还要处理“感知不匹配”(同场景不同角度/光照)与“感知匹配”(不同场景却长得很像)的难题。
为何常见:两者在算法上确实都涉及特征比较,初学者容易从“技术手段相似”推出“目标也相同”,忽略了它们在 SLAM 系统中承担的不同职责。
误区我以为位姿图优化就是写个绘图工具,把轨迹和地标用漂亮的图形画出来,让演示好看而已。
正解位姿图优化是一个严谨的数值优化问题:位姿是节点,约束是边,目标是让所有边误差的加权平方和最小。它要解的是大规模稀疏线性方程组或非线性最小二乘问题,输出是修正后的轨迹坐标,而不是图画。探险家的“把草稿摊平微调”看似轻描淡写,实际是在几十上百个相互矛盾的记录里找一个全局最优折中——这是数学,不是美术。
为何常见:“图优化”里的“图”让人联想到照片和图纸,而它真正的含义是图论中的“图”(节点与边的集合),概念混淆导致了误解。
误区SLAM 发展了这么多年,连手机 AR 都能跑,应该是个被解决得明明白白的经典问题了。
正解SLAM 在“室内、静态、特征丰富”的受控场景下确实很成熟,但在动态物体干扰(行人、车辆)、退化环境(长走廊、空旷广场)、极端光照、传感器退化等条件下,仍然是活跃的研究前沿。长期运行时的鲁棒性、计算资源受限下的实时性、多机器人协同建图等难题,都还没有完美答案。探险家能画出普通博物馆地图,但要在装修中不断变化、人群涌动的火车站里长期保持地图准确,依然充满挑战。
为何常见:媒体展示的 SLAM 成果往往经过精心筛选,让人误以为量产级稳定,忽略了真实场景的复杂变化。
面试题
Q1. SLAM 要同时回答的两个核心问题是什么?
- A.我在哪,周围环境长什么样← 正确答案
- B.物体是什么,如何抓取物体
- C.障碍物在哪,如何避开障碍
- D.目标在哪,如何规划路径
答案:A。SLAM 的“同步”指定位与建图同时进行:既要估计自身位姿(我在哪),又要估计环境地图(周围长什么样)。B、C、D 分别是识别、避障、路径规划问题,它们依赖 SLAM 提供的地图与定位结果,但不是 SLAM 本身。
Q2. 下列哪类传感器在 SLAM 中最常用于获取环境距离信息?
- A.激光雷达与深度相机← 正确答案
- B.温度计与湿度计
- C.麦克风与扬声器
- D.加速度计与陀螺仪
答案:A。激光雷达通过激光飞行时间测距,深度相机(如 Kinect、RGB-D 相机)通过红外结构光或 ToF 获取像素级深度,两者都直接提供环境几何距离。加速度计与陀螺仪(IMU)测量的是自身运动,不是环境距离;温度计、麦克风与距离无关。
Q3. SLAM 中的“鸡生蛋”问题指的是什么?
- A.定位需要地图,建图需要位姿← 正确答案
- B.感知需要控制,控制需要感知
- C.特征需要匹配,匹配需要特征
- D.训练需要数据,数据需要训练
答案:A。要确定机器人位置,需要一张已知地图做参照;要构建环境地图,又必须先知道每个观测来自哪个位姿。两者互为前提,形成循环依赖。SLAM 通过交替估计(或联合概率建模)打破这个死锁,而 B、C、D 描述的是其他领域的循环依赖,不是 SLAM 的核心困境。
Q4. 下列哪些工作属于 SLAM 的前端(前端里程计)范畴?
- A.提取图像中的特征点← 正确答案
- B.将当前观测与已有地标关联← 正确答案
- C.通过回环检测修正全局位姿
- D.求解大规模非线性最小二乘
答案:AB。前端负责“从传感器数据逐步估计运动”,包括特征提取、特征匹配、数据关联等,是逐帧推进的局部过程。回环检测通常是独立模块,后端优化(如图优化、非线性最小二乘)负责全局修正。C 和 D 属于系统的后段环节,不属于前端。
Q5. 在贝叶斯公式 p(x|z) ∝ p(z|x)p(x) 中,p(z|x) 的名称是什么?
- A.后验概率分布
- B.似然概率分布← 正确答案
- C.先验概率分布
- D.证据归一化常数
答案:B。p(z|x) 表示“若机器人处于 x,出现当前观测 z 的可能性”,称为似然(likelihood)。p(x) 是先验,p(x|z) 是后验,分母 p(z) 是证据。可以这样记:先验是“没看数据前的看法”,似然是“数据支持某个假设的程度”,后验是“看完数据后的综合看法”。
Q6. 回环检测在 SLAM 系统中的核心价值是什么?
- A.消除长时间运行累积的漂移← 正确答案
- B.提高单帧图像特征提取速度
- C.降低传感器数据采样频率
- D.压缩地图所需的存储空间
答案:A。里程计误差随时间累积,走得越远,轨迹偏差越大。回环检测能识别“我回到了曾经去过的地方”,从而建立一条连接当前位姿与历史位姿的长距离约束,把漂移极大地拉回来。B、C、D 分别属于局部特征工程、采样策略和数据压缩,与回环的核心价值无关。
Q7. 关于位姿图优化的描述,正确的有哪些?
- A.节点通常表示机器人位姿← 正确答案
- B.边表示位姿之间的约束关系← 正确答案
- C.目标是让所有边误差总和最小← 正确答案
- D.只能用线性求解器处理一次
答案:ABC。位姿图优化把位姿作为节点、相对运动约束作为边,目标是最小化所有边误差的加权平方和。它通常用非线性优化迭代求解(如高斯-牛顿法、LM 算法),D 说“只能线性求解器处理一次”是错误的。A、B、C 准确描述了图优化的三要素。
Q8. 为什么回环约束比相邻里程计约束更能抑制累积漂移?
- A.它连接相隔很远的位姿,误差被全局分摊← 正确答案
- B.它自带了更高精度的传感器硬件
- C.它可以完全消除所有测量噪声
- D.它不需要经过数据关联确认
答案:A。相邻里程计约束只修正局部相对关系,误差沿着链条一路传递,形成漂移。回环约束把相距很远的两个位姿直接连在一起,相当于在全图上加了一条“长程橡皮筋”,优化时会牵动整条轨迹,让误差被全局分摊。B、C 不符合实际,D 说反了——回环检测本身就需要严格的数据关联/几何校验来确认。
Q9. 位姿图优化误差函数 E = Σ eᵀΩe 中,Ω 矩阵的语义是什么?
- A.信息矩阵,表示约束的可信度← 正确答案
- B.旋转矩阵,表示位姿的朝向
- C.协方差矩阵的均值向量
- D.观测方程对位姿的雅可比
答案:A。Ω 是信息矩阵,通常取测量协方差矩阵的逆。某个边对应的测量越准,Ω 的数值越大,这条边在优化中的权重就越高,就像探险家更信任手感清晰的记录。B 的旋转矩阵描述朝向而非权重,C 的协方差矩阵是 Ω 的逆而不是均值,D 的雅可比用于线性化,不是 Ω 本身。
Q10. 关于 SLAM 中数据关联与回环检测的异同,正确的有哪些?
- A.数据关联通常是局部短时的匹配← 正确答案
- B.回环检测是全局范围的重识别← 正确答案
- C.两者都会产生位姿约束信息← 正确答案
- D.数据关联的结果不需要任何校验
答案:ABC。数据关联是在相邻帧或局部窗口内把当前观测匹配到已有地标,回环检测则在整个历史轨迹中搜索“是否来过这里”,两者尺度不同。数据关联产生局部约束,回环检测产生全局长程约束,都会为后端优化提供边。D 错误:错误的数据关联会导致地图崩溃,必须用 RANSAC、鲁棒核函数等方式校验。