← 课程馆论文原文索引产出索引

SLAM 图解入门 从零看懂机器人如何认路

这是一份给完全没接触过 SLAM 的人写的文档。基于本地 255 篇论文的全文语料库, 技术细节都来自论文正文,但讲法是从最朴素的问题开始,一步一步来。
带虚线下划线的词可以鼠标悬停看解释;每张图下面都写了"怎么看"和"要记住什么"。
255篇论文原文
2007–2025时间跨度
15个手绘动画
42个术语解释

开始之前:这份文档怎么用 三种读法,按你的时间挑

三条阅读路径

把这份文档想象成带你参观一个工厂。

我先带你站在门口,看清楚这个厂子到底在造什么东西(第一章);然后一条生产线一条生产线地走, 每到一个工位就停下来,让你亲眼看机器怎么转(动画),再告诉你这个工位为什么这么设计;最后告诉你哪几个工位还没修好(最后一章)。

术语不用背。术语只是厂里的人给机器起的外号——你先把机器长什么样看明白了,外号自然就记住了。

一、SLAM 到底在干什么 先讲一个具体的故事,把整个问题说清楚

把一个机器人放进一栋它从没见过的楼里。它必须同时搞清楚两件事: ① 我在哪(这叫"定位"),② 周围长什么样(这叫"建图")。 难点在于这两件事互相依赖——不知道自己在哪,地图就画不准;地图不准,又定位不了。 SLAM 就是一套让两者互相纠正的办法。

1.1 先看一个具体的场景

下面这张图是一个房间的俯视图(从上往下看)。房间里有沙发、书架、圆桌、长桌和绿植。 蓝色的小点是机器人,它正沿着墙边慢慢走。

机器人 它记下的地图 "这地方我来过!" 它以为自己走的路线 门 沙发 书架 圆桌 长桌 绿植 "咦,这地方我来过!" 机器人走过的路(灰底)· 它记下的地图(绿点)· 它以为自己走的路(红虚线)
怎么看这张图

① 蓝点是机器人,它正沿着墙边慢慢走一圈。绿色扇形是它的"视线"——它不停地在转圈扫描, 每转向一个方向就量一次距离,就像蝙蝠发出声波听回声一样。

② 绿点 = 它记下来的地图。它走到哪儿,就在墙上留下几个点,表示"这里有一堵墙"。 注意这些点不是一次记全的,而是走到哪儿记到哪儿——地图是慢慢长出来的。

③ 红色虚线 = 它以为自己在走的路线。机器人主要靠"轮子转了多少圈"推算走了多远, 但轮子会打滑、地面有起伏,所以走着走着,"它以为"就偏离了"实际"。这就是漂移。

④ 黄色闪光 = 回环检测。绕完一圈回到出发点附近时,它通过扫描发现"这里的墙和我出发时看到的一模一样", 于是知道自己回来了。这一瞬间,它就能算出自己一路上累积了多少误差,然后把整张地图连同轨迹一起校正。

要记住的一句话:没有回环,机器人只能越走越偏;有了回环,它才能走很久都不迷路。

1.2 为什么这两件事必须一起做?

你可能会想:先定位、再建图,不是更简单吗?答案是做不到——因为这两件事互为前提,形成了一个死循环。

要定位,你得先有地图

"我在哪"这个问题,真正的意思其实是"我看到的东西,和地图上的哪一块对得上"。所以没有地图就说不清自己在哪。 就像拿着一张没标任何地名的地图,你是无法说出"我在哪个城市"的。

要建图,你得先知道自己在哪

"这里有一堵墙"这个记录,必须配上"我是在哪个位置看到它的"才有意义。 不知道自己位置的话,你只能记下"我面前有堵墙",没法把它拼到地图上的具体位置。

所以只能同时猜、同时改

实际做法是:先随便给个初始位置(比如"我在原点"),用这个假设去建图;建出来的图又反过来告诉你 "你的位置好像不太对",于是修正位置;修正后的位置又让地图更准……反复迭代,两者一起收敛。

这就是"SLAM"这个名字的字面意思:Simultaneous Localization And Mapping(同时定位与建图)。

那"回环"为什么特别关键?

因为不断迭代也解决不了"误差累积"这个根本问题——每一步都有小误差,而下一步是在上一步的错误结果上继续算的。

只有当你回到一个之前来过的地方时,才能一次性算出"我这一路总共偏了多少",然后全部修正掉。 举个直观的数字:每步只错 0.1%,走 1000 步就偏了整整一米;但只要有一个回环,这一米能被一次性抹掉。

问:为什么不直接用 GPS 定位?

室外可以,但 GPS 有三个短板:① 精度不够——民用大概几米,不足以让机器人避开墙角; ② 更新太慢——每秒一次左右,机器人走快了根本来不及;③ 室内完全没有信号——卫星信号穿不透楼板。

所以 GPS 通常只当"低频的辅助锚点"用,防止长时间漂移,而不是主要定位手段。

问:SLAM 就是把场景做成一张漂亮的 3D 模型吗?

不是。这是很常见的误解。SLAM 造的是"机器人自己能用的地图",不是给人看的效果图。 激光 SLAM 的地图可能只是一堆没有颜色的点;神经表示 SLAM 的地图甚至是一段能求导的函数。 只要够机器人定位和导航就行,好不好看不是重点。

问:那为什么还要研究"画得好看"的高斯泼溅?

因为"能渲染"本身也有用:AR/VR 需要把虚拟物体叠在真实画面上;机器人需要渲染一个"没拍过的角度"来确认自己是否来过这里。 而且能渲染就意味着它把外观也记住了,这反过来能帮助定位。这是最近几年最热的方向之一(第七章会讲)。

读完这一章你应该能回答

二、地图的"五种形态" 二十年技术演进,本质上是"装地图的容器"换了五次

如果把 SLAM 二十年发展压缩成一句话:地图从"一堆稀疏的点",变成了"一个能算、能求导、能自我修正的三维表示"。 每一次大换代,都是因为旧地图在某个场景下撑不住了,于是换了一种"装地图的容器"。

用"记笔记"来理解这五次变化。假设你要把一间会议室的样子记下来,供以后使用。

① 只记路标 —— 你在本子上写"西南角有个饮水机、门边有个白板"。 好记,但信息太少:出了这几个点,你什么都不知道。而且每个点你还得标注"我有多确定它在这"。

② 记关系网 —— 你改成写"饮水机在白板东边 3 米""白板正对门"。相对关系比绝对坐标稳定得多, 不容易被误差带偏。这就是"图"。

③ 记格子 —— 你拿一张坐标纸,逐格涂色标出哪里是墙、哪里是空的。 信息最全,但你必须涂满整个房间才罢休,纸不够用。

④ 记成一个公式 —— 你不画图了,直接写一句话:"凡距白板 1.5 米以内都是墙。" 极其紧凑,一句话描述整间屋子。但这句话太笼统,桌子腿、墙角这些细节全被抹掉了。

⑤ 记成一堆橡皮泥 —— 你直接捏一堆彩色橡皮泥团摆在桌上,有形状有颜色。 想看哪儿就把它们投影到那个方向,几乎瞬间看到结果。但泥团越摆越多,桌子放不下。

2.1 同一面墙,五种记法

下面这张图里,五个面板描述的是同一个场景:一面墙、墙上挂着一幅画、墙前放着一把椅子。 区别只在于"用什么方式把它记下来"。

① 只记路标点 1990 — 2005 年 墙 / 画 / 椅子 圈 = "我有多不确定" 点一多圈就互相打架 只能做小房间 路标超过几百个就算不动 ② 记成一张关系网 2005 — 2015 年 点 = 位置,线 = 约束 多数格子是空的 → 算得快 能撑起整栋楼 代价:要反复重算,不是即时的 ③ 记成一格格方块 2011 — 2018 年 这排 = 墙的位置 每格记:离墙多远 内存随房间变大 走到大广场就爆内存 ④ 记成一段函数 2021 — 2023 年 给一个坐标,它回答 "这里是墙吗?" 一整间屋子压成一段公式 公式太笼统 墙角和桌腿都会糊成一团 ⑤ 记成一堆彩球 2023 — 2025 年 每个球带:位置、形状、 颜色、透明度 投影到镜头 = 直接出画面 球也会越加越多 而且很难整体挪动
怎么看这张图

五个面板画的是同一个场景(一面墙 + 墙上挂的画 + 墙前的椅子),区别只在"用什么记下来"。 每个面板底部写着这一代的致命弱点——这正是下一代出现的原因。

① 路标点:只记三个点,每个点还带一个"我有多不确定"的圈。点少时没事,点一多,这些圈就会互相打架, 数学上表现为一张巨大的表格算不动了。

② 关系网:把点连成网,记录"谁在谁的哪边"。关键洞察是:这张网里绝大多数格子是空的, 所以可以只算非空的部分,计算量一下降下来。

③ 方块(体素):把空间切成小方块逐个填。信息最全,但内存随房间体积线性增长。

④ 函数:整间屋子压成一段可训练的函数。极小,但太笼统,细节都被平均掉了。

⑤ 彩球(高斯):一堆彩色椭球,投影到镜头就出画面。渲染快、能画没拍过的角度,但球会越加越多。

要记住的一句话:每次换代都是"换容器",而每个新容器都会带来新的麻烦——这就是下一代的起点。

2.2 每一次换代的来龙去脉

把上面那条时间轴拉成因果链。每一条都写清了"谁失效了、为什么、谁解决了":

