跳转至

第44章:前沿精读——新一代SLAM系统(第45-46,2周周)

教学目标:精读2022-2024年代表性的新一代SLAM系统,理解现代C++17特性、极简设计理念、多传感器紧耦合融合和GPU加速在前沿项目中的实际应用。

精读项目

  • KISS-ICP(⭐2.1k,C++17)——极简设计的教科书。整个核心库kiss_icp/约2000行C++代码实现了完整的LiDAR里程计(包括体素哈希地图、自适应阈值、点到点ICP、去畸变)。standalone+ROS wrapper完全分离——核心库是纯CMake target,ROS wrapper作为独立包调用核心库API。VoxelHashMap使用tsl::robin_map(比std::unordered_map快2-3倍)管理体素,AddPoints通过std::move避免百万级点的深拷贝。pybind11提供完整Python API用于算法原型验证。C++学习重点:std::optional<Eigen::Vector3d>表达"可能不存在"的体素质心、结构化绑定auto [voxel, inserted] = map.emplace(key, points)

  • Lightning-LM(⭐1.3k,C++17)——生产级模块化SLAM架构。双模式设计(SLAM模式建图+定位模式在已有地图中定位),基于AA-FasterLIO前端+iVox+ESKF。自研"miao"轻量图优化库(源自g2o简化版,去除动态类型注册的复杂机制)。地图分区动态加载(LRU策略管理内存——只在内存中保持当前活跃区域的分区)。C++学习重点:模块化架构设计(前端/后端/地图管理/传感器适配各为独立模块)、OpenMP+TBB并行化、纯CPU 0.8核即可实时定位。

  • FAST-LIVO2(⭐3.8k,C++14)——多传感器紧耦合的最高水平开源实现。ESKF三传感器顺序更新(IMU→LiDAR→Camera),19-DOF状态向量(StatesGroup包含SO3旋转/位置/速度/偏置/重力),Sophus SE3d处理李群运算。PCL+OpenCV交互的最佳案例:从ikd-Tree选取地图点→通过ESKF估计的R/t变换到相机坐标系→内参矩阵投影到2D像素→在投影处提取图像patch计算光度误差。OpenCV仅用于initUndistortRectifyMap/remap去畸变,核心的patch warp和亚像素双线性插值全用Eigen自实现。C++学习重点:sync_packages()三传感器数据同步、deque+统一mtx_buffer缓冲区管理、ESKF顺序更新的Eigen矩阵实现。

  • GLIM(⭐1.5k,C++17)——GPU加速+插件架构的现代SLAM。GTSAM因子图+gtsam_points库提供GPU加速配准因子。插件架构允许运行时通过dlopen动态加载GPU模块——如果没有GPU自动回退CPU版本。支持全局回调插件机制(外部代码可注册回调函数在SLAM关键事件触发时执行)。C++学习重点:dlopen/dlsym动态加载共享库(C++插件系统的底层机制)、GTSAM GPU因子的使用方式、AVX指令优化。



第十部分:ROS2工程化实践(第47-51周)

定位:Ch31 建立了 ROS2 核心运行时概念(Lifecycle/Composition/QoS/Executor/tf2/DDS),本部分在此基础上深入 ROS2 的工程实践层——从设计哲学理解、构建系统掌握、机器人建模、生态工具使用,到硬件集成与部署调试。