跳转至

本文档属于 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,则推荐:

SLAM理论基础(2周) → GTSAM(2周) → g2o(1.5周)
    → 高级精读·ORB-SLAM3/VINS-Mono(2周)
    → Mini-LIO改造为视觉前端(2周)
    总计 ~10 周

计算与硬件需求

章节 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++主线·线性代数基础、概率论基础
共享标记 本方向独占

核心知识点:

  1. SLAM 问题定义与数学表述
  2. 运动方程 \(x_k = f(x_{k-1}, u_k, w_k)\) 与观测方程 \(z_{kj} = h(y_j, x_k, v_{kj})\)
  3. 状态估计的概率解释:最大后验概率估计(MAP)
  4. 离散时间建模:连续运动的离散化

  5. SLAM 系统五大模块

  6. 传感器信息读取与预处理
  7. 前端视觉/激光里程计(VO/LO):帧间运动估计
  8. 后端优化:从带噪数据估计全局一致的状态
  9. 回环检测:识别历史场景,消除累积漂移
  10. 建图:度量地图(稀疏/稠密)vs 拓扑地图

  11. 传感器对比与选型

  12. 单目/双目/RGB-D 相机的优缺点与适用场景
  13. LiDAR vs 相机:测距范围、环境鲁棒性、计算需求、成本
  14. IMU 在多传感器融合中的角色

  15. SLAM 问题的两大后端范式(概述级,详细在 Part 3 架构设计章展开)

  16. 滤波器方案(EKF/ESKF/MSCKF)
  17. 图优化方案(因子图 + 非线性最小二乘)

与前置课程的衔接: - 运动/观测方程中的矩阵运算 → 通用库·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)

核心知识点:

  1. 因子图的数学结构:变量节点 + 因子节点,联合概率分布的因式分解
  2. 因子图 vs 马尔可夫随机场 vs 贝叶斯网络的区别
  3. GTSAM 核心 API:NonlinearFactorGraph + Values 建模
  4. 标准因子:PriorFactor, BetweenFactor, GPSFactor, ImuFactor
  5. 噪声模型:noiseModel::Diagonal, Isotropic, Robust(鲁棒核)
  6. 变量消元与 fill-in:稀疏性利用
  7. iSAM2 增量优化:Bayes Tree 数据结构、增量变量消元、重线性化阈值
  8. IMU 预积分在因子图中的角色:PreintegratedCombinedMeasurements
  9. 自定义因子:继承 NoiseModelFactorN 实现 evaluateError()
  10. Expression API 自动微分
  11. LIO-SAM mapOptimization.cpp 中因子图的完整构建流程精读

GTSAM vs Ceres 设计哲学对比:

维度 Ceres(通用库·Ceres) GTSAM
问题表示 代价函数列表 因子图(显式图拓扑)
求解方式 每次从头构建 Hessian iSAM2 增量更新 Bayes Tree
新增变量/约束 重新求解 只更新受影响子树
边缘化 不直接支持 原生支持
适合场景 离线批量优化 在线实时 SLAM

前置自测:

  1. [通用库·manif] 李群 \(SE(3)\) 的切空间维度?Exp/Log 映射的作用?
  2. [通用库·manif] manif 库中 Pose3d::rplus(tangent) 是左扰动还是右扰动?
  3. [通用库·Ceres] Ceres 中 CostFunctionEvaluate() 方法返回什么?Jacobian 维度如何确定?
  4. [通用库·Ceres] 鲁棒核函数如何抑制外点?
  5. [通用库·Eigen] 固定大小 vs 动态大小矩阵的内存分配差异?

g2o 图优化 -- 读懂 ORB-SLAM3 的钥匙

文件: 20_SLAM库/20_g2o图优化.md

属性
周数 2.0 周
前置依赖 通用库·Eigen, 通用库·manif, 通用库·Ceres, SLAM库·GTSAM
共享标记 本方向独占

核心知识点:

  1. g2o 设计哲学与历史:Kummerle et al. 2011,SLAM 图优化通用框架
  2. g2o 三层架构:SparseOptimizer -> OptimizationAlgorithm -> LinearSolver
  3. g2o vs Ceres vs GTSAM 设计哲学对比
  4. 四层继承链:HyperGraph::Vertex -> OptimizableGraph::Vertex -> BaseVertex<D,T> -> VertexSE3Expmap
  5. 自定义顶点:oplusImpl(流形更新)、setToOriginImpl
  6. 自定义边:computeError(残差计算)、linearizeOplus(Jacobian)
  7. ORB-SLAM3 Optimizer.cc 四大优化函数精读:
  8. BA / PoseOptimization / LocalBA / EssentialGraph
  9. 鲁棒核函数:RobustKernelHuber 在 BA 中的使用
  10. 3D 位姿图优化实战:与 Ceres / GTSAM 结果对比验证