1970s
— 2000s
第一代:滤波时代 —— 把所有东西塞进一个状态向量
做法是把机器人位置、朝向和所有路标的地标坐标全部拼成一个大向量,每来一次观测就整体更新一遍。 这个方法叫 EKF-SLAM。 卡在哪 它必须维护一张"谁和谁相关、各自多不确定"的大表格,表格大小是路标数量的平方。 1000 个路标就是 100 万格——算不动了,所以只能做小房间。
2000s
— 2010s
第二代:因子图时代 —— 把大表格换成稀疏的关系网
一个关键事实被发现了:机器人在某一秒的位置,其实只跟它前后几秒有关, 跟一千秒之前那会儿没什么关系。所以那张大表格里绝大多数格子本来是 0,白算了。 于是 因子图 和 g2o(2011)这类工具把问题改写成稀疏图优化,计算量从平方级压到接近线性级。 代价 失去了滤波那种"来一个数据就顺手更新一下"的即时性,需要反复重算。
2011
— 2017
第三代:稠密表示登场 —— 干脆不用特征点,逐像素来
DTAM 和 KinectFusion 证明了一件反直觉的事:不提取任何特征点、直接逐像素处理,效果反而更好。 KinectFusion 把所有深度图融合成一张单一的全局隐式表面(用 TSDF 表示),一边融合一边实时跟踪当前的深度帧。 卡在哪 逐像素计算量极大;而且体素内存随场景体积线性增长,走到一个大广场内存就爆了。
2015
— 2020
第四代:多传感器紧耦合 —— 一个不够就一起上
用单个摄像头有个死穴:纯单目看不出真实尺度(第五章会用动画演示这一点), 而且在白墙、黑夜这类场景里直接失效。 于是 VINS-Mono 用"视觉结构恢复 + 视觉惯性对齐"来恢复尺度;LIO-SAM 干脆把惯性预积分、激光里程计、GPS、回环检测 全部放上同一张因子图。 关键 精度不再是靠单一传感器硬堆出来的,而是靠传感器之间互相约束。
2021
— 2023
第五代:神经隐式表示 —— 地图像一段可训练的函数
iMAP 第一次证明:单独一个小神经网络就能当作实时 SLAM 的完整场景表示,边跑边训练,不需要预先在别的数据集上训练。 卡在哪 这种网络是"全局"的——改动一个地方会牵动全身,导致重建结果总是糊糊的(叫 过度平滑),也没法扩展到整栋楼。
2023
— 2025
第六代:显式可微原语 —— 用一盒橡皮泥替代一个函数
3D 高斯泼溅 用一堆显式的高斯椭球表示场景,渲染速度比"逐点问神经网络"快了几个量级。 MonoGS 第一次做到以高斯为唯一表示做近实时 SLAM。 新麻烦 内存仍然随场景线性增长;而且和"能形变的神经点"不同,这一大堆椭球在修正回环误差时不好整体挪动。
问:这五代是"一个淘汰一个"吗?

不是。它们更像不同工具,各自还都在用:小场景用滤波反而更简单可靠; 大场景用因子图;要渲染就上高斯。新技术不是替代旧技术,而是多了一种选择。

问:为什么"地图表示"这么重要?感觉只是存数据的方式变了而已。

因为地图表示决定了你能做什么运算。稀疏点云能算"最近邻居",但没法渲染画面; 体素能渲染但改起来贵;神经网络能渲染又能求导,但会糊; 高斯能高速渲染又容易优化,但内存吃紧。 不是你有了算法再选表示,而是表示本身划定了算法的边界。这就是为什么每次换表示都会带来一波新方法。

问:那现在应该学哪一代?

建议按顺序理解,但重点学第二代和第三代——因子图是今天几乎所有系统的骨架, 体素/TSDF 是理解主流的必经之路。第四代之后都是在这两者之上的改进。第六代(高斯)是当前的研究热点。

读完这一章你应该能回答

三、激光雷达这条线 一场关于"怎么存点"和"要不要挑点"的竞赛

激光 SLAM 二十年的故事可以概括成一句话:它一直在想办法"少算一点"。 先是想少看几个点(只挑重要的),后来发现挑点这件事本身太累,干脆全看(不挑点), 于是压力全压到了"怎么快速找到最近的那个点"上——结果这条线后半程的突破,几乎全是数据结构的突破,而不是算法的突破。

3.1 先搞懂激光雷达是怎么"看"世界的

想象你站在一个漆黑的房间里,手里只有一支会旋转的激光笔和一块秒表。

你朝正前方按下激光笔,它打到墙上反弹回来,你掐表——用了 0.00000002 秒。 因为光速是已知的(约每秒 30 万公里),时间就能换算成距离:这面墙离我 3 米。

然后你把激光笔转一个很小的角度,再量一次;再转,再量……转完一圈,你就把整个房间的轮廓量了一遍。

激光雷达就是把这件事全自动化的机器:它每秒转 10–20 圈,每圈在不同高度上同时发出几十束激光(叫"几十线"), 每秒钟产生几十万到上百万个测距结果。

下面这三个面板,展示的是点云是怎么一个点一个点攒出来的。

① 发出一束激光 量出这一个方向的距离 家具 1 束光 → 1 个点 ② 转个角度,再量 每转一点,就多一个点 家具 已扫过一小段 → 5 个点 ③ 转完一圈 = 一圈轮廓 这一圈的几百个点,就叫"一帧" 家具 整圈轮廓,连家具也描出来了
怎么看这张图

① 一束激光 = 一个点。雷达转到一个方向,发一次脉冲,量出到障碍物的距离,得到唯一一个坐标点。 就这么简单——它不"拍照",它只是不停地在量距离。

② 转一点,就多一个点。角度每变一点,就多一个点。点越攒越多,轮廓就慢慢浮现出来。

③ 转完一圈,得到这一圈的完整轮廓。这一圈的几百到几千个点打包在一起,就叫一帧 (这里"帧"的含义)。 第二圈再扫一遍,就得到第二帧。一直扫下去,点云就越来越密。

要记住的关键点:点云里的点没有编号、没有行列、没有顺序。 你没法说"第 3 行第 5 列那个点",只能说"离这个坐标最近的点是哪个"。 后面所有的技术难点,都源于这一点。

3.2 第一个分歧:要不要先"挑出重要的点"?

假设雷达一秒给你 100 万个点。你打算怎么用?

早期方法(LOAM 那一代)的想法很自然:这么多点太浪费了,先挑出有信息量的用。 哪些点有信息量?墙角(能确定两条墙的交线)和墙面(能确定一个平面)。其余的点丢掉。 这个动作叫 特征提取。

但十几年后,FAST-LIO2 反过来说:挑点这个动作本身才是最大的麻烦,不如不挑。 这不是偷懒,论文给出的理由有三条:

理由一:挑点的规则要人手写,而且换个雷达就得重写

判定"哪些点算墙角",需要人工设计一套规则。问题是:机械旋转式雷达和固态雷达的扫描图案完全不同, 上一套规则在新型号上就不管用了。每换一种设备,就要重新调一遍。

理由二:挑的时候会丢掉细节

真实环境里有很多"不太像墙角也不太像平面"的结构——桌腿、门槛、栏杆、电线。 严格的特征规则会把它们当噪声丢掉,而这些细节恰恰在某些场景里是唯一能用来定位的东西。

理由三:不挑之后,代码反而更简单

全部点直接参与计算,就没有"特征提取模块"。代码量大幅下降,出错的地方也少了。 代价只是计算量变大——而计算量可以用更好的数据结构解决。

老办法:先挑出重要的点 LOAM / LeGO-LOAM · 2014 / 2018 年 平面点(落在墙上) 边缘点(落在棱角上) 其他点:直接丢掉,不参与计算 代价:桌腿这类"不够规整"的结构被当成噪声丢掉了 新办法:一个都不挑,全拿去算 FAST-LIO2 · 2022 年 每个点都要参与"我对齐得准不准"的计算 连桌腿、门槛这些零碎结构也都用上了 换雷达不用改代码:它不认识"特征" 代价:计算量变大 → 下一节讲怎么解决
怎么看这张图

两个面板画的是完全相同的场景(一条走廊 + 一个墙角 + 一件家具),区别只在"用哪些点"。

左边(老办法):只有绿点(平面点)和红点(边缘点)被选中参与计算,灰点全部丢弃。 注意那件家具——它的腿和边缘既不完全是平面也不完全是棱角,很容易被规则当成噪声扔掉。

右边(新办法):所有点都参与,蓝色小点轮流闪烁表示"大家都在被计算"。 左下角那三个零碎点的位置,正是"不够规整、容易被丢掉"的结构。

这个转变的意义:问题从"怎么设计更好的挑点规则"变成了"怎么让所有点都算得够快"。 于是战场就转移了——转移到下一节这个数据结构问题上。

3.3 真正的瓶颈:怎么快速找到"最近的那个点"

"不挑点"听起来很爽,但马上就遇到一个问题:你凭什么知道新扫到的点,和地图里哪个点是"同一个地方"?

做法是比较——对每个新点,在地图里找离它最近的几个点,看距离够不够近、方向对不对得上。 这个动作叫"找最近邻居"。雷达一秒给 100 万个点,每个点都要问一次, 所以"找最近邻居"这个操作会被执行几百万次——它的快慢,直接决定整个系统能不能实时跑。

为了快速回答这个问题,人们发明了专门的"数据容器"。最有名的是 k-d 树—— 它把空间反复二分,像查字典一样层层缩小范围。

但传统 k-d 树有个致命前提:它假设数据是一次性给齐、排好序、之后不再变的。 而 SLAM 完全相反——机器人一边走一边往地图里加点,还要删掉走远了的老点。 每次加点都要重建整棵树?那就不用跑了。

用"找书架上的书"来理解这件事。

最笨的办法:书乱七八糟堆在地上。要找《三体》,只能一本本翻,翻到第 47 本才找到。

k-d 树的办法:把书按字母分到 A–F、G–L、M–R、S–Z 四个书架;每个书架内部再细分。 找《三体》先去 S–Z 那格,再找"三",三步就找到了。这就是"树"的意义——层层缩小范围。

