【slam论文总结|LVI-SAM论文重点总结】LVI-SAM构建在因子图之上:视觉惯导系统 、 激光惯导系统
视觉惯导系统:利用激光惯导的估计来做初始化、利用激光的测量得到精度更高的深度信息
激光惯导系统:利用视觉惯导的初值来做帧间匹配、做回环检测
其中一个不工作时,另外一个可以正常工作
介绍
视觉惯导系统执行利用雷达帧恢复深度的视觉特征的跟踪,通过优化视觉重投影误差和imu测量误差的视觉里程计为激光雷达的激光匹配提供初值,并把约束加入到因子图中。
当利用imu把点云的畸变去除后,激光惯导系统检测点云的边缘和平面特征,并和保存在划窗中的features map对齐。LIS系统估计得到的系统状态可以传到VIS系统中做初始化。
最后,优化得到的IMU的bias用来递推给出IMU频率的位姿。(最后落点都是imu上)
该文章贡献:
基于因子图的紧耦合的LVIO系统,实现了多传感器融合与基于场景重识别的全局优化。
通过故障检测来绕开失败的子系统,使其对传感器性能下降具有鲁棒性。
利用不同的数据集进行了完善的验证。
视觉惯导系统:视觉特征利用角点检测器,利用KLT算法进行跟踪,利用视觉里程计对其激光帧的点云得到一个稀疏的深度图完成视觉惯导初始化。
- 初始化:初始化的质量主要取决于两个因素:传感器的运动和IMU参数的精度
IMU的参数包含渐变的bias和高斯白噪声影响加速度和角速度的测量
为提高VIS初始化的鲁棒性,利用LIS系统来估计系统的状态和imu的参数b,通过插值对其激光帧和视觉帧时间戳,最后把LIS得到的x、b作为VIS初始值,改善初始化的速度和鲁棒性
- 深度特征关联:激光雷达扫描为稀疏的点云,选取多帧重叠的得到稠密的深度图,把视觉特性和雷达点投影到以相机为圆心的单位圆上,对深度点进行降采样以极坐标的形式保存,利用KD_tree找视觉特征点最近的三个激光点,相机到视觉特征点的距离就是该特征点的深度。可能会存在遮挡、不同对象深度点不同等问题,与类似Laser-Visual-Inertial Odometry and Mapping with High Robustness and Low Drift论文中的做法一样,我们通过检查特征周围深度点之间的最大距离,如果最大距离大于2m,就不对该特征点进行数据关联。
文章图片
- 失败检验:运动剧烈或者光照变化明显等将引起imu的bias变化很大,所以定义IMU的bias一个阈值,超过之后即认为VINS系统失效,开始重新初始化VINS系统
- 闭环检测:利用DBOW2来做闭环检测。
- 初始化:
LIS系统初始化之后,可以通过两个途径得到scan_match初值:IMU的积分和VIS系统。无论在环境纹理丰富还是不丰富的地方,增强了初值的精度和鲁棒性。
2、失败检测:尽管激光雷达可以得到场景中很远范围内的细节,但是也会在一些场景中导致扫描匹配失败,如图6所示。我们利用On Degeneracy of Optimization-based State Estimation Problems论文中介绍的方法来检测LIS系统是不是失败了。
文章图片
scan-match的非线性优化可以写成一个线性最小二乘的形式:
文章图片
其中A和b是从T处的线性化获得的。当$A^TA$的最小特征值小于第一次优化迭代的阈值时,LIS报告失败,此时不会将激光雷达里程计约束添加到因子图中。可以从On Degeneracy of Optimization-based State Estimation Problems看到这些假设所基于的详细分析。
推荐阅读
- SLAM|【原创】SLAM学习笔记(三)视觉里程计-本质矩阵
- ROS|ROS kinetic自定义路径规划算法
- SLAM+???????????????DIY????????????????????????????????????1.miiboo?????????????????????APP??????
- SLAM|ORB-SLAM2栅格地图构建
- SLAM|SLAM算法包与地图处理
- SLAM&VIO|slambook2_in_Docker——视觉Slam十四讲代码Docker封装
- SLAM|ubuntu16.04 运行DynaSLAM