🗺️ 视觉 SLAM 与状态估计

从"我在哪、周围长什么样"讲起:拆解经典 SLAM 流水线四大模块,对比五种传感器,读懂 ORB-SLAM3 / VINS / LIO-SAM / RTAB-Map,并落到人形机器人的腿式里程计融合与漂移修正
SLAM 位姿估计 视觉惯性里程计 回环检测 腿式里程计
🎯 本页学习目标
1. 能用一句话说出 SLAM 解决什么问题,并解释"位姿"的数学含义(位置 + 姿态,SE(3),6 自由度)
2. 能对比单目 / 双目 / RGB-D / 3D LiDAR / IMU 五类传感器的成本、精度与对人形的适用性
3. 能画出经典 SLAM 流水线的四个模块(前端里程计、后端优化、回环检测、建图),并说出每个模块"解决什么问题 + 一句话原理"
4. 能说出 ORB-SLAM3、VINS-Fusion、LIO-SAM、RTAB-Map 各自的传感器配置与适用场景,并列举 2024~2025 年 NeRF / 3D 高斯泼溅、语义 SLAM 两大趋势
5. 能解释人形机器人 SLAM 的三大难点,以及腿式里程计、脚底接触约束如何参与融合与漂移修正
建议用时:约 40 分钟

1 什么是 SLAM:同时定位与建图

SLAM(Simultaneous Localization and Mapping,同时定位与建图)回答两个互相纠缠的问题:① 我在哪里?(定位——估计机器人自身的位姿)② 周围环境长什么样?(建图——建立环境的几何表示)。这两个问题互为前提:定位需要一张地图作为参照,而建图又必须知道相机在每个时刻的位置。正因为这种"鸡生蛋"关系,SLAM 通常被建模为一个联合估计问题:同时优化"机器人位姿序列"和"地图中的路标/结构",让两者相互约束、一起收敛。

先搞懂"位姿":位置 + 姿态

机器人在空间中"在哪、朝哪看",不能只用一个坐标描述。一个完整的位姿(Pose)包含两部分:

SLAM 输出的核心就是一条位姿轨迹(每一时刻一个 T)加上一张地图。理解了"位姿 = SE(3) 上的 6 自由度量",后面读任何 SLAM 论文都不会被符号吓住。

💡 状态估计与 SLAM 的关系:状态估计是更大的课题——用传感器观测去推断机器人内部状态(位姿、速度、关节角度、IMU 偏差等)。SLAM 是状态估计在"同时需要地图"场景下的特例;而像 腿式里程计卡尔曼滤波 这类只估计位姿/速度、不需要地图的方法,属于纯状态估计。本页以 SLAM 为主线,但会反复用到"估计-观测-优化"这套状态估计思想。

人形机器人为什么需要 SLAM

2 传感器对比:没有"全能冠军"

SLAM 吃什么数据,取决于装什么传感器。下面是人形机器人场景下五类主流传感器的对比。记住一条工程铁律:没有一种传感器在所有维度上最优——成本、精度、鲁棒性三者不可能同时拉满,所以实际系统几乎都是多传感器融合

传感器测量什么参考成本(人民币量级)精度 / 优点鲁棒性短板人形适用性
单目相机 灰度/彩色图像 百元~千元 便宜、轻、信息丰富(可做语义);可运行单目 SLAM 尺度模糊(无法直接测距)、依赖纹理与光照、需运动初始化 常作辅助视觉,与 IMU 组成单目视觉惯性;纯单目较少作为主定位
双目相机 左右两路图像 → 视差测距 约 ¥3000~6000 被动测距恢复真实尺度;室内外光照适应性好 依赖基线长度与标定,弱纹理(白墙)视差失效,中远距离精度下降 头部/躯干常用,配合 IMU 做视觉惯性里程计(VINS 类)
RGB-D 相机 彩色图 + 逐像素深度(ToF/散斑) 约 ¥1000~6000 直接深度、稠密、近距离重建质量高,SLAM 最省心 主动光怕强阳光与黑色/反光表面;量程短(通常 0.2~10 m) 室内人形首选:头部装 RealSense D435 / Femto Bolt,配合 RTAB-Map 即可入门
3D LiDAR 激光点云(距离+角度) 数千~数万元 远距离、高精度、不依赖环境光照,点云天然适合建图 贵、重、功耗高;对镜面/玻璃/雨雾敏感;纯几何无颜色语义 重载/室外场景与科研平台(如 LIO-SAM 系统);头部安装负担大
IMU(惯性测量单元) 三轴角速度 + 三轴加速度 约 ¥10~500 极便宜、高频(数百~1 kHz)、短时非常准,提供重力方向 长时间必然漂移(积分两次得位移,误差爆炸);无法单独定位 任何系统标配:视觉/LiDAR 帧间的高频"桥梁",跌倒检测、姿态估计靠它