SLAM 的麻烦在于:新书在不停地运进来,而且有些书还得下架。 如果每次运进一本新书,你就把整个书架推倒重排一遍,那你这辈子都在整理书架。

ikd-Tree 的解法:新书先随手插到对应格子里;当发现某个格子塞得太满、深得离谱时,只把那一格重新整理一下—— 不碰其他格子。这样既不耽误使用,又保持了"找书快"。

不整理:树越来越歪,找一个点越来越慢 新点一直往同一侧插进来 第 1 步 第 2 步 第 3 步 第 4 步 第 5 步 最坏情况:要一路走到最深那层 ← 实时系统最怕这个 定期揉匀 整理后:层数变浅,每次都快 只重排"塞得太满"的那一小块 第 1 步 第 2 步 第 3 步 同样多的点,层数从 5 降到 3 → 查询快一倍 它比传统 k-d 树多做了四件事 ① 边跑边加点,不用重建整棵树 ② 能删掉过期的点(走远了的老地图)
怎么看这张图

左边是问题。地图不停地加点,如果都按"比它大放右边、比它小放左边"的规则硬塞, 树就会越来越偏、越来越深。找最深处那个点时,得一层一层走 5 步。 在实时系统里,这种偶发的"慢一下"足以导致跟踪丢失。

右边是解法。发现某条分支太深时,就把那一小块局部拆开重排,让树重新匀称。 同样多的点,层数从 5 降到 3,查询快一倍——关键在"只动那一小块",不推倒全部重来,所以不会让机器人卡顿。

ikd-Tree 一共比传统 k-d 树多做了四件事(后两条在图外补上):
① 边跑边加点,不用重建整棵树;② 能删除过期的点;
③ 能在树上直接做"抽稀",控制地图规模不会无限膨胀;④ 发现某边太深时局部旋转重平衡。

要记住的一句话:这四条合起来,解决的就是"地图必须能边建边改"这个实时 SLAM 的硬需求。 后来的 Faster-LIO 干脆放弃树结构、改用"按格子分桶"的 iVox,又快了一大截——但那是同一个思路的延续:换容器。

3.4 另一个坑:一帧点云不是"同一瞬间"拍的

这个问题很隐蔽,但很致命。

雷达"转一圈"需要时间,比如 0.1 秒。而在这 0.1 秒里,机器人一直在动—— 它可能往前走了 20 厘米,也可能转了 3 度。

结果就是:同一帧里的第一个点和最后一个点,其实是从两个不同位置、不同角度看到的。 如果算法假装它们来自同一时刻、同一位置,算出来的墙就是歪的。这叫 帧内运动畸变。

① 把一帧当成"同一瞬间":墙被拉歪了 扫描用了 0.1 秒,这 0.1 秒里机器人也在走 这一刻它在走 真实的墙(笔直的) 算法以为的墙(斜的) 为什么会歪? 最后一个点其实是从右边 那个位置看到的,却被当成 "和第一个点同一位置" → 走得越快,歪得越厉害 ② Point-LIO 的做法:每个点在它被"扫到"的那一刻就归位 承认"点不是同时采的",然后按各自时刻补偿 每个点沿着箭头滑回"它真正该在的位置" 补偿完之后: 点重新落回一条直线,墙直了。 额外好处: 不必等"攒够一帧"才输出 → 里程计能更新得极频繁, 因此能跟上飞快运动
怎么看这张图

上面那张是"不管它"的后果。真实的墙是笔直的(深灰粗线),但因为扫描的 0.1 秒里机器人一直在往前跑, 算法把最后扫到的点当成"从起点看到的",于是它算出来的墙面是斜的(红色虚线)。走得越快,歪得越厉害。

下面那张是 Point-LIO 的思路。它承认"这些点不是同时采到的", 然后给每个点单独补偿——按它被扫到的那一时刻、机器人所在的位置,把它挪回正确的地方(绿色点沿着箭头滑向墙)。 挪完之后,点重新落回一条直线。

顺带解决了另一个问题。如果能逐点处理,就不必"攒够一整帧再算"。 这意味着机器人的运动估计可以更新得极快——论文里这正是它能跟踪"人类挥舞手臂"那种剧烈运动的原因。

3.5 一整条线的世代表

把前面这些串起来,就是激光 SLAM 的完整演进。每张卡右边写的是它卡在哪,下面写的是它怎么破:

LOAM / LeGO-LOAM
2014 / 2018
处理一帧要花约 100 毫秒(这是 Faster-LIO 论文里的实测数)。机械雷达攒一帧本来就要等,再花这么多时间就更慢了
提取边缘点 + 平面点两类特征,用两步 Levenberg-Marquardt 分开求解;LeGO-LOAM 再加点云分割去噪 + 地面先验,专门为嵌入式平台瘦身
LIO-SAM
2020
对"整张全局地图"配准,帧数一多就越来越慢
改成只对局部一小撮关键帧配准;把整车状态全放上一张因子图——惯性预积分因子 + 激光里程计因子 + GPS 因子 + 回环因子,配套做关键帧筛选和旧帧淘汰
FAST-LIO2
2022
手工特征模块是整个系统最大的工程量,换一种雷达就得重新设计一遍
完全不做特征提取,直接拿原始点和地图配准(细微结构也能用上、天然适配各种扫描方式);地图改用 ikd-Tree 维护,支持增量加点、删点、抽稀、动态重平衡
Faster-LIO / iG-LIO
2022 / 2024
树结构本身仍有天然的随机访问开销
Faster-LIO 用 iVox 增量体素 + 并行近邻查询,固态雷达下单帧可达 1000–2000 Hz;iG-LIO 把 GICP 配准约束和惯性约束统一在一个最大后验估计里,用体素拟合出的表面协方差来估扫描噪声
Point-LIO
2023
按帧累积必然产生帧内畸变,而且输出频率被"帧率"锁死
逐点处理:每个激光点在它真实的采样时刻立刻融合,不攒帧 → 畸变消失,输出频率接近点的采样率 → 能跟踪极剧烈的运动

几条"反方向"的支线,也值得知道

3.6 差异速查表

系统后端怎么算地图用什么存挑不挑特征最本质的那个不同
LeGO-LOAM两步 LM 优化特征点云挑(边缘/平面)加了地面约束和去噪,主打轻量嵌入式
LIO-SAM因子图局部关键帧子集挑多传感器因子融合 + 只对局部配准
FAST-LIO2迭代 EKFikd-Tree不挑原始点直接配 + 增量 k-d 树
Faster-LIO迭代 EKFiVox不挑并行近邻查询,1000–2000 Hz
Point-LIO迭代 EKF逐点(不攒帧)不挑点在采样时刻就融合,没有帧内畸变
KISS-ICP优化抽稀后的点云不挑不用 IMU,极简,换雷达免调参
iG-LIO迭代 EKF增量体素不挑GICP 与惯性约束统一在最大后验框架里
LOG-LIO迭代 EKF体素 + 面片不挑Ring FALS 实时法向估计 + 分层匹配

读完这一章你应该能回答

四、把激光和摄像头合起来用 "一个管形状,一个管颜色"——但难在怎么合

激光能测准"东西在哪",但不知道"它长什么样";摄像头能看到纹理和颜色,但说不清"它离多远"。 这两个缺点刚好互补,所以把两者合起来几乎是必然的选择。这条线二十年的进展不在于"要不要合", 而在于怎么合——从"各跑各的、最后拼一下",到"合起来放进同一张地图互相约束"。

4.1 先看清两种传感器各自的"盲区"

① 只有激光雷达 有准确的三维形状,但一片灰白 这是沙发?箱子?还是别的? 分不出来——只有形状,没有信息 长处:距离准到厘米级 长处:不受光照影响,黑夜一样用 短处:没有颜色纹理,认不出"是什么" ② 只有摄像头 看得出是什么,但说不清离多远 "哦,是一把红色的沙发" 但它离我 2 米还是 5 米? 照片看不出真实大小 长处:信息极其丰富,能认出东西 长处:便宜、体积小、耗电低 短处:距离不准;白墙/黑夜直接失效 ③ 两者融合 形状来自激光,颜色来自照片 "一把红色的布艺沙发, 离我 3.2 米,宽 1.4 米" 形状+距离来自激光,颜色来自照片 于是你可以:渲染没拍过的角度 用颜色/纹理做回环识别 难处:怎么知道哪个像素对应哪个点?
怎么看这张图

三个面板画的是同一张沙发,分别是三种传感器配置"眼中的它"。

① 只有激光:绿色的点勾出了沙发的形状——你能看出"这里有个东西,大概这么高、这么宽", 但它是沙发还是箱子,你分不出来。因为激光只测距离,不记录颜色。

② 只有相机:这不是点云,而是照片式的实心色块。你一眼就认出"这是红色的沙发", 但它离你 2 米还是 5 米?照片完全看不出来——因为把物体放大一倍、距离也拉远一倍,投影到照片上一模一样。

③ 融合之后:点云保留了激光的准确形状和距离,每个点又带上了从照片取到的颜色。 于是你同时知道"是红色沙发"和"离我 3.2 米、宽 1.4 米"。

这条线二十年的核心难点就一句话:怎么知道照片里的哪个像素,对应激光点云里的哪个点? 两个传感器视角不同、频率不同、还各自有误差。"怎么对齐"就是全部的难度所在。

4.2 四个阶段:从"各干各的"到"共用一张地图"