前置自测:

  1. [通用库·manif] \(SE(3)\) 上的 Plus 操作 (\(\boxplus\))?左乘 vs 右乘更新?
  2. [通用库·Ceres] Ceres LocalParameterization / Manifold 解决什么问题?
  3. [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++主线·并发

核心知识点:

  1. 四大架构范式的 C++ 实现差异
  2. 滤波器方案(ESKF/MSCKF): FAST-LIO2(23-DOF) / FAST-LIVO2(19-DOF) / R3LIVE(29-DOF) / Point-LIO
  3. 图优化方案(GTSAM/Ceres/g2o): LIO-SAM / VINS-Mono / ORB-SLAM3
  4. 松耦合: R3LIVE(LIO+VIO 双子系统并行)
  5. 紧耦合: FAST-LIVO2(ESIKF 顺序更新)

  6. 多线程架构模式对比

  7. ORB-SLAM3 三线程模式(Tracking/LocalMapping/LoopClosing)
  8. LIO-SAM 四节点 ROS 模式
  9. FAST-LIVO2 单主循环模式
  10. Kimera-VIO Pipeline 模式(SPSC 队列)

  11. 传感器数据同步的通用 C++ 模式

  12. deque + mutex + lock_guard 事实标准
  13. 定时器驱动 vs 回调驱动
  14. 为何不使用 message_filters::TimeSynchronizer

  15. 后端校正如何传递给前端

  16. Level 0: 不反馈(PGO 仅后处理)
  17. Level 1: 地图更新(校正通过地图传递)
  18. Level 2: 状态重置

入门级精读 -- SLAM 教材项目

文件: 30_系统精读/20_入门级精读.md

属性
周数 1.0 周
前置依赖 通用库全部 + SLAM库全部

精读项目:

  1. slambook2 (C++14): 视觉 SLAM 十四讲配套,ch3/ch6/ch7/ch9/ch11 精读路线
  2. slam_in_autonomous_driving (C++17): 自实现 KD-Tree/iVox/NDT/ICP/ESKF 全栈
  3. stella_vslam (C++11): ORB-SLAM3 的"可读版本",工业级重构范本

中级精读 -- LiDAR SLAM 核心系统

文件: 30_系统精读/30_中级精读.md

属性
周数 2.0 周
前置依赖 多传感器架构设计

精读项目:

  1. FAST-LIO2 (C++14): PCL 极简 + 自研 ikd-Tree + IKFoM 模板元编程
  2. 精读: laserMapping.cpp, ikd-Tree.h, IKFoM/ 目录
  3. LIO-SAM (C++14): GTSAM 因子图 + PCL 重度使用 + 多传感器融合
  4. 精读: mapOptimization.cpp, imageProjection.cpp, imuPreintegration

中高级精读 -- 高性能与泛型设计

文件: 30_系统精读/40_中高级精读.md

属性
周数 1.0 周
前置依赖 01_C++主线·模板编程

精读项目:

  1. small_gicp (C++17): Traits Pattern + Policy-based Design + header-only 库设计
  2. 精读: traits.hpp, registration.hpp
  3. Faster-LIO (C++17): iVox 模板特化 + TBB 并行,1800+ FPS 极致性能
  4. 精读: iVox.hpp

高级精读 -- 视觉 SLAM 与 VIO 系统

文件: 30_系统精读/50_高级精读.md

属性
周数 2.0 周
前置依赖 SLAM库·g2o, 01_C++主线·并发

精读项目:

  1. ORB-SLAM3 (C++14): 特征法集大成者
  2. 精读: System.cc(三线程), ORBextractor.cc(ORB 定制化), Optimizer.cc(g2o BA), Atlas.h(shared_ptr/weak_ptr 所有权)
  3. VINS-Mono (C++11): Ceres 自定义因子 + 光流前端 + 滑窗优化
  4. 精读: feature_tracker.cpp(OpenCV 光流流水线), factor/(三大 CostFunction), PoseLocalParameterization

前沿精读 -- 新一代 SLAM 系统

文件: 30_系统精读/60_前沿精读.md

属性
周数 2.0 周
前置依赖 中级精读 + 中高级精读

精读项目:

  1. KISS-ICP (C++17): 极简设计 ~2000 行核心代码,standalone + ROS wrapper 分离
  2. Lightning-LM (C++17): 生产级模块化架构,双模式 SLAM/定位,地图分区动态加载
  3. FAST-LIVO2 (C++14): 多传感器紧耦合最高水平开源实现,ESKF 三传感器顺序更新
  4. 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点云库.md02_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 至少完成中级精读

系统六大模块:

  1. 数据预处理 (preprocessing/): PCL VoxelGrid + CropBox + 自定义点类型 + 距离范围过滤
  2. 传感器管理 (sensor_manager/): deque<IMUData> + mutex 的缓冲 + 时间戳对齐 + IMU 中值积分
  3. 状态估计 (estimator/): Eigen 实现 ESKF,18-DOF 状态向量,manif SE3d 旋转更新
  4. 点云配准 (registration/): 点到面 ICP 自实现 / small_gicp 库调用,Policy-based 策略选择
  5. 局部地图管理 (map/): 体素哈希地图(参考 KISS-ICP VoxelHashMap)或简易 ikd-Tree
  6. 工程基础设施: 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 完成

核心内容:

  1. 数据集选择与运行: KITTI Odometry / MulRan / NTU VIRAL
  2. EVO 轨迹评估: evo_ape(APE) / evo_rpe(RPE) / evo_traj 可视化,与主流系统对比
  3. 性能 Profiling:
  4. perf record + perf report CPU 热点
  5. valgrind --tool=callgrind + KCachegrind 调用图
  6. Chrome tracing 火焰图
  7. 内存分析: valgrind --tool=massif 内存增长曲线,/proc/self/status VmRSS 实时监控
  8. 多线程优化: ThreadSanitizer 数据竞争检测,CPU 核心利用率分析
  9. 参数调优: 降采样分辨率 / ICP 迭代次数 / 关键帧阈值 / 局部地图范围
  10. 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 周核心):

SLAM理论基础 → GTSAM → g2o → 多传感器架构设计
    → 中级精读(FAST-LIO2 或 LIO-SAM) → Mini-LIO → 系统集成评估

选修扩展(按兴趣方向):

兴趣方向 推荐选修
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 双模式)