注:成本为 2024~2025 年公开渠道量级,随渠道与采购量浮动,仅用于建立"成本感"。

三条选型直觉

3 经典 SLAM 流水线:四大模块各司其职

无论系统叫 ORB-SLAM 还是 LIO-SAM,绝大多数现代 SLAM 都可以拆成下面四个模块。先记住总图,再逐个击破:

[① 前端里程计]  相邻帧特征匹配 → 增量位姿(短时,快但会漂)
        │
        ▼
[② 后端优化]    因子图/图优化 → 全局一致性(长时,慢但准)
        │
        ▼
[③ 回环检测]    词袋 DBoW2 → "我又回来了" → 全局约束
        │
        ▼
[④ 建图]        点云 / 栅格 / TSDF → 地图表示

点击下方按钮,逐模块查看"解决什么问题 + 一句话原理":

① 前端里程计(Front-end Odometry)
解决什么问题:相邻两帧(或很短一段时间)之间,"我移动了多少、转了多少"——提供增量位姿候选路标点
一句话原理:在图像里提取/跟踪特征(ORB 特征点、光流),匹配相邻帧的对应点,用对极几何(两帧三角化恢复 3D 点)或 PnP(已知 3D 点求相机位姿),通过最小化重投影误差解出相对位姿;IMU 则用预积分提供高频先验。特点:快、局部准,但误差会随距离累积。
② 后端优化(Back-end Optimization)
解决什么问题:把历史上所有帧的约束放在一起调整,压制噪声、抹平漂移,得到全局一致的位姿轨迹和地图。
一句话原理:把位姿与路标看成图的"节点",把观测(特征匹配、IMU 预积分、回环)看成"边",构造一个最小二乘问题——最小化所有重投影误差的平方和: min Σ ‖ π(T,P) − p ‖²,再用 g2o / GTSAM(iSAM2) 等库做非线性优化(高斯牛顿 / 列文伯格-马夸尔特)。这就是"图优化 / 因子图"的本质。
③ 回环检测(Loop Closure)
解决什么问题:认出"我现在又回到了以前到过的地方",从而给后端加一条全局约束,一次性修正长时间累积的漂移。
一句话原理:把特征描述子聚类成"视觉单词",每帧图像表示成词频向量,用 TF-IDF 加权后与历史帧比对相似度(经典实现 DBoW2);相似度超过阈值即判定回环,再把"当前位姿 ≈ 历史位姿"作为新约束丢进后端优化。这是 SLAM 系统"越走越不飘"的关键。
④ 建图(Mapping)
解决什么问题:把"位姿 + 观测"累积成一张可供导航、避障、交互使用的地图
一句话原理:按用途选表示:稀疏路标点云(ORB-SLAM 自带,轻量够定位)、2D 栅格地图(occupancy grid,导航规划最爱)、稠密点云 / 八叉树(OctoMap,可压缩可更新)、TSDF(截断符号距离场,体素融合,重建与机器人操作常用)。地图不是"照片",而是"供算法查询的空间数据结构"。
⚠️ 记住模块间的频率差异:前端里程计工作在相机帧率(30~60 Hz);后端优化以关键帧为粒度(几个 Hz);回环检测与全局优化只在"疑似回环"时触发。设计任何 SLAM 系统都要先想清楚:哪部分是高频、哪部分是低频、谁给谁提供先验。

图优化 / 因子图:一个直觉