R3LIVE
2022
激光地图缺外观信息,视觉地图缺几何精度
简单分工:激光惯性里程计负责几何结构,视觉惯性里程计负责纹理渲染, 最后输出一张稠密的着色点云。两者像"并行干活的同事"——各干各的,最后把成果拼起来
FAST-LIVO
2022
两个子系统各建各的图,信息并没有真正打通
把激光和视觉紧耦合成两个互相依赖的子系统联合估计状态;关键设计是视觉部分 尽量复用激光已经建好的点云地图——把图像小块挂到地图点上,直接最小化"亮度差",不提取任何视觉特征
FAST-LIVO2
2025
激光测量和图像测量的"维度"不一样,很难塞进同一次更新里
用 ESIKF + 序贯更新解决维度不匹配——把不同传感器的测量排队一个个更新; 反过来激光点的平面先验还提升了图像对齐的精度(而且这个先验会动态精化); 两者融进同一个体素地图,还加了按需光线投射、实时曝光估计、考虑光束发散的测距噪声模型
LIV-GaussMap
2024
体素地图只能表达几何,没法"渲染一个新角度的画面"
用尺寸自适应体素的激光惯性系统先初始化场景表面的高斯和每一帧的位姿, 再用视觉的光度梯度去优化高斯的"质量与密度";每个高斯带球谐系数, 用来承载"从不同方向看颜色不一样"(也就是反光)

趋势判断

五、摄像头这条线 最便宜的传感器,但有三个天生的硬伤

摄像头是所有传感器里最便宜的(几十块钱)、信息最丰富的(一张照片几百万个像素), 但它有三个天生的缺陷:① 一个摄像头看不出真实大小;② 怕光照变化和白墙; ③ 分不清"是东西在动"还是"我在动"。视觉 SLAM 的整部历史,基本就是在跟这三个硬伤搏斗。

硬伤① 难在哪?给你看一张照片,里面有栋楼。你能看出它是 10 米外的三层小楼,还是 100 米外的三十层大楼吗? 看不出。因为把物体放大 10 倍、距离也拉远 10 倍,投影到照片上完全一样。 这叫尺度不可观测。

硬伤② 难在哪?特征法靠"找有特点的小块图案"来跟踪,但白墙、走廊、磨砂玻璃上没有任何可辨认的图案,算法就瞎了。 而且它对光照很敏感——同一面墙,中午和黄昏的照片差很远。

硬伤③ 难在哪?镜头里有个路人走过。从像素角度看,"路人向右移动 50 像素"和"相机向左移动"产生的效果几乎一样。 这就是动态物体为什么这么难处理。

5.1 三种做法:到底用哪些像素来算?

面对一张照片,第一件事是决定用哪些像素来做计算。这个选择决定了整个方法的性格。

① 特征法 MonoSLAM / PTAM / ORB-SLAM 找不到特征 只挑有辨识度的"角点/斑点"(蓝十字) 优点:算得少、不怕光照变化 缺点:白墙那块(红色闪烁) 一个点都挑不出来 → 直接失效 代表:ORB-SLAM 系列至今仍是主流 ② 直接法 LSD-SLAM / DSO / DROID-SLAM 白墙也算! 每个像素的"亮度"都参与计算 优点:白墙、弱纹理也能用 缺点:亮度是它唯一的依据, 所以光照一变就乱 代表:DROID-SLAM 精度高但吃 GPU ③ 半直接法 SVO(面向无人机设计) 先挑少量小块快速求位姿, 但每块内部算全像素 优点:极快极轻,专为无人机设计 缺点:需要一个还不错的初始位姿 代表:SVO,至今仍是轻量方案首选
怎么看这张图

三个面板是同一个房间(有窗户、家具、还有一块什么都没有的白墙),区别只在"用多少个像素来算"。

① 特征法:只在有辨识度的位置挑点(蓝色十字——窗户角、家具角、墙角)。白墙那块(红色闪烁) 一个点都挑不出来,所以那片区域等于"看不见"。好处是算得少,而且因为比较的是"角点的位置"而不是"亮度", 它对光照变化不敏感。

② 直接法:整个画面铺满网格,每个像素的亮度都参与计算,白墙那块也一样(绿色小点均匀闪动)。 好处是白墙、弱纹理也能用;代价是"亮度"成了唯一的依据,所以光照一变(比如自动曝光),算法就乱了。

③ 半直接法:折中——只挑几个小块(橙色方框)来快速求位姿,但每块内部算全像素。 极快极轻,代价是需要一个还不错的初始位姿(因为它靠小块对齐来找位姿,初始差太远就对不上)。

一句话记住这个区别:特征法用位置(角点在哪),直接法用亮度(像素值多少),半直接法两者都用一点。

5.2 硬伤①的解法:怎么把"真实大小"找回来

只有摄像头:照片能对应无穷多种"真实尺寸" 同一个画面,可以有两种完全不同的解释 相机 照片里树就是这么高 解释一:0.5 米高的小树苗,长在 2 米外 解释二:5 米高的大树,长在 20 米外 两种解释拍出来的照片一模一样 → 无法判断谁对 加上 IMU:尺度被"钉"住了 IMU 能测加速度,积分两次就是位移 → 基线长度已知 目标 位置 A 位置 B 1.2 米(IMU 量出来的) 视差 知道基线 1.2 米 + 知道视差角 → 距离唯一确定 算出:树高 5.2 米,距离 18.4 米 这就是"尺度恢复":用一段已知长度的位移,把整张地图的 真实大小一次性确定下来。 代价:IMU 自己有偏置和噪声,还得先估出重力朝哪
怎么看这张图

左边是单目的困境。取景框里那棵树,"0.5 米高的小树苗长在 2 米外"和"5 米高的大树长在 20 米外", 拍出来的照片完全一样。所以算法无法判断真实尺寸——它只能给出"形状正确、但整体大小任意"的地图。

右边是加 IMU 之后。IMU(惯性测量单元,一个测加速度和角速度的小芯片)能测出相机的实际加速度, 积分两次就得到真实位移。一旦"我从 A 移动到了 B,距离 1.2 米"这个事实确定, 再结合两条视线的夹角(视差),三角形的形状就唯一确定了——树高 5.2 米、距离 18.4 米,都能算出来。

为什么这条线后面还有那么多论文?因为 IMU 自己也不干净——它有零偏漂移、有噪声, 而且必须先估出"重力朝哪个方向"。怎么把视觉和惯性揉在一起、怎么在刚启动时快速收敛、 怎么处理旧数据——每一个都是难啃的骨头。这就是 VIO(视觉惯性里程计)这十几年的主战场。

5.3 VIO 的两大流派

先解释这两个词

优化派代表:VINS-Mono

"每步都把所有笔记重读一遍"

它的流程是:先纯视觉恢复结构,再做视觉-惯性对齐——一次性算出尺度、重力方向、速度、IMU 零偏; 然后用紧耦合的非线性优化来跟踪;回环用一个 4 自由度的位姿图保证全局一致,还能存地图、读地图、合并地图。

ORB-SLAM3 把这条推得更远:连 IMU 初始化阶段也完全靠最大后验估计, 并且用多地图系统配合改进的场景识别,在长时间丢失跟踪之后还能重新接上。

VINS-Mono 2018 · ORB-SLAM3 2021

滤波派代表:MSCKF / OpenVINS

"带着判断往前走,边看边改"

MSCKF 的核心贡献是推导出一个测量模型,用来表达"同一个静止物体被多个相机位置看到"产生的几何约束。 妙处在于这样就不用把每个三维点的位置放进状态向量,计算量对特征数量只是线性增长。

ROVIO 走的是"直接法 + 卡尔曼滤波"。OpenVINS 作为研究平台, 特别强调 FEJ 一致性处理——通俗说就是"别让估计过于自信",同时内置在线标定和仿真器。

MSCKF 2007 · ROVIO 2015 · OpenVINS 2020

两大流派共同的地基:IMU 预积分

"把上千次小测量打包成一个约束"

两帧图像之间可能有上千次 IMU 测量。如果每个都塞进优化,问题会大到算不动。

IMU 预积分(2017)把这上千次测量打包压缩成一个"相对运动约束"。

难点在于旋转发生在"流形"上——通俗说就是"三个角度不能像普通数字那样简单相加" (转 350° 再转 20°,结果不是 370° 而是 10°)。这篇论文给出了正确的处理方式和可用的求导公式,所有现代 VIO 都建立在它之上。

On-Manifold Preintegration 2017

给你一个选择建议

"我该用哪个?"

要精度、有算力 → 优化派(VINS-Mono / ORB-SLAM3)。这是目前大多数系统的选择。

要省算力、要快 → 滤波派(MSCKF / OpenVINS)。嵌入式平台更合适。

要快速验证算法 → OpenVINS 内置仿真器,可以先在电脑上跑通了再上硬件。

选型没有标准答案,取决于你的算力和精度要求

5.4 三个难题是怎么被一点点磨掉的

难题一
尺度与起跑
单目看不出尺度 → VINS-Mono 用"视觉惯性对齐"恢复 → VI-DSO(2018)把尺度和重力方向直接纳入模型, 在初始化之后继续联合优化,并提出动态边缘化来应付变量的剧烈变化 → 纯惯性初始化优化(2020)专门处理"刚开始只有 IMU 在动"的阶段 → DM-VIO(2022)用延迟边缘化(维护第二张图、推迟边缘化,以便需要时用新的线性化点重建先验) + 位姿图 BA + 多阶段 IMU 初始化器 + 动态加权的光度因子。 看趋势 这一串的演化方向很清楚——把"初始化"从一个必须尽快熬过去的阶段,变成可以随时重来、持续优化的过程。
难题二
全局一致性
室内跑得好好的,一出门没有 GPS 就不行了 → GVINS 把 GNSS 的原始观测量(卫星伪距 + 多普勒频移) 而不是"解算好的位置"直接融进因子图,再用由粗到细的在线标定把"全球坐标"和"局部状态"连起来,实现室内外无缝衔接 → P³-VINS 更进一步,用上了 PPP(精密单点定位)的伪距、载波相位、相位模糊度三类因子。 有意思的点 它不直接用 GPS 算出的位置,而是用更原始的卫星信号——原始信号里信息更多,也更容易和其他传感器"平等地"放在一张图上。
难题三
动态环境
路上有人有车,怎么知道动的是它、不是自己? → DynaSLAM 用 Mask R-CNN(一个实例分割网络)+ 多视图几何 检测动态物体,并且把被它挡住的背景补回来 → DynaSLAM II 把动态物体自己的运动轨迹也输出(多目标跟踪 + SLAM 紧耦合)→ Dynam-SLAM(2023)用立体场景流和 IMU 松耦合做动态检测(显式建模场景流的不确定性), 然后把动态特征紧耦合进优化、转成"虚拟路标"。 值得注意的转向 动态特征不再被丢弃,而是变成了可利用的约束。这是个观念上的变化——以前把动的物体当噪声,现在把它当"会动的路标"。
问:那到底该用单目、双目,还是 RGB-D?

