本文档属于 Robotics Tutorial 项目,作者:Pengfei Guo,达妙科技。采用 CC BY 4.0 协议,转载请注明出处。
SLAM方向综合教学大纲¶
版本: v11.0 | 日期: 2026-05-14
定位: 面向完成
01_C++主线基础的工程师,系统掌握 SLAM 理论、核心优化库、主流系统精读与综合实战。 数据基础: 100+ SLAM 开源项目源码级分析;GTSAM 4.3+ / g2o 最新版 / Ceres 2.x / PCL 1.14 / OpenCV 4.x,具体 API 与版本特性以各项目当前官方文档和 release notes 为准。 总投入: Part 1 理论基础 1 章 ~2 周 + Part 2 SLAM 库 2 章 ~5 周 + Part 3 系统精读 8 章 ~9 周 + Part 4 综合项目 2 章 ~4 周,合计 13 章 ~20 周。与旧版关系: 本大纲 v11.0 基于
SLAM_CPP进阶教学大纲_v10_完整版重构。v10 中的 C++ 基础部分(Ch1-Ch20)已整合至01_C++主线;通用库章节(Eigen/Ceres/PCL/OpenCV 等)已迁移至02_C++基础与进阶/40_通用库剖析/;ROS2 工程化章节已迁移至相应模块。本大纲仅保留 SLAM 方向的专属内容。
快速路径(Quick-Start Track, ~8 周)¶
不是每个人都需要完整 20 周课程。以下最小路径让你获得**端到端 LiDAR-Inertial 里程计**能力:
SLAM理论基础(2周) → GTSAM因子图(2周,压缩先修)
→ 中级精读·FAST-LIO2/LIO-SAM(1周,选一精读)
→ Mini-LIO综合实战(2周) → 系统集成评估(1周)
总计 ~8 周
这是**核心能力捷径**:跳过 g2o 详细精读和全部系统精读层级,聚焦 LiDAR SLAM 最小闭环。此路径中 Mini-LIO 的前置依赖放宽为"完成 GTSAM 核心 + FAST-LIO2 或 LIO-SAM 精读"。后续按需补 g2o(视觉 SLAM 方向必修)、入门/中高级/高级/前沿精读。
视觉 SLAM 快速路径(~10 周):如果目标是理解 ORB-SLAM3 / VINS-Mono,则推荐:
计算与硬件需求¶
| 章节 | GPU | 真机 | 备注 |
|---|---|---|---|
| SLAM理论基础 | 否 | 否 | 纯理论 + Python/MATLAB 验证 |
| GTSAM / g2o | 否 | 否 | 公开数据集验证 |
| 入门级 ~ 中级精读 | 否 | 否 | KITTI / MulRan 数据集 |
| 中高级精读(small_gicp/Faster-LIO) | 否 | 否 | TBB 需多核 CPU |
| 高级精读(ORB-SLAM3/VINS-Mono) | 否 | 否 | 标准桌面 CPU 即可 |
| 前沿精读(GLIM GPU 模式) | 推荐 RTX 3060+ | 否 | CPU 回退可用 |
| Mini-LIO 综合实战 | 否 | 推荐(可仿真替代) | Velodyne/Livox + IMU |
| 系统集成评估 Jetson 部署 | 推荐 Jetson | 推荐 | 可选进阶 |
总览路线图¶
01_C++主线 完成(现代C++ · 模板 · 并发 · 设计模式 · CMake/CUDA)
│
├──→ 02_C++基础与进阶/40_通用库剖析/ 完成
│ Eigen · manif · Ceres · PCL · OpenCV
│
▼
┌──────────────────────────────────────────────────────────────────────┐
│ 03_SLAM — SLAM方向专属课程 (~20 周) │
│ │
│ Part 1 SLAM理论基础 (10_SLAM理论/, 1章, ~2 周) │
│ └─ SLAM 数学表述 · 前端/后端/回环 · 传感器对比 · 状态估计概述 │
│ │
│ Part 2 SLAM专用优化库 (20_SLAM库/, 2章, ~5 周) │
│ ├─ GTSAM 因子图 + iSAM2 增量优化 │
│ └─ g2o 图优化 — ORB-SLAM3 的钥匙 │
│ │
│ Part 3 系统精读 (30_系统精读/, 8章, ~9 周) │
│ ├─ 多传感器 SLAM 架构设计(四大范式 · 线程模型 · 数据同步) │
│ ├─ 入门级精读(slambook2 · slam_in_autonomous_driving · stella) │
│ ├─ 中级精读(FAST-LIO2 · LIO-SAM) │
│ ├─ 中高级精读(small_gicp · Faster-LIO) │
│ ├─ 高级精读(ORB-SLAM3 · VINS-Mono) │
│ ├─ 前沿精读(KISS-ICP · Lightning-LM · FAST-LIVO2 · GLIM) │
│ ├─ 附录:项目优先级 · C++映射 · 技术栈全览 │
│ └─ 附录:PCL/OpenCV 在 SLAM 项目中使用方式全景解析 │
│ │
│ Part 4 综合项目 (40_综合项目/, 2章, ~4 周) │
│ ├─ Mini-LIO — 从零构建 LiDAR-Inertial 里程计 │
│ └─ 系统集成、评估与性能调优 │
└──────────────────────────────────────────────────────────────────────┘
│
├──→ 04_移动规控/(移动机器人运动规划与控制)
│
└──→ 05_运动控制/20_机械臂/(机械臂方向)
前置知识依赖矩阵¶
| 本大纲章节 | 依赖前置 | 关键知识点 |
|---|---|---|
| SLAM理论基础 | 01_C++主线·线性代数基础 | 矩阵运算、概率论基础 |
| GTSAM 因子图 | 02_C++基础与进阶·通用库·Eigen, 02_C++基础与进阶·通用库·manif, 02_C++基础与进阶·通用库·Ceres | Eigen Map/Block、李群 Exp/Log、非线性最小二乘 |
| g2o 图优化 | 02_C++基础与进阶·通用库·Eigen, 02_C++基础与进阶·通用库·manif, SLAM库·GTSAM | 继承多态(vtable)、CRTP、BetweenFactor 对比 |
| 多传感器架构设计 | 01_C++主线·并发(Ch17-20) | std::thread/mutex/condition_variable |
| 入门级精读 | 02_C++基础与进阶·通用库·Eigen/Ceres/PCL/OpenCV, SLAM库·GTSAM/g2o | 全部通用库 + 两个SLAM库的基础使用 |
| 中级精读 | 多传感器架构设计 | ESKF vs 因子图、ikd-Tree vs KdTreeFLANN |
| 中高级精读 | 01_C++主线·模板编程(Ch12-16) | Traits Pattern、Policy-based Design、if constexpr |
| 高级精读 | SLAM库·g2o, 01_C++主线·并发 | g2o BA 完整使用、三线程架构 |
| 前沿精读 | 中级精读 + 中高级精读 | C++17 全特性、TBB、插件架构 |
| Mini-LIO | Part 1-3 全部 | 综合运用 |
| 系统集成评估 | Mini-LIO | perf/valgrind/EVO 工具链 |
前置三层口径: - 最低可启动: 02_C++基础与进阶·通用库·Eigen + 通用库·Ceres + SLAM理论基础。可支撑 Quick Start 快速路径,进入 GTSAM + 中级精读。 - 推荐补齐: 02_C++基础与进阶·通用库 全部(Eigen/manif/Ceres/PCL/OpenCV)+ 01_C++主线·并发(Ch17-20) + 模板编程(Ch12-16)。适合完整学习 Part 1-4。 - 完整前置: 完成 01_C++主线 全部 + 02_C++基础与进阶·通用库 全部。
迁移章节交叉引用地图¶
v10 大纲中的以下章节已迁移至其他目录,本大纲通过交叉引用保持知识连贯性:
| v10 原章节 | 迁移目标 | 本大纲引用方式 |
|---|---|---|
| Ch1-Ch11 C++基础强化 | 01_C++主线/ |
前置依赖,不再重复 |
| Ch12-Ch16 模板编程 | 01_C++主线/ |
中高级精读前置 |
| Ch17-Ch20 并发并行 | 01_C++主线/ |
多传感器架构前置 |
| Ch21 文件I/O与字符串 | 02_C++基础与进阶/40_通用库剖析/10_文件IO与字符串处理.md |
通用库·文件IO |
| Ch22 Eigen 深入 | 02_C++基础与进阶/40_通用库剖析/20_Eigen深入.md |
通用库·Eigen |
| Ch23 李群与 manif | 02_C++基础与进阶/40_通用库剖析/30_李群与manif库.md |
通用库·manif |
| Ch24 Ceres Solver | 02_C++基础与进阶/40_通用库剖析/40_Ceres_Solver.md |
通用库·Ceres |
| Ch27 PCL 点云库 | 02_C++基础与进阶/40_通用库剖析/50_PCL点云库.md |
通用库·PCL |
| Ch28 OpenCV 深度应用 | 02_C++基础与进阶/40_通用库剖析/60_OpenCV深度应用.md |
通用库·OpenCV |
| Ch29-Ch31 架构/设计模式/ROS2 | 01_C++主线/ 或 02_C++基础与进阶/ |
前置依赖 |
| Ch32-Ch34 CMake/测试/日志 | 01_C++主线/ |
前置依赖 |
| Ch35-Ch36 内存/缓存优化 | 01_C++主线/ |
前置依赖 |
| Ch37-Ch38 CUDA | 01_C++主线/ |
前置依赖(前沿精读 GLIM 需要) |
| Ch45-Ch49 ROS2工程化 | 02_C++基础与进阶/ 或独立 ROS2 模块 |
前置依赖 |
引用约定: 本大纲中出现
通用库·Eigen即指02_C++基础与进阶/40_通用库剖析/20_Eigen深入.md;出现通用库·Ceres即指02_C++基础与进阶/40_通用库剖析/40_Ceres_Solver.md,以此类推。SLAM 库内部引用使用SLAM库·GTSAM/SLAM库·g2o格式。
目录文件结构¶
03_SLAM/
├── SLAM方向_总大纲.md ← 本文件
├── SLAM_CPP进阶教学大纲_v10_完整版_旧版.md ← 归档,仅供参考
│
├── 10_SLAM理论/
│ └── 10_SLAM理论基础.md ← Part 1
│
├── 20_SLAM库/
│ ├── 10_GTSAM.md ← Part 2, Ch1
│ └── 20_g2o图优化.md ← Part 2, Ch2
│
├── 30_系统精读/
│ ├── 10_多传感器架构设计.md ← Part 3, Ch1
│ ├── 20_入门级精读.md ← Part 3, Ch2
│ ├── 30_中级精读.md ← Part 3, Ch3
│ ├── 40_中高级精读.md ← Part 3, Ch4
│ ├── 50_高级精读.md ← Part 3, Ch5
│ ├── 60_前沿精读.md ← Part 3, Ch6
│ ├── 附录.md ← Part 3, 附录 A-N
│ └── 附录_PCL_OpenCV分析.md ← Part 3, 附录 O
│
└── 40_综合项目/
├── 10_Mini-LIO.md ← Part 4, Ch1
└── 20_系统集成评估与调优.md ← Part 4, Ch2
Part 1: SLAM理论基础(10_SLAM理论/, ~2 周)¶
完成本部分后你能做什么: 理解 SLAM 问题的数学表述(运动方程 + 观测方程)、前端/后端/回环检测的职责划分、视觉与 LiDAR 传感器的工程特性对比,具备进入 SLAM 库学习的理论基础。
SLAM理论基础¶
文件:
10_SLAM理论/10_SLAM理论基础.md
| 属性 | 值 |
|---|---|
| 周数 | 2.0 周 |
| 前置依赖 | 01_C++主线·线性代数基础、概率论基础 |
| 共享标记 | 本方向独占 |
核心知识点:
- SLAM 问题定义与数学表述
- 运动方程 \(x_k = f(x_{k-1}, u_k, w_k)\) 与观测方程 \(z_{kj} = h(y_j, x_k, v_{kj})\)
- 状态估计的概率解释:最大后验概率估计(MAP)
-
离散时间建模:连续运动的离散化
-
SLAM 系统五大模块
- 传感器信息读取与预处理
- 前端视觉/激光里程计(VO/LO):帧间运动估计
- 后端优化:从带噪数据估计全局一致的状态
- 回环检测:识别历史场景,消除累积漂移
-
建图:度量地图(稀疏/稠密)vs 拓扑地图
-
传感器对比与选型
- 单目/双目/RGB-D 相机的优缺点与适用场景
- LiDAR vs 相机:测距范围、环境鲁棒性、计算需求、成本
-
IMU 在多传感器融合中的角色
-
SLAM 问题的两大后端范式(概述级,详细在 Part 3 架构设计章展开)
- 滤波器方案(EKF/ESKF/MSCKF)
- 图优化方案(因子图 + 非线性最小二乘)
与前置课程的衔接: - 运动/观测方程中的矩阵运算 → 通用库·Eigen - 李群位姿表示 \(SE(3)\) → 通用库·manif - 非线性最小二乘求解 → 通用库·Ceres - 点云数据结构 → 通用库·PCL - 图像处理基础 → 通用库·OpenCV
Part 2: SLAM专用优化库(20_SLAM库/, ~5 周)¶
完成本部分后你能做什么: 使用 GTSAM 构建因子图并进行 iSAM2 增量优化(对标 LIO-SAM 后端);使用 g2o 定义顶点/边并完成 BA 优化(对标 ORB-SLAM3 后端);理解 GTSAM/g2o/Ceres 三大优化库的设计哲学差异与适用场景。
GTSAM -- 因子图与增量优化¶
文件:
20_SLAM库/10_GTSAM.md
| 属性 | 值 |
|---|---|
| 周数 | 3.0 周(含 iSAM2 深入) |
| 前置依赖 | 通用库·Eigen, 通用库·manif, 通用库·Ceres |
| 共享标记 | 本方向独占(机械臂方向不直接使用 GTSAM) |
核心知识点:
- 因子图的数学结构:变量节点 + 因子节点,联合概率分布的因式分解
- 因子图 vs 马尔可夫随机场 vs 贝叶斯网络的区别
- GTSAM 核心 API:
NonlinearFactorGraph+Values建模 - 标准因子:
PriorFactor,BetweenFactor,GPSFactor,ImuFactor - 噪声模型:
noiseModel::Diagonal,Isotropic,Robust(鲁棒核) - 变量消元与 fill-in:稀疏性利用
- iSAM2 增量优化:Bayes Tree 数据结构、增量变量消元、重线性化阈值
- IMU 预积分在因子图中的角色:
PreintegratedCombinedMeasurements - 自定义因子:继承
NoiseModelFactorN实现evaluateError() - Expression API 自动微分
- LIO-SAM
mapOptimization.cpp中因子图的完整构建流程精读
GTSAM vs Ceres 设计哲学对比:
| 维度 | Ceres(通用库·Ceres) | GTSAM |
|---|---|---|
| 问题表示 | 代价函数列表 | 因子图(显式图拓扑) |
| 求解方式 | 每次从头构建 Hessian | iSAM2 增量更新 Bayes Tree |
| 新增变量/约束 | 重新求解 | 只更新受影响子树 |
| 边缘化 | 不直接支持 | 原生支持 |
| 适合场景 | 离线批量优化 | 在线实时 SLAM |
前置自测:
- [通用库·manif] 李群 \(SE(3)\) 的切空间维度?
Exp/Log映射的作用? - [通用库·manif] manif 库中
Pose3d::rplus(tangent)是左扰动还是右扰动? - [通用库·Ceres] Ceres 中
CostFunction的Evaluate()方法返回什么?Jacobian 维度如何确定? - [通用库·Ceres] 鲁棒核函数如何抑制外点?
- [通用库·Eigen] 固定大小 vs 动态大小矩阵的内存分配差异?
g2o 图优化 -- 读懂 ORB-SLAM3 的钥匙¶
文件:
20_SLAM库/20_g2o图优化.md
| 属性 | 值 |
|---|---|
| 周数 | 2.0 周 |
| 前置依赖 | 通用库·Eigen, 通用库·manif, 通用库·Ceres, SLAM库·GTSAM |
| 共享标记 | 本方向独占 |
核心知识点:
- g2o 设计哲学与历史:Kummerle et al. 2011,SLAM 图优化通用框架
- g2o 三层架构:
SparseOptimizer->OptimizationAlgorithm->LinearSolver - g2o vs Ceres vs GTSAM 设计哲学对比
- 四层继承链:
HyperGraph::Vertex->OptimizableGraph::Vertex->BaseVertex<D,T>->VertexSE3Expmap - 自定义顶点:
oplusImpl(流形更新)、setToOriginImpl - 自定义边:
computeError(残差计算)、linearizeOplus(Jacobian) - ORB-SLAM3
Optimizer.cc四大优化函数精读: - BA / PoseOptimization / LocalBA / EssentialGraph
- 鲁棒核函数:
RobustKernelHuber在 BA 中的使用 - 3D 位姿图优化实战:与 Ceres / GTSAM 结果对比验证
前置自测:
- [通用库·manif] \(SE(3)\) 上的 Plus 操作 (\(\boxplus\))?左乘 vs 右乘更新?
- [通用库·Ceres] Ceres
LocalParameterization/Manifold解决什么问题? - [SLAM库·GTSAM]
BetweenFactor<Pose3>的误差函数定义?信息矩阵的作用?
Part 3: 系统精读(30_系统精读/, ~9 周)¶
完成本部分后你能做什么: 从 C++ 系统架构视角理解四大 SLAM 范式(滤波器/图优化 x 松耦合/紧耦合);精读 12+ 个主流 SLAM 系统的核心代码,理解从教材级到前沿级的完整技术演进。
多传感器 SLAM 系统架构设计¶
文件:
30_系统精读/10_多传感器架构设计.md
| 属性 | 值 |
|---|---|
| 周数 | 1.0 周 |
| 前置依赖 | SLAM库·GTSAM, SLAM库·g2o, 01_C++主线·并发 |
核心知识点:
- 四大架构范式的 C++ 实现差异
- 滤波器方案(ESKF/MSCKF): FAST-LIO2(23-DOF) / FAST-LIVO2(19-DOF) / R3LIVE(29-DOF) / Point-LIO
- 图优化方案(GTSAM/Ceres/g2o): LIO-SAM / VINS-Mono / ORB-SLAM3
- 松耦合: R3LIVE(LIO+VIO 双子系统并行)
-
紧耦合: FAST-LIVO2(ESIKF 顺序更新)
-
多线程架构模式对比
- ORB-SLAM3 三线程模式(Tracking/LocalMapping/LoopClosing)
- LIO-SAM 四节点 ROS 模式
- FAST-LIVO2 单主循环模式
-
Kimera-VIO Pipeline 模式(SPSC 队列)
-
传感器数据同步的通用 C++ 模式
deque + mutex + lock_guard事实标准- 定时器驱动 vs 回调驱动
-
为何不使用
message_filters::TimeSynchronizer -
后端校正如何传递给前端
- Level 0: 不反馈(PGO 仅后处理)
- Level 1: 地图更新(校正通过地图传递)
- Level 2: 状态重置
入门级精读 -- SLAM 教材项目¶
文件:
30_系统精读/20_入门级精读.md
| 属性 | 值 |
|---|---|
| 周数 | 1.0 周 |
| 前置依赖 | 通用库全部 + SLAM库全部 |
精读项目:
- slambook2 (C++14): 视觉 SLAM 十四讲配套,ch3/ch6/ch7/ch9/ch11 精读路线
- slam_in_autonomous_driving (C++17): 自实现 KD-Tree/iVox/NDT/ICP/ESKF 全栈
- stella_vslam (C++11): ORB-SLAM3 的"可读版本",工业级重构范本
中级精读 -- LiDAR SLAM 核心系统¶
文件:
30_系统精读/30_中级精读.md
| 属性 | 值 |
|---|---|
| 周数 | 2.0 周 |
| 前置依赖 | 多传感器架构设计 |
精读项目:
- FAST-LIO2 (C++14): PCL 极简 + 自研 ikd-Tree + IKFoM 模板元编程
- 精读:
laserMapping.cpp,ikd-Tree.h,IKFoM/目录 - LIO-SAM (C++14): GTSAM 因子图 + PCL 重度使用 + 多传感器融合
- 精读:
mapOptimization.cpp,imageProjection.cpp,imuPreintegration
中高级精读 -- 高性能与泛型设计¶
文件:
30_系统精读/40_中高级精读.md
| 属性 | 值 |
|---|---|
| 周数 | 1.0 周 |
| 前置依赖 | 01_C++主线·模板编程 |
精读项目:
- small_gicp (C++17): Traits Pattern + Policy-based Design + header-only 库设计
- 精读:
traits.hpp,registration.hpp - Faster-LIO (C++17): iVox 模板特化 + TBB 并行,1800+ FPS 极致性能
- 精读:
iVox.hpp
高级精读 -- 视觉 SLAM 与 VIO 系统¶
文件:
30_系统精读/50_高级精读.md
| 属性 | 值 |
|---|---|
| 周数 | 2.0 周 |
| 前置依赖 | SLAM库·g2o, 01_C++主线·并发 |
精读项目:
- ORB-SLAM3 (C++14): 特征法集大成者
- 精读:
System.cc(三线程),ORBextractor.cc(ORB 定制化),Optimizer.cc(g2o BA),Atlas.h(shared_ptr/weak_ptr 所有权) - VINS-Mono (C++11): Ceres 自定义因子 + 光流前端 + 滑窗优化
- 精读:
feature_tracker.cpp(OpenCV 光流流水线),factor/(三大 CostFunction),PoseLocalParameterization
前沿精读 -- 新一代 SLAM 系统¶
文件:
30_系统精读/60_前沿精读.md
| 属性 | 值 |
|---|---|
| 周数 | 2.0 周 |
| 前置依赖 | 中级精读 + 中高级精读 |
精读项目:
- KISS-ICP (C++17): 极简设计 ~2000 行核心代码,standalone + ROS wrapper 分离
- Lightning-LM (C++17): 生产级模块化架构,双模式 SLAM/定位,地图分区动态加载
- FAST-LIVO2 (C++14): 多传感器紧耦合最高水平开源实现,ESKF 三传感器顺序更新
- GLIM (C++17): GPU 加速 + 插件架构,
dlopen动态加载 GPU 模块
附录¶
文件:
30_系统精读/附录.md
内容:
- 附录 A: 项目优先级表(16 个 SLAM 项目,按学习价值 5 级排序)
- 附录 B: C++ 知识点到 SLAM 项目映射表(25+ 知识点 x 对应项目/文件)
- 附录 C: 时间里程碑建议(10 个阶段目标)
- 附录 D: 技术栈全览(应用层 / 优化库 / 数据结构 / 系统工具 / 硬件层)
- 附录 E: PCL 在 SLAM 中的 TOP 10 API 速查
- 附录 F: OpenCV 在视觉 SLAM 中的 TOP 10 API 速查
- 附录 G: v7 新增章节与 v6 章节完整编号对照
- 附录 H: C++ 学习资源与库精读指南
- 附录 I: SLAM 项目 C++ 技术演进与代码模式
- 附录 J: 数学库选型对比参考
- 附录 K: CMake 依赖管理与 SLAM 构建策略
- 附录 L: SLAM 空间数据结构对比
- 附录 M: 50 个现代 LiDAR SLAM 与点云开源项目技术全景
- 附录 N: 现代视觉 SLAM 与 3DGS 开源项目技术全景
附录: PCL 与 OpenCV 在 SLAM 项目中使用方式全景解析¶
文件:
30_系统精读/附录_PCL_OpenCV分析.md
内容:
- 第一部分: PCL 在现代 SLAM 项目中的具体使用(LIO-SAM / FAST-LIO2 / hdl_graph_slam / Patchwork++ / FAST-LIVO2)
- 第二部分: OpenCV 在现代 SLAM 项目中的具体使用(ORB-SLAM3 / VINS-Mono / OpenVINS / FAST-LIVO2 / stella_vslam)
- 第三部分: 多传感器 SLAM 的数据同步 C++ 模式
- 第四部分: PCL 与 OpenCV 交互的关键技术
- 趋势结论: PCL 去功能化 + OpenCV 底层保留高层替代
交叉引用: 本附录与
02_C++基础与进阶/40_通用库剖析/50_PCL点云库.md和02_C++基础与进阶/40_通用库剖析/60_OpenCV深度应用.md互补。通用库章节讲 API 本身,本附录讲 12 个 SLAM 项目中的实际使用模式和参数配置。
Part 4: 综合项目(40_综合项目/, ~4 周)¶
完成本部分后你能做什么: 独立从零实现一个简化但完整的 LiDAR-Inertial 里程计(Mini-LIO),在 KITTI/MulRan 数据集上评估精度,与 FAST-LIO2/LIO-SAM/KISS-ICP 对比,完成性能 Profiling 和参数调优。
Mini-LIO -- 从零构建 LiDAR-Inertial 里程计¶
文件:
40_综合项目/10_Mini-LIO.md
| 属性 | 值 |
|---|---|
| 周数 | 2.0 周 |
| 前置依赖 | Part 1 全部 + Part 2 全部 + Part 3 至少完成中级精读 |
系统六大模块:
- 数据预处理 (
preprocessing/): PCL VoxelGrid + CropBox + 自定义点类型 + 距离范围过滤 - 传感器管理 (
sensor_manager/):deque<IMUData>+mutex的缓冲 + 时间戳对齐 + IMU 中值积分 - 状态估计 (
estimator/): Eigen 实现 ESKF,18-DOF 状态向量,manif SE3d 旋转更新 - 点云配准 (
registration/): 点到面 ICP 自实现 / small_gicp 库调用,Policy-based 策略选择 - 局部地图管理 (
map/): 体素哈希地图(参考 KISS-ICP VoxelHashMap)或简易 ikd-Tree - 工程基础设施: CMake + GoogleTest + spdlog + yaml-cpp + ROS2 Lifecycle Node
C++ 技能检验清单:
- 智能指针管理(零裸指针)
std::move点云传递- Lambda + TBB 并行化
- CRTP / Policy-based 配准策略
deque + mutex + lock_guard传感器缓冲Eigen::Map零拷贝参数映射- spdlog 异步日志 + ScopedTimer RAII 计时
- GoogleTest 单元测试覆盖核心模块
系统集成、评估与性能调优¶
文件:
40_综合项目/20_系统集成评估与调优.md
| 属性 | 值 |
|---|---|
| 周数 | 2.0 周(含可选 Jetson 部署) |
| 前置依赖 | Mini-LIO 完成 |
核心内容:
- 数据集选择与运行: KITTI Odometry / MulRan / NTU VIRAL
- EVO 轨迹评估:
evo_ape(APE) /evo_rpe(RPE) /evo_traj可视化,与主流系统对比 - 性能 Profiling:
perf record+perf reportCPU 热点valgrind --tool=callgrind+ KCachegrind 调用图- Chrome tracing 火焰图
- 内存分析:
valgrind --tool=massif内存增长曲线,/proc/self/statusVmRSS 实时监控 - 多线程优化: ThreadSanitizer 数据竞争检测,CPU 核心利用率分析
- 参数调优: 降采样分辨率 / ICP 迭代次数 / 关键帧阈值 / 局部地图范围
- Jetson 部署 (可选进阶): 交叉编译、功耗模式、CUDA 加速收益、实时性验证
技术生态速览(截至 2026-05-14)¶
| 生态 | 核心栈 | 最新动态 |
|---|---|---|
| 因子图优化 | GTSAM 4.3+ | iSAM2 增量优化、IMU 预积分因子、Expression API 自动微分、C++17 |
| 图优化 | g2o 最新版 | Block 稀疏求解、四层继承链、ORB-SLAM3 事实标准后端 |
| 通用优化 | Ceres 2.x | Manifold API(替代 LocalParameterization)、CUDA Solver 实验性 |
| LiDAR SLAM | FAST-LIO2 / LIO-SAM / KISS-ICP | ESKF vs 因子图两大路线、ikd-Tree / iVox / VoxelHashMap 三大地图结构 |
| 视觉 SLAM | ORB-SLAM3 / VINS-Mono | 特征法 vs 光流法、g2o vs Ceres、深度学习特征匹配渗透中 |
| 多传感器融合 | FAST-LIVO2 / R3LIVE / GLIM | 三传感器紧耦合、GPU 加速、插件架构 |
工业 vs 研究标记¶
| 标记 | 含义 | 代表章节 |
|---|---|---|
| 工业核心 | 工业落地必备 | GTSAM(实时后端), LIO-SAM精读, Mini-LIO实战, 系统集成评估 |
| 研究前沿 | 学术前沿方向 | GLIM GPU加速, FAST-LIVO2多传感器紧耦合, 3DGS-SLAM |
| 工业+研究 | 兼有价值 | g2o(ORB-SLAM3标准), KISS-ICP(极简生产级), 参数调优 |
与其他方向的衔接¶
| 方向 | 与 SLAM 的关系 | 衔接路径 |
|---|---|---|
| 04_移动规控 | SLAM 输出定位和地图 -> 移动机器人路径规划与跟踪 | 完成 Part 1-3 后进入 |
| 05_运动控制/20_机械臂 | SLAM 定位 + 机械臂操作 = 移动操作 | 独立方向,共享 02_C++基础与进阶 |
| 05_运动控制/40_仿真 | MuJoCo 仿真环境用于验证 SLAM + 控制 | 按需选修 |
| 06_具身智能 | SLAM 建图 + 语义理解 + 大模型 = 具身智能 | 完成 SLAM + 运动控制后进入 |
附录: 时间里程碑建议¶
| 阶段 | 周数 | 达成标志 |
|---|---|---|
| SLAM 理论基础 | 1-2 周 | 能写出运动/观测方程,理解前端/后端/回环的职责 |
| GTSAM 因子图 | 3-5 周 | 能用 GTSAM 构建因子图 + iSAM2 增量优化,参考 LIO-SAM |
| g2o 图优化 | 6-7 周 | 能用 g2o 做 BA,阅读 ORB-SLAM3 Optimizer.cc |
| 架构设计 + 入门精读 | 8-9 周 | 理解四大范式,能读 slambook2 和 slam_in_autonomous_driving |
| 中级精读 | 10-11 周 | 能深入读 FAST-LIO2 和 LIO-SAM 核心代码 |
| 中高级 + 高级精读 | 12-14 周 | 理解 Traits/CRTP 在 SLAM 中的应用,能读 ORB-SLAM3/VINS-Mono |
| 前沿精读 | 15-16 周 | 跟踪 KISS-ICP/FAST-LIVO2/GLIM 等新系统 |
| Mini-LIO 实战 | 17-18 周 | 独立从零实现 Mini-LIO 并在 KITTI/MulRan 上运行 |
| 系统集成评估 | 19-20 周 | 完成精度对比、性能 Profiling、参数调优 |
附录: 推荐学习顺序与选修建议¶
必修路线(~12 周核心):
选修扩展(按兴趣方向):
| 兴趣方向 | 推荐选修 |
|---|---|
| LiDAR SLAM 深入 | 中高级精读(small_gicp/Faster-LIO) + 前沿精读(KISS-ICP/Lightning-LM) |
| 视觉 SLAM 深入 | 高级精读(ORB-SLAM3/VINS-Mono) + 入门精读(slambook2/stella_vslam) |
| 多传感器融合 | 前沿精读(FAST-LIVO2) + 架构设计章节深入 |
| GPU 加速 | 前沿精读(GLIM) + 01_C++主线·CUDA 章节 |
| 生产部署 | 系统集成评估(Jetson 部署) + 前沿精读(Lightning-LM 双模式) |