不用被"图"吓到。想象你把机器人每次观测都写成一张"小纸条":"帧 5 看到路标 A,像素在 (x,y)"、"帧 5 到帧 6 的 IMU 预积分是 ΔT"、"帧 5 和帧 200 是同一个地方(回环)"。这些纸条就是因子。机器人的任务,是找到一组位姿和路标位置,让所有纸条上的预测都尽量吻合观测——吻合不了的差距(残差)平方求和,最小化它。这就是"最小二乘 + 因子图优化",GTSAM 的 iSAM2 还能在新增观测时增量更新,不必每次从头算。

4 代表系统:从特征法到 2024~2025 新趋势

下面四个开源系统几乎覆盖了视觉/激光 SLAM 的主流流派,是入门必读的"活的教科书"。每个给出一行定位 + 官方仓库;版本与论文信息已经过联网核实(2024~2025)。

系统流派 / 传感器一句话定位官方仓库
ORB-SLAM3 特征法;单目 / 双目 / RGB-D,可加 IMU 视觉 SLAM 的"黄金标准":多地图(Atlas)、视觉-惯性紧耦合、回环 + 重定位,论文 2021 年发表于 IEEE T-RO UZ-SLAMLab/ORB_SLAM3
VINS-Mono / VINS-Fusion 视觉惯性;单目 + IMU(扩展支持双目 / GPS) 香港科技大学开源:单目视觉惯性状态估计的经典(2018 T-RO);VINS-Fusion 是多传感器融合版,滑窗优化 + 回环 VINS-Mono / VINS-Fusion
LIO-SAM LiDAR 惯性;3D LiDAR + IMU 紧耦合 激光 SLAM 代表作(2020 IROS):因子图 + iSAM2 增量优化,ScanContext 回环;室外大场景鲁棒性强 TixiaoShan/LIO-SAM
RTAB-Map RGB-D / 双目 / LiDAR 通吃 "实时基于外观的建图":增量词袋回环 + 图优化,输出稠密 3D 网格/八叉树,ROS / ROS2 集成最好,入门最友好 introlab/rtabmap

流派速览:特征法 vs 直接法 vs 激光

2024~2025 新趋势:NeRF / 3DGS 与语义 SLAM

💡 学习顺序建议:先吃透 ORB-SLAM3(特征法、模块最清晰),再读 VINS(视觉惯性融合)、LIO-SAM(激光 + 因子图),最后看 3DGS 与语义 SLAM 论文。经典系统的思想不会过时,新趋势都是在经典四模块上加"更好的表示 / 更聪明的回环"。

5 人形机器人里的 SLAM:腿式里程计与漂移修正

把前面所有知识搬上双足,你会发现:人形机器人不是一个"装在轮子上的相机",而是一个会走、会跳、会俯身、脚底会打滑的复杂载体。它在 SLAM 上有独特的优势(更多可用约束),也有独特的难题。

人形独有的"免费传感器":腿式里程计与接触约束

三大难点:运动快、视野低、震动大

难点具体表现常用对策
运动快、机动性强 快速转头、起步急停、转身、下蹲,图像出现运动模糊,特征容易跟丢 IMU 高频补偿(视觉惯性紧耦合);提高相机帧率与快门速度;鲁棒特征(ORB 金字塔)
视野低、视角受限 相机装在头部约 1.2~1.7 m 高度,近处遮挡多、看到的地面占比大,远处特征稀疏 头眼 + 躯干/腰部多相机;结合腿式里程计补盲;建图时抬头观察策略
步态震动 落地冲击让 IMU 数据噪声大、图像抖动,角速度积分易出尖刺 IMU 滤波/去偏;接触时刻的冲击建模;视觉特征用运动补偿
⚠️ 不要照搬轮式/无人机的 SLAM 参数:人形机器人的 IMU 噪声特性、相机高度、运动模式都与轮式平台差异巨大。直接套用 EuRoC 数据集的调参结果,往往一上真机就发散。建议先做"仿真(04-04 的 MuJoCo/Isaac)+ 录包回放",再上真机。

人形 SLAM 的独特价值

反过来看,双足也带来轮式机器人没有的信息:接触约束腿式里程计让状态估计的短期精度更高;而人形机器人"要与人交互、要抓取",又让 SLAM 地图必须从"纯几何"走向"几何 + 语义 + 物体位姿"——这正是上一节语义 SLAM 趋势在人形场景落地的原因:机器人既要知道"我在哪",还要知道"红色杯子在哪、怎么够到它"。