单目:最便宜,但有尺度问题(必须配 IMU),而且初始化麻烦。
双目:靠两个镜头之间的固定距离直接算出深度,尺度天然已知,不用 IMU 也行;代价是要标定、算量大、体积大。
RGB-D(彩色图 + 深度图,比如 Kinect):直接给深度,最省事;但深度相机靠红外投影工作,室外阳光下会失效,量程也有限。

选择建议:室内小场景用 RGB-D 最省心;室外用双目 + IMU;预算极紧用单目 + IMU。

问:VIO 和 SLAM 是一回事吗?

不完全是一回事。里程计(Odometry)只负责推算"我移动了多少",不管全局地图,走久了必然漂移。 SLAM 则额外包含回环检测和全局优化,所以能长时间保持准确。

实践中常说"VIO",往往是一个 SLAM 系统里的前端部分。论文标题里写 VIO 的系统,通常也带轻量回环。

读完这一章你应该能回答

六、神经隐式表示 把整张地图变成一段可以被"训练"的函数

前五章的地图都是"存着一堆东西"——点、体素、面片。2021 年有人换了个思路:地图不存东西了,改成一段函数。 问它"坐标 (x, y, z) 这里是不是墙",它回答"是"或"不是",还顺便告诉你"这里是什么颜色"。 函数当然比一堆数据小得多,但它有两个天生的毛病:会糊(细节被平均掉)和不好改(修正误差时没法局部揉一下)。 这条线后面所有论文都在解决这两个问题。

先理解"隐式"是什么意思。

显式地图=一本相册。你想知道"客厅有沙发吗",得翻到客厅那张照片看。信息实实在在存在那儿。

隐式地图=一个会画画的人。你问他"客厅有沙发吗",他凭记忆现场给你画一张。 他没存任何照片,但能根据你的提问生成答案。信息藏在他的"记忆"里——也就是网络的参数里。

好处是:这个人能回答任何你没拍过的角度,因为他在"生成"而不是"查找"。 坏处也很明显:他会记混、会把细节画糊;而且你让他"把沙发往左挪 20 厘米",很难只改这一处而不影响别的记忆。

6.1 神经 SLAM 到底在算什么

它的工作流程可以用一句话概括:沿着视线问一路,"这里有没有东西?什么颜色?"然后累加起来,得到一个像素。

相机朝一个方向看出去,沿这条视线撒一串采样点 相机 这里密度最大 = 表面在这 问网络 f(x, y, z): "这里有东西吗?什么颜色?"(问了几十万次) 把沿途的答案"按远近加权"累加起来 近 ←—— 沿视线的位置 ——→ 远 最高那根 = 表面的贡献最大 累加的结果 = 这个像素应该是什么颜色 → 和真实照片同一位置的像素对比 → 差多少,就反过来调整网络参数 反复几万次,网络就"记住"了这个场景
怎么看这张图

上半部分:相机朝一个方向看出去,算法沿着这条视线(橘色虚线)撒一串采样点(紫色圆点)。 每个点都拿去问神经网络:"你这里有多少东西挡着?是什么颜色?"

注意圆点越靠近真实表面越大越亮——这表示网络在那个位置的回答是"这里密度很高,有东西"。 过了表面之后,圆点又变小变暗了。

下半部分:把沿途所有答案按远近加权累加。近处的贡献大、远处的贡献小。 累加出来的结果就是这个像素应该是什么颜色(那个红方块)。

最后一步很关键:把这个颜色和真实照片上同一位置的像素对比,差多少就反过来调整网络参数,让它下次答得更准。 反复几万次,网络就"记住"了整个场景。这个过程就叫训练,而地图就是训练完的网络本身。

它和传统方法的根本区别:传统方法在"查找"地图,神经方法在"生成"画面。 所以神经方法能做到传统方法做不到的事——渲染一个你从来没拍过的角度。 代价是它算起来慢得多(每个像素都要问几十次网络),而且在实时 SLAM 里还得边跑边训练。

6.2 为什么"纯函数"会糊成一个球

iMAP 用一个小神经网络充当整张地图。它证明这条路可行,但也暴露了一个根本缺陷——这个缺陷花了三四年才被绕开。

① 一个全局网络:改一处,牵动全身 iMAP 用的方式(2021 年) 为了记住"这里有个墙角", 整个网络的参数都得动一动。 想建的 vs 实际得到的 尖锐的墙角 (你想要的) 一团糊 (实际得到的) ② 加一层"局部特征格子":只影响附近 NICE-SLAM / ESLAM / Co-SLAM 的做法(2022–2023 年) 只动这一格 旁边的格子 几乎不受影响 每个空间格子有自己的"小抄"(一串数字) 要记住墙角?只改那一格的小抄就够了。 网络本身可以保持很小,不用什么都记。 墙角保住了 而且更省算力 代价:这些格子本身要占内存,格子越细越占
怎么看这张图

左边是 iMAP 那一代的困境。整个场景的信息都被压进一个"全连接"网络—— 每层的每个节点都连到下一层的每个节点。这种结构的后果是:为了记住"这里有个墙角",几乎所有参数都得调整, 而调整的副作用会把别处的细节一起抹掉。最后重建出来的墙角,就成了一团糊(对比左下角"想要的"和"实际得到的")。

右边是解法:在空间上铺一层"特征格子"。每个格子存一小段数字(叫特征向量,可以理解为"这一小块地方的小抄")。 要记住墙角,只改那一格就够,网络本身保持很小很专注,不再牵一发动全身。右下角可以看到墙角被保住了。

这一招的代价:格子本身要占内存,格子越细内存越大。所以后面几篇论文就是在"格子怎么设计更省"上做文章—— NICE-SLAM 用多层次网格;Vox-Fusion 用八叉树,只给"有东西的地方"开格子; ESLAM 用三个轴对齐的平面代替三维格子(省一个维度);Co-SLAM 用两种编码混合(一种负责平滑、一种负责高频细节)。

6.3 神经 SLAM 的世代表

iMAP
2021
纯网络不含局部信息 → 重建糊、扩不到大场景
第一次证明单独一个小网络就能当实时 SLAM 的唯一场景表示——在线训练、不需要预先训练别的数据;跟踪 10 Hz、建图 2 Hz
NICE-SLAM / Vox-Fusion
2022
同上,细节全被平均掉
NICE-SLAM 引入多层次的网格特征,把不同尺度的局部信息注入网络;Vox-Fusion 用八叉树索引的体素嵌入——只在有东西的地方开格子,实现可扩展的细节重建
ESLAM / Co-SLAM
2023
特征网格还是慢,而且大多数方法只能优化少量"当前活跃"的关键帧
ESLAM 用多尺度轴对齐特征平面 + TSDF 混合表示(三张平面代替一个三维格子,省内存),不需要预训练;Co-SLAM 提出 one-blob 编码(平滑连贯)+ hash 网格(收敛快、抓高频细节)的联合编码,好处是采样策略允许对所有关键帧做全局 BA,而不是只盯着几个活跃帧
Point-SLAM / Loopy-SLAM
2023 / 2024
网格类表示在"回环校正"时不好改——格子是钉死的
把神经特征挂在点云上,点的密度随输入信息的丰富程度自适应增长;Loopy-SLAM 更进一步:用点基子地图 + 全局场景识别触发回环 + 位姿图在子地图之间做刚性对齐——点基表示让地图修正可以高效完成,不需要保留所有历史输入帧
PIN-SLAM
2024
神经 SLAM 普遍缺回环,或者只有局部一致,走久了就飘
第一个完整的隐式神经 SLAM(里程计 + 回环检测 + 全局一致建图三件套齐活);用稀疏可优化的神经点表达隐式表面,做不需要找对应点的"点对隐式模型"配准来求位姿;神经点天生有弹性、能形变,回环时随全局位姿一起变形
问:"隐式"到底是什么意思?听起来很玄。

就是"不直接把答案存起来,而是存一套能算出答案的规则"。

打个比方:显式地图像一本相册——想知道客厅什么样,去翻照片;隐式地图像一个会画画的人——你问他,他现场画给你。 所以隐式表示能回答"你没拍过的角度",代价是它可能画错、画糊。

问:那为什么不干脆全用隐式表示?

因为它有两个硬伤:① 算得慢(每个像素都要问几十次网络,实时跑很吃力); ② 回环修正困难(发现前面走偏了,要把整张地图挪一下,而隐式地图"挪"起来很别扭)。

所以实践中,神经表示目前更多用在"重建和渲染",而不是"稳定定位"。要定位,激光或视觉惯性方案仍然更可靠。

读完这一章你应该能回答

七、3D 高斯泼溅 2023 年横空出世,2024 年冲进 SLAM,2025 年补短板

3DGS(三维高斯泼溅)是这几年视觉领域最轰动的一件事。它的想法简单到有点粗暴: 与其用一个神经网络去"算"每个像素的颜色,不如直接在空间里摆一堆半透明的彩色椭球, 把椭球"泼"到屏幕上混合起来,画面就出来了。这样做渲染快了几个量级, 坏处是——椭球会越摆越多,显存顶不住。这条线在 SLAM 里的进展,就是"怎么边跑边建,同时控制椭球的数量和位置"。

