0 写在前面
本系列文章是对LIO-SAM源码的学习总结,难免有错漏之处,如果哪里有问题欢迎私聊或者留言指出,感激不尽。
LIO代码已经完整阅读了,还需要对其进行消化总结,后续的文章会在这个专栏持续更新,能点个关注最好啦,关注不迷路^_^,整个流程图在最下面,童叟无欺
1 概述
上图来自LIO-SAM的论文,为整个系统关键的因子图,总体来看,变量结点为机器人的位姿(包含旋转和平移),因子有:1)Lidar Odometry 2)imu preintegration 3)gps 4)loop closure等四种因子。
总的来说LIO-SAM的源码就是在不停的计算上面提到的四种因子,并将其按照一定的规律添加到因子图中,进行优化然后更新,一直这样循环往复的过程。读者要理解好这个过程,在这样的宏观框架下去进行阅读和理解,就会容易很多。下面简单说一下除GPS外三种因子约束的构建:
2 因子约束的构建
1 lidar odometry
LIO激光里程计的处理类似于LOAM,也是对点云提取角点和面点,对于角点和面点分别将点到直线、点到面的距离作为损失函数,利用非线性优化的方法迭代获取优化后的位姿;优化的初始值由imu里程计提供(或者imu数据)
2 imu preintegration
imu预积分使用了来自激光里程计的位姿估计,利用其进行初始化,并且其也作为imu部分因子图的一个因子参与到因子图的求解当中去。除此之外imu偏置也作为一个因子参与优化,偏置更新后要进行重传播
3 回环检测
LIO的回环使用的是基于欧式距离的方法,对关键帧查找与其相邻的关键帧计算其距离,当距离小与一定的阈值则认为是回环,然后利用icp匹配,获取位姿变换添加到因子图。
3 代码结构
这里代码看的是详细中文注释的版本,注释写得很不错,地址如下:
GitHub - smilefacehh/LIO-SAM-DetailedNote: LIO-SAM源码详细注释,3D SLAM融合激光、IMU、GPS
如图所示为代码文件结构、核心文件为src下面的四个cpp文件,我主要是对这四个文件进行讲解。按照从上到下的顺序讲解。各个文件的主要功能如下图所示。
4 上图
整个图直接拿去,慢慢看哈哈哈喜欢的话点个赞,点个关注