6 入门实践路线:从"跑通"到"看懂"

SLAM 是典型的"纸上得来终觉浅"。建议按下面五步走,每一步都有明确产出;不要一上来就改源码,先建立"数据 → 前端 → 后端 → 地图"的体感。

1环境准备
Ubuntu 20.04/22.04 + ROS1/ROS2 + OpenCV + Eigen + Pangolin;准备好一台 RealSense D435(或任意 RGB-D)与一张录好的 rosbag 数据集
2先跑 RTAB-Map
官方仓库 introlab/rtabmap,一行命令 ros2 launch rtabmap_demos rtabmap_d435.launch.py;看回环检测如何"啪"地纠正轨迹
3再跑 ORB-SLAM3
编译 UZ-SLAMLab/ORB_SLAM3(依赖 Eigen3/OpenCV/Pangolin/DBoW2),用 TUM 或 EuRoC 数据集跑单目/双目;对比"开回环"与"关回环"的轨迹误差
4上视觉惯性:VINS-Fusion
港科大仓库,用 EuRoC 或自录"双目 + IMU"数据;体会 IMU 如何救回快速运动下的视觉丢失
5进阶:激光与前沿
有条件上 3D LiDAR(Livox Mid-360)跑 LIO-SAM;再读 3DGS-SLAM(MonoGS)与语义 SLAM 论文,试着把地图从"点云"升级成"语义场景图"
💡 标定是绕不开的第一课:跑 VINS/LIO 前,先做三件事:① IMU 内参标定(Allan 方差,工具 imu_utils);② 相机-IMU 外参标定(Kalibr);③ 相机/IMU 时间同步。跳过标定,系统精度直接腰斩——这是新手最容易踩的坑。

用 evo 量化"漂移有多严重"

判断 SLAM 系统好不好,不能靠眼睛看,要量化轨迹误差。装上 evo 工具,把估计轨迹与真值(动捕/VIO 真值)对齐,看 APE(绝对位姿误差)RPE(相对位姿误差)。修改参数前后各跑一次,误差曲线会直观地告诉你"回环到底值多少"。

7 常见误区:别被名字骗了

❌ "SLAM 就是建图"
错。SLAM 的核心是同时解决定位与建图,本质是位姿与地图的联合估计。地图只是副产品,而且不同任务要的地图完全不同(导航要栅格、重建要 TSDF、操作要语义)。
❌ "室内有 GPS,不需要 SLAM"
错。GPS 室内基本无信号,室外精度也在米级;而人形机器人操作、避障需要厘米级局部定位与局部地图。SLAM 与 GPS 是互补关系(VINS-Fusion 就支持"视觉惯性 + GPS"松/紧耦合)。
❌ "传感器越多越好"
错。未标定、不同步的多传感器是灾难——互相矛盾的数据会让优化发散。先做好时间同步与外参标定,再谈融合;宁缺毋滥。
❌ "跑通 demo 就等于会 SLAM"
错。demo 是"黑盒复现"。真正的能力是:知道漂移从哪来(前端?后端?回环?)、知道改哪个参数、能在真机失败时定位问题。建议用 evo 量化误差,把每个模块单独跑通一遍。
❌ "LiDAR SLAM 一定比视觉 SLAM 强"
错。室内白墙走廊、玻璃幕墙、镜面,激光点云同样退化;视觉便宜、自带颜色与语义,还能直接对接 VLA。工程上两者常做"视觉为主 + LiDAR 校验"的融合,而不是二选一。

8 本节自测