用橡皮泥捏房间来理解。

NeRF 的做法:请一位雕塑家。你问他"朝这个方向看能看到什么颜色",他凭记忆现场描述给你听。 灵活,但每问一次都要等,而且他给出的永远是"描述"不是实物。

3DGS 的做法:直接抓一把彩色的半透明橡皮泥团摆在空间里。你想看哪个角度, 就把这些泥团投影到那个视角的玻璃上叠起来——一秒出结果。因为泥团是"实物",投影这件事可以高度并行,快得飞起。

那问题在哪?泥团会越摆越多。想看清细节就得摆更多更小的泥团; 一个房间摆几百万团之后,你的桌子(显存)就放不下了。 而且想把整堆泥团整体挪一下(回环校正),比挪一张网格难得多。

① 空间里摆一堆半透明彩色椭球 每个椭球带:位置、形状、颜色、透明度 看到新区域就加新椭球 → 数量暴涨 → 显存吃紧 而且椭球是"散"的,想整体挪动很难 投影 混合 ② 投到镜头上叠起来 = 直接出画面 这个过程可以高度并行,不用逐个像素问网络 快在哪:投影+混合天生适合显卡并行 神经方法渲染一个像素要问几十次网络, 高斯方法几毫秒就能出一整帧 这就是为什么它能做"实时渲染地图"
怎么看这张图

左边:空间里摆着一堆半透明彩色椭球。每一个椭球带四项信息:在哪(位置)、多大什么形状、什么颜色、有多不透明。 一堆椭球凑在一起,就"堆"出了场景的样子(图中这几个椭球合起来大概是一张沙发)。

中间:"投影 + 混合"。把这一堆椭球投影到"镜头看到的那个平面"上,按远近和透明度叠加起来。

右边:屏幕上就出现了画面。注意这个画面是朦胧的、有点"发光"的——因为椭球是半透明的, 叠加后会互相渗透。这正是 3DGS 的视觉特征。

为什么它比神经方法快?神经方法要"逐个像素去问网络",而高斯方法是"把一堆现成的东西投影下来叠加"—— 后者天生适合显卡并行计算,几毫秒就能出一整帧。

但注意左边的三条红字:椭球会越加越多,显存吃紧;而且椭球是散的, 想把它们整体挪动一下(比如发现前面走的路线偏了,要整体校正)非常困难。这两点就是 2024–2025 年那批论文在解决的问题。

7.1 世代演进:从"能用"到"能装在机器人上"

3DGS / InstantNGP
2023 / 2022
NeRF 那种"逐点查询"渲染太慢,训练要按小时算
3DGS 用显式三维高斯基元(位置 / 形状 / 不透明度 / 球谐系数),通过可微光栅化渲染,训练和渲染都快得多;InstantNGP 的多分辨率哈希编码把训练压到秒级;Plenoxels 更极端,证明连神经网络都可以不要——稀疏三维网格加球谐系数就够了
MonoGS
2024
原版 3DGS 需要离线算好的精确位姿,根本没法当 SLAM 用
第一个以 3DGS 为唯一表示的近实时 SLAM,而且支持单目(只有一个摄像头):直接对高斯去优化相机位姿(在"李群"上求解析导数)、对高斯形状做各向同性正则化(防止椭球被拉成细长条到处穿墙)、加几何验证
SplaTAM / GS-SLAM
2024
把离线合成的 3DGS 拿来重建整个场景时,缺一套"什么时候该往这儿加椭球"的策略
SplaTAM 用轮廓掩码(silhouette mask)优雅地表达"这块区域到底建过没建过",从而快速判断某处是否需要新加高斯,用一个未定位的 RGB-D 相机就能做高保真重建;GS-SLAM 提出自适应高斯扩展策略——动态增删高斯以覆盖新看到的区域并改进旧区域,跟踪时用"由粗到细"的方式挑可靠高斯
Photo-SLAM
2024
学术方案算力需求太高,落不到真实的机器人上
hyper primitives map——同时用显式几何特征做定位、用学到的隐式光度特征表达纹理;基于几何特征主动致密化;高斯金字塔训练让多级特征渐进学习;最终能在 Jetson AGX Orin 这类嵌入式平台上实时运行
WildGS-SLAM / Splat-SLAM
2025
真实环境有人走动;只有 RGB 时缺几何先验;地图和位姿的优化互相牵制
WildGS-SLAM 用浅层网络 + DINOv2 特征预测一张不确定性地图,用它引导剔除动态物体(不需要深度信息也不需要显式语义分割);Splat-SLAM 是第一个全局优化的纯 RGB 方案,提出 DSPO(视差-尺度-位姿联合优化)做 BA,高斯地图会随着关键帧位姿和深度更新而动态适配
问:3DGS 为什么不能直接拿来跑 SLAM?看起来它已经能建出很好的场景了。

因为原版 3DGS 的前提是"你已经告诉它每张照片是从哪儿拍的"——它需要先用传统方法(SfM)算出精确位姿,然后再优化场景。

而 SLAM 恰恰要自己算出这个位姿。所以直接搬过来是循环依赖,用不了。MonoGS 那一批论文做的,就是把"位姿"也变成可优化的量。

问:这条线现在最大的麻烦是什么?

两个:① 椭球数量随场景线性增长(去个大商场,显存就爆了); ② 回环校正困难——发现前面走偏了,要把这一大堆椭球整体挪动,代价很高。

(对比一下:神经点方案因为点本身"能形变",做这件事就轻松得多,这是 PIN-SLAM 的优势。)

问:我要做机器人导航,现在该上高斯吗?

建议先不要当主定位方案。高斯 SLAM 目前更适合"重建与可视化"—— 比如让你有个好看的三维地图、能渲染没拍过的角度。定位的稳定性和实时性,激光/视觉惯性方案仍然更成熟。

如果确实想用,可以看看 Photo-SLAM(2024),它是少数明确标榜"能在嵌入式平台实时跑"的方案。

读完这一章你应该能回答

八、深度学习最先吃掉了哪一块 不是整个 SLAM,而是"匹配"和"检索"这两个子问题

深度学习进入 SLAM 的方式很有讲究:它没有一上来就替换整个系统, 而是先从两个"最像模式识别"的子问题下手——①两张图里哪些点在描述同一个东西(特征匹配)、 ②这张图我来过没有(场景检索)。这两个问题的答案都难以用公式写全,但人一看就知道对不对, 正好是神经网络最擅长的。等这两块站稳了,才逐渐有了端到端方法和基础模型。

为什么从"匹配"和"检索"下手?因为这两个问题有个共同点:答案很难用规则写出来,但人一看就知道对不对。

"这两张照片里,哪个点在拍同一个墙角?"——传统做法是给每个点算一串数字(叫描述子),希望"同一个墙角在不同角度下这串数字相近"。 但"相近"这件事很难写全规则:换了光照呢?换了角度呢?换了尺度呢?这正是神经网络的主场——给它大量例子,它自己学出"什么算像"。

而 SLAM 的主干(怎么优化位姿、怎么维护地图)反而一直是传统方法占优, 因为那些部分有明确的数学模型,可解释、可控,出了错也知道错在哪。神经网络在这些地方反而容易犯"说不清为什么"的错。

8.1 "匹配"在做什么

同一个房间,相机动了一点点,拍了两张照片 —— 找出哪些点在拍同一个东西 时间 t 时间 t+1(相机稍微移动了) 绿线 = 判断为"同一个物理点" 红线 = 匹配错了(必须剔除,否则定位会歪) 注意地上那两个点:它们在两张图里看起来很像,但其实是地面上的不同位置 → 最容易配错 SuperGlue 的贡献:不只找匹配,还要判断"这个匹配可不可信",把不可信的丢掉 LightGlue 的贡献:容易匹配的时候算得快,难的时候才多花力气
怎么看这张图

上面是同一个房间在前后两个时刻的两张照片(相机稍微移动了一点)。蓝色小点是算法挑出来的"有辨识度的位置" (窗户角、家具角、墙角、地面上的点)。

算法要做的事是:判断左边照片里的某个点,和右边照片里的哪个点,是空间里的同一个东西。 绿色连线是判断正确的匹配;红色虚线是判断错误的——比如地面上的点,在两张图里看起来都很像,就可能被配错。

为什么一个错误匹配很要命?因为后面算相机位置时,会把这些匹配当作"约束"。 一个错误的约束会把算出的位置往错的方向拉,导致整个轨迹歪掉。

深度学习带来了什么改变?传统做法是"分别给每个点算一串数字特征,然后比谁最像"—— 只看单个点,不看全局。而 SuperGlue 把两张图的所有点放在一起, 用注意力机制全局地推理:"如果 A 点和 B 点匹配,那 C 点就不该和 D 点匹配"。 它还会输出一个"这个匹配有多可信"的分数,让不可靠的匹配被剔除掉。

8.2 四块阵地,各自的进展

① 特征匹配

"两张图里哪个点是同一个东西?"

SuperGlue(2020)用图神经网络 + 可微最优传输,把两组特征点放在一起联合求解匹配关系,还能拒绝"根本没法匹配"的点。

LightGlue(2023)重新审视了 SuperGlue 的多个设计决策,给出更简单有效的改进。 它最关键的品质是自适应:图像对容易匹配时(重叠大、外观变化小)推理明显更快,内存和算力都更省。

LoFTR(2021)换了条思路——干脆不检测特征点:先在粗糙层做逐像素的稠密匹配,再到精细层精化,靠 Transformer 的自注意力和交叉注意力提取特征。

SuperGlue 2020 · LoFTR 2021 · LightGlue 2023 · SiLK 2023

② 回环与场景识别

"这地方我来过没有?"

