跳转至

30_中级精读

第41章:中级精读——LiDAR SLAM核心系统(第42周)

教学目标:深入两个最具代表性的LiDAR SLAM系统——FAST-LIO2(ESKF滤波+自研数据结构)和LIO-SAM(GTSAM图优化+PCL重度使用),理解同一问题(LiDAR-Inertial里程计)的两种截然不同的C++实现路径。

精读项目

  • FAST-LIO2(⭐4.5k,C++14)——PCL极简+自研核心+模板元编程的极致代表。精读文件:laserMapping.cpp(整个系统的主循环——IMU传播+ESKF更新在800行代码中完成,对比LIO-SAM 4个节点数千行)、ikd-Tree.h(增量式KD-Tree——Add_Points()增量插入+Nearest_Search()最近邻搜索+Delete_Point_Boxes()区域删除+异步重平衡,理解模板KD_TREE<PointType>的设计)、IKFoM/目录(流形上的迭代卡尔曼滤波——用MTK宏MTK_BUILD_MANIFOLD定义状态空间,模板元编程自动生成流形更新公式)。C++学习重点:pcl::PointXYZINormalcurvature字段被复用存储时间偏移(零成本利用现有字段避免自定义点类型的复杂性)、ikd-Tree用pthread_mutex而非std::mutex(兼容嵌入式平台——Jetson的某些RTOS不完全支持C++11线程库)。

  • LIO-SAM(⭐4.6k,C++14)——GTSAM因子图+PCL重度使用+多传感器融合的标杆。精读文件:mapOptimization.cpp是PCL使用最密集的SLAM文件——6个VoxelGrid实例(corner/surf/ICP/surroundingKeyPoses/globalMapKeyPoses/globalMapKeyFrames各一个,参数从0.2m到10m不等)、3个KdTreeFLANN实例(surroundKeyFrames半径50m/historyKeyPoses回环搜索/globalMap可视化1000m)、ICP回环验证(maxIter=100, fitnessScore<0.3)。imageProjection.cpp是多传感器数据同步的教科书——imuHandler/odometryHandler/cloudHandler三个回调+独立deque+独立mutex+deskewPoint()利用IMU插值实现点云去畸变。两个独立GTSAM因子图:全局图(mapOptimization中,优化LiDAR里程计+GPS+回环约束)和IMU图(imuPreintegration中,IMU预积分+LiDAR里程计→输出200Hz高频里程计)。