1. SLAM 中"位姿(Pose)"的数学描述是下列哪一项?
💡 解析:位姿 = 三维平移 t + 三维旋转 R,合起来是 SE(3) 上的 6 自由度量,通常写成 4×4 齐次变换矩阵。只给位置或只给姿态都无法完整描述机器人"在哪、朝哪看"。
2. 想做一台室内人形机器人的主定位传感器,下列哪个组合最"省心"且成本可控?
💡 解析:RGB-D 直接给深度,室内量程内重建质量高;IMU 高频补足快速运动与遮挡。纯单目有尺度模糊,纯 IMU 必然漂移,GPS 室内不可用。这也是 RTAB-Map + RealSense 成为入门标配的原因。
3. 后端优化(图优化/因子图)在整个 SLAM 流水线中的作用是?
💡 解析:A 是前端里程计的职责;B 是回环检测的职责;D 是建图模块的职责。后端把全部历史约束放进最小二乘,统一优化得到全局一致的轨迹——这是"越走越准"的保证。
4. 相比轮式机器人,人形机器人 SLAM 的典型难点不包括哪一项?
💡 解析:A/B/C 都是真实难点。D 说反了:人形机器人恰恰拥有"免费"的腿式里程计(关节编码器 + 正运动学)和脚底接触约束,它们是抑制漂移的独特优势,代表工作如 Cerberus2.0、Pronto。
5. 回环检测(Loop Closure)能一次性消除累积漂移,其经典实现 DBoW2 的核心思想是?
💡 解析:回环检测把特征描述子聚类成视觉单词,每帧表示成词频向量,再用 TF-IDF 加权与历史帧比对相似度,超过阈值即判定「我又回到了这里」,给后端加一条全局约束(见 3 节③)。A 是前端里程计的对极几何,C 是 IMU 积分(只会漂),D 是建图模块的表示。
6. 关于视觉 SLAM 的「尺度」问题,下列说法正确的是?
💡 解析:单目没有深度,只能恢复到「相差一个比例因子」的尺度;双目靠视差、RGB-D 靠逐像素深度,都能直接提供真实尺度(见 2 节)。人形机器人要抓取避障,尺度必须真实,所以主流是双目/RGB-D + IMU 或 LiDAR + IMU。
7. 下列哪一项是本节第 7 节明确指出要破除的「错误认知」?
💡 解析:B 正是要破除的误区——未标定、不同步的多传感器会让互相矛盾的数据使优化发散,应先做好时间同步与外参标定再谈融合,宁缺毋滥。A/C/D 都是本节第 7 节所强调的正确认知。
📌 本节要点速查:①SLAM=同时定位与建图,输出 SE(3) 上的 6 自由度位姿轨迹+地图,本质是位姿×地图的联合估计;②传感器无「全能冠军」,室内人形首选 RGB-D+IMU,IMU 高频便宜但纯积分必漂;③四模块:前端里程计(短时增量)→后端优化(全局一致)→回环检测(消漂移)→建图(按需选表示);④人形靠腿式里程计+脚底接触约束抑制漂移,难点是运动快、视野低、震动大。
📌 本节小结:SLAM = 同时定位与建图,核心输出是 SE(3) 上的位姿轨迹与地图,本质是"位姿 × 地图"的联合估计;五种传感器各有所长,主流方案是"视觉/LiDAR + IMU"紧耦合;经典流水线四模块——前端里程计(短时增量)、后端优化(全局一致)、回环检测(消除累积漂移)、建图(按需选表示)——构成了 ORB-SLAM3、VINS、LIO-SAM、RTAB-Map 的共同骨架;2024~2025 年,3D 高斯泼溅 SLAM 与语义 SLAM 正在把"几何地图"升级为"可渲染、可理解"的场景表示;落到人形机器人,腿式里程计与脚底接触约束是抑制漂移的独特武器,而运动快、视野低、震动大是必须正视的三大难点。
🤔 思考题: 1. 单目 SLAM 有尺度模糊,双目和 RGB-D 没有——那给单目加 IMU 之后,尺度问题能被解决吗?为什么?(提示:IMU 的加速度积分含有重力,能提供绝对尺度)
2. 如果人形机器人被人抱起来、平移到了地图上的另一个位置,SLAM 系统靠什么"重新找到自己"?(提示:重定位 / 回环 / 全局定位)
3. 足底接触约束为什么能抑制漂移?想想"支撑脚在世界系中不动"这条约束,在因子图里对应什么"边"?

10 参考来源

以下链接均为论文 / 官方仓库 / 官方文档,已通过联网检索核实(检索时间:2026 年前后);若打不开请以论文编号搜索备用入口。