DBoW2(2012)用"二进制词袋"做快速场景识别——把图像里的局部特征归类成"单词",整张图就变成一个"词袋",比较词袋就知道像不像。它是 ORB-SLAM 系列回环检测的技术基础。

Scan Context(2018)另辟蹊径:不做直方图、不需要训练,直接记录"可见空间的三维结构", 因此对视角变化(比如反方向重访同一个地方、转弯)不敏感。Scan Context++(2022)进一步做到对横向偏移也鲁棒——针对的是城市道路上不可避免的车道级变化。

LCDNet(2022)同时做地点识别和 6 自由度相对位姿估计,用非平衡最优传输构造可微的相对位姿模块,在反向回环这个难点上大幅领先。

LCR-Net(2024)把回环检测和重定位统一进一个框架,用位姿感知的注意力,不再依赖耗时的鲁棒位姿估计器。

DBoW2 2012 · Scan Context 2018/2022 · LCDNet 2022 · OverlapTransformer 2022 · LCR-Net 2024 · SALAD 2024

③ 端到端深度 VO

"直接从图像算出我走了多远"

DeepVO(2017)第一次证明单目视觉里程计可以端到端做——直接从 RGB 图像估计位姿,不需要先验知识或额外参数来恢复绝对尺度。

UnDeepVO(2018)用无监督方式,训练时借助立体像对来获得带绝对尺度的位姿和稠密深度。

DROID-SLAM(2021)是转折点:通过一个 Dense Bundle Adjustment(稠密光束法平差)层, 对相机位姿和逐像素深度做循环迭代更新——精度大幅提升,而且灾难性失败显著减少。

DPVO(2023)把稠密光流换成跟踪图像小块的循环网络结构,保持精度的同时大幅降低计算量。

DeepVO 2017 · UnDeepVO 2018 · D3VO 2020 · DROID-SLAM 2021 · DPVO 2023

④ 基础模型进入 SLAM

"让通用大模型来当零件"

DUSt3R(2024)提出 pointmap(点图)表示——网络直接预测规范坐标系下的三维点图, 同时保留"每个像素对应场景中哪个三维点"这层隐式关系。好处是统一了单目和双目的三维重建, 而且不需要相机标定、不需要初始位姿。

MASt3R-SLAM(2025)是第一个以双视图三维重建先验为基础的实时 SLAM: 做点图匹配、跟踪与局部融合、图构建与回环、二阶全局优化,还能处理"通用且随时间变化的相机模型"。

SLAM3R(2024)用前馈网络直接从 RGB 视频预测统一坐标系下的三维点图。

DINOv2 / SAM 作为特征提取和分割的基础模型,被下游 SLAM 直接调用 (比如 WildGS-SLAM 就用 DINOv2 特征判断"哪里可能是动态物体")。

DINOv2 2023 · SAM 2023 · DUSt3R 2024 · SLAM3R 2024 · Metric3D v2 2024 · MASt3R-SLAM 2025

读完这一章你应该能回答

九、多台机器人一起干 难点从"能不能协同"变成了"出错怎么办"

多台机器人各自建图,然后互相交换信息、拼成一张大图。听起来只是"跑很多遍单机 SLAM 再合并", 但真正难的地方在于:两台机器都以为"我们到过同一个地方",其实其中一台认错了。 这种错误一旦被采信,整张地图就会被拧成一团。所以这条线的演进方向是:从"能协同",走向"能自动识别并拒绝错误协同"。

想象三个朋友分头逛一个陌生商场,然后通过对讲机汇总路线。

甲说:"我在优衣库门口。" 乙说:"我也在优衣库门口。" ——如果两人真的在同一个门口,他们的地图就能对齐,这是好事。

但如果商场里有三个优衣库(或者乙看错了楼层),他们就会把两张不相干的图强行拼在一起, 结果整张商场地图被拧成麻花,而且比不拼还糟。更麻烦的是,事后很难发现是哪儿出的错。

所以这条线的核心技术问题就是:怎么在没人监督的情况下,判断"这次协同到底是不是真的"。

集中式:所有数据汇总到一台服务器 COVINS · LAMP 2.0 中央服务器 优点:全局信息完整,容易做对 缺点一:服务器一挂,全队失联 缺点二:机器人一多,带宽顶不住 分布式:只在能通信的邻居之间直接交换 DOOR-SLAM · Kimera-Multi · Swarm-SLAM · D²SLAM · DCL-SLAM ✕ 这条"我们见过"其实是错的 优点一:没有单点故障,谁掉线都不影响别人 优点二:通信量小,机器人多了也能撑 缺点:机器之间必须先"达成一致",算法复杂
怎么看这张图

左边是集中式:每台机器人(蓝色小圆点)把数据发给中央服务器,服务器统一算完再发回去。 优点是全局信息完整、容易做对;缺点是服务器一挂整队就瘫,而且机器人一多,带宽就顶不住。

右边是分布式:每台机器人只和自己通信范围内的邻居直接交换数据,没有中心。 优点是没有单点故障、通信量小。

注意那根红色虚线和旁边的 ✕。它表示"两台机器误以为到过同一个地方"的错误协同—— 右下角那个绿圈里的叉号,表示这个错误被算法自动识别并剔除了。

为什么"剔除错误协同"是这条线最重要的事?因为一旦错误的协同被采信,整张地图会被拧成一团,而且事后很难发现。 分布式系统里没有中心可以统揽全局判断,所以每台机器都必须自己有能力识破这种错误—— 这就是 DOOR-SLAM 的"分布式一致集最大化"、Kimera-Multi 的"分布式渐进非凸"在解决的事。

9.1 九个系统的关键差异

系统架构最本质的那个不同
Multi-UAV-SLAM 2017集中式协同 SLAM 的早期架构原型:一台中央服务器 + 多个智能体 + 无线通信
DOOR-SLAM 2020完全分布式用分布式两两一致测量集最大化(PCM)剔除机间伪回环——因为不怕虚假回环了,就可以用更激进的参数而不牺牲召回率;只靠点对点通信,前端不交换原始传感器数据(省带宽)
COVINS 2021集中式面向"多智能体 + 多用户 AR"的大规模协同视觉惯性 SLAM
Kimera-Multi 2022完全分布式用分布式渐进非凸(GNC)做鲁棒位姿图优化,能识别并拒绝由感知歧义导致的机间和机内错误回环;最终输出全局一致的度量-语义三维网格(不只是轨迹,还有带语义的模型)
LAMP 2.0 2022集中式DARPA 地下挑战赛 Team CoSTAR 的方案:一个能适配不同里程计来源的单机前端接口 + 可扩展的多机前端 + 鲁棒的多机后端;回环检测模块能处理并优先排序迅速增长的候选
DiSCo-SLAM 2022分布式第一个把轻量的 Scan Context 描述子用于多机 SLAM,实现数据高效的机间观测交换;两阶段(全局 + 局部)优化应对"不知道彼此初始位置"的情况
Swarm-SLAM 2024去中心化四个性质:可扩展 / 灵活 / 去中心化 / 稀疏;邻机管理模块持续跟踪"谁在通信范围内、已经交换过什么数据";机间回环优先级排序降低通信量、加快收敛;ROS 2 实现在五个数据集 + 三种自组网上实测
D²SLAM 2024去中心化分布式面向空中集群:区分近场估计(近距离的精确相对状态)和远场估计(一致的全局轨迹);前端同时支持立体和全向相机以应对空中视场受限;分布式优化在网络延迟下仍保持扩展性和韧性
DCL-SLAM 2024完全分布式前端无关——可以快速迁移到不同的激光雷达 / 平台 / 场景;机间回环用三级通信流水线做到数据高效

十、事件相机 一种不拍"画面"、只报告"哪里变了"的传感器

普通相机每秒拍 30 张完整照片;事件相机不拍照片。它每一个像素只干一件事: 一旦这个像素的亮度变化超过阈值,就立刻发一个信号说"我这里变了",并附上是变亮了还是变暗了。 这样做的好处简直是作弊——没有运动模糊、明暗反差能到 120 dB(普通相机约 60 dB)。 坏处也很致命:场景不动的时候,它什么都不输出。

把普通相机想象成每 1/30 秒拍一张全班合影;把事件相机想象成一个坐在教室后排的记录员。

合影的问题在于:如果有人在快门那一瞬间快速挥手,照片上就是一道糊影——你不知道手到底在哪。

记录员不一样:他不管谁坐着不动,只记"谁动了"。所以哪怕有人飞速挥手, 他也能精确记下"第 3 秒手抬起来了,第 3.02 秒放下了"——时间精度极高,而且完全没有"模糊"这回事。

但如果全班纹丝不动呢?记录员的本子上就是一片空白。 所以事件相机不能单独用,它必须和普通相机(或 IMU)搭配。这也正是这条线上所有论文的共同结构。

普通相机:每 1/30 秒拍一张完整画面 快门打开的这段时间里,物体一直在动 → 照片上留下一道糊影 第 1 帧 球清晰 第 2 帧 开始糊了 第 3 帧 糊成一条线,"它在哪"丢了 三个问题: ① 动得越快,糊得越长 ② 明暗反差大的场景(逆光)   亮的全白、暗的全黑,中间全丢 ③ 最高只有约 60 dB 动态范围 事件相机:每个像素只在"自己亮度变了"的时候发一个信号 不动的区域一声不响;动过的地方留下一串带精确时间戳的点 静止区域 → 完全空白(没有信息) 静止区:什么都不输出 球摆动的轨迹 → 沿路爆出一串点,每个点都带时间戳 好处: ① 完全没有运动模糊 ② 动态范围 120 dB   逆光、夜晚也能用 ③ 时间精度到微秒级 但静止时"瞎"了 → 必须配普通相机或 IMU
怎么看这张图

上面是普通相机的困境。快门打开的这段时间里,球一直从左边移到右边, 于是照片上留下的不是"一个球",而是一道糊影。球动得越快、糊得越长,"它此刻到底在哪"这个信息就丢了。

另外还有两个问题:逆光场景里亮的全白、暗的全黑,中间层次全丢;动态范围只有约 60 dB。

下面的事件相机完全换了个机制。它不"拍"画面,而是每个像素自己盯着自己的亮度。 亮度变了就发一个带时间戳和正负号的信号;没变就一声不吭。 所以你会看到:静止区域一片空白,运动轨迹上爆出一串点。

这个机制带来的两个特性,也决定了它的两个用途:
① 没有运动模糊 + 极高动态范围 → 适合高速运动和极端光照(无人机穿越、隧道出入口);
② 静止时没输出 → 必须和普通相机或 IMU 配合使用——这正是这条线所有系统都是"事件 + 帧 + IMU"三件套的原因。

10.1 这条线上做了什么

问:事件相机是不是更先进的相机,迟早会取代普通相机?

不会。它们采集的是两种完全不同的信息:普通相机记录"哪里亮", 事件相机记录"哪里变了"。

静止的时候事件相机一片空白——你没法用它来看一张照片、识别一个静止的物体。 所以它是互补关系,不是替代关系。目前所有主流方案都是"事件 + 普通帧 + IMU"三件套。

问:那我什么时候该考虑用它?

三个典型场景:① 高速运动(无人机快速穿越、机械臂高速动作); ② 极端光照(隧道出入口的高对比、夜间、强逆光); ③ 要求极低延迟(事件相机的响应延迟是微秒级)。

如果你的机器人是在光照良好的室内慢慢走,用不上——省下这个钱。

十一、术语总表 用大白话讲一遍,读论文卡住时回来查

下面这些词在读论文时会反复出现。每个都给了"一句话大白话"和必要的补充,按主题分了组。

基础概念

SLAM —— Simultaneous Localization And Mapping,同时定位与建图。一边走一边搞清楚"我在哪"和"周围什么样",两件事互相纠正。

定位 / 建图 —— "我在哪" / "周围什么样"。两者互为前提,必须一起解。

里程计(Odometry) —— 只靠自身传感器推算"我移动了多少",不管全局地图。走久了必然漂移。

漂移(Drift) —— 误差滚雪球。每步错一点点,累积成大偏差。像闭眼走直线。

回环检测(Loop Closure) —— 认出"这地方我来过",从而一次性修正累积误差。SLAM 能长时间运行的关键。

位姿(Pose) —— 位置 + 朝向,一共 6 个数字(3 个位置 + 3 个角度)。

紧耦合 / 松耦合 —— 紧耦合是"把多个传感器的数据放进同一个方程里一起解";松耦合是"各自解完再合并结果"。紧耦合更准,更难写。

退化(Degeneracy) —— 环境缺少足够的几何特征,导致某个方向的位置算不出来。比如一条笔直无特征的隧道里,前后方向就是退化的。

数学与优化

因子图(Factor Graph) —— 把估计问题画成图:圆点是待求的量(位姿、路标),方块是已知的约束(一次观测、一段惯性积分)。求解 = 调整圆点让所有约束尽量同时满足。

BA(光束法平差) —— 同时优化"相机位置"和"三维点位置",让它们投影回图像后和观测到的位置尽量吻合。SLAM 最核心的优化。

卡尔曼滤波 / EKF —— 一种"边走边修正"的递推估计方法,只维护当前状态和它的不确定性。EKF 是它的非线性版本。

ESIKF —— 误差状态迭代卡尔曼滤波。FAST-LIO 系列用的后端。"误差状态"指只估计小偏差而不是绝对量,数值上更稳定。

协方差矩阵 —— 一张"谁和谁有关、各自有多不确定"的表格。EKF 时代它的大小是状态数的平方,所以扩展到大规模就崩。

边缘化(Marginalization) —— 滑动窗口优化时"丢掉旧数据"的操作。不可逆,而且会锁死当时的线性化点。

延迟边缘化 —— DM-VIO 提出的技巧:推迟边缘化,维护第二张图,以便需要时用新的线性化点重建先验。

流形(Manifold) —— 通俗说就是"三个角度不能像普通数字那样直接相加"的空间(转 350° 再转 20° 等于 10°)。旋转就发生在流形上。

IMU 预积分 —— 把两帧之间成百上千次 IMU 测量"打包"成一个相对运动约束,免得每个采样都塞进优化。

鲁棒核函数 —— 一种"降低异常数据影响"的技巧。有它之后,少数错得离谱的匹配不会把整体结果带偏。

数据结构与地图表示

点云(Point Cloud) —— 一堆三维坐标点的集合,没有行列结构,通常也没有颜色。

体素(Voxel) —— 三维的"像素",把空间切成小立方体。

TSDF(截断符号距离场) —— 每个体素存"离最近的真实表面有多远",正数在外、负数在内,只看表面附近一定范围内的值(截断)。

k-d 树 —— 专为"找最近邻居"设计的数据结构,像查字典一样层层二分缩小范围。

ikd-Tree —— FAST-LIO2 提出的增量 k-d 树,能边跑边加点/删点、还能局部重平衡。解决"地图要能边建边改"的问题。

iVox —— Faster-LIO 用的增量体素结构,放弃树、改用"按格子分桶",支持并行近邻查询。

surfel(面片) —— 用一个带位置、法向、半径的小圆片代表一块表面,比点信息更多、比网格更轻。

八叉树(Octree) —— 一种"只在有东西的地方继续细分"的树,用来省内存。

特征网格 / hash 网格 —— 在空间里铺格子,每格存一小段数字(特征向量)。让神经网络"只看局部就改局部",避免全局牵动。

球谐系数 —— 用来表达"同一个点从不同方向看颜色不同"(也就是反光和光泽)的一组数字。

视觉与神经表示

特征点 / 角点 —— 图像里有辨识度的小块图案(墙角、斑点),可以被稳定地在多张图里找到。

描述子 —— 把一个局部图像块压成一串数字,希望"同一个物理点在不同角度下这串数字接近"。

光度误差 —— 直接比较"预测的像素亮度"和"实际拍到的亮度"的差距,而不是比较角点位置。

重投影误差 —— "这个三维点投影回图像后应该落在哪"和"实际观测到落在哪"的差距。特征法用的指标。

NeRF(神经辐射场) —— 用神经网络表示场景:给它位置和视线方向,它回答"这里的密度和颜色"。渲染时沿视线累加。

隐式表示 —— 地图不存数据,而是一段能回答问题的函数。信息藏在网络参数里。

可微渲染 —— 渲染过程本身可以求导,所以"画面和照片的差距"能反向传播回去调整场景表示。

3DGS(三维高斯泼溅) —— 用一堆显式的半透明彩色椭球表示场景,渲染时把它们投影到屏幕叠加,速度比 NeRF 快几个量级。

过度平滑 —— 神经网络倾向给出"平均答案",导致尖锐的角落也被渲染成一团糊。

pointmap(点图) —— DUSt3R 提出的表示:网络直接预测每个像素对应的三维点,同时保留像素与场景的对应关系。

传感器与场景

LiDAR(激光雷达) —— 靠"发射激光 + 测量返回时间"来测距的传感器,输出点云。精度高,但没有颜色和纹理。

IMU —— 惯性测量单元,一个小芯片,测加速度和角速度。频率高(几百 Hz),但会漂移。

GNSS 原始观测 —— 卫星原始信号(伪距、多普勒),而不是已经算好的位置。信息更多,更容易和其他传感器联合优化。

帧内运动畸变 —— 一帧点云内部的点其实来自不同时刻、不同位置,导致这帧自身就是扭曲的。

事件相机 —— 不拍画面,只报告"哪个像素亮度变了"。没有运动模糊、动态范围极高,但静止时没输出。

time-surface —— 事件相机里的一种表示:把最近每个像素"最后一次变化的时间"做成一张图,用来提取边缘。

VIO / LIO / LIVO —— 视觉惯性 / 激光惯性 / 激光-惯性-视觉里程计。按使用哪几种传感器命名。

RGB-D —— 彩色图 + 深度图一起输出的相机(比如 Kinect)。

工程与评测

帧(frame) —— 一次完整的传感数据采集(一张图、一圈激光扫描)。

关键帧(Keyframe) —— 不是每一帧都值得存,挑出来的有代表性的帧。用来平衡精度和算力。

滑动窗口 —— 只保留最近一段时间的状态一起优化,旧的自然丢掉。控制算力规模的通用手段。

ATE / RPE —— 绝对轨迹误差 / 相对位姿误差。评测 SLAM 精度的两个标准指标。

Hilti-Oxford 数据集 —— 用毫米级真值、微米级验证的外参、硬件时间同步,把 SLAM 评测从"相对排名"推向"绝对精度"。

DARPA SubT —— 美国国防部的地下挑战赛。这个领域的"极限压力测试",很多方法都是为它开发的。

GNC(渐进非凸) —— 一种鲁棒优化策略:先宽容地接受所有数据,再逐渐收紧、逐步剔除异常项。Kimera-Multi 用它剔除错误回环。

ROS 2 —— 机器人操作系统第 2 代,机器人软件的通用框架。

十二、你的场景该选哪条路 点一下你的情况,看看推荐

这个领域没有"最好的方法",只有"适合你场景的方法"。下面按常见场景给了推荐路线和理由。

十三、还没解决的难题 来自 DARPA SubT 综述的冷静结论

这一节的内容来自一篇被广泛引用的综述(那个地下挑战赛的赛后总结)。它的价值在于说了实话: 在很多场景下 SLAM 确实"基本解决了",但真正让机器人失败的原因,跟论文里优化的那些指标基本无关。

六个还没解决的问题

如果你要选一个研究方向,这里可能是机会