• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

LIO-SAM学习笔记-整体框架

武飞扬头像
好好仔仔
帮助1

开源SLAM系统:LIO-SAM源码解析 | 攻城狮の家

LIO-SAM在LEGO-LOAM上的改进

1. 由于支持手持设备,因此没有对地面点进行特殊处理

2. 紧耦合的lidar imu融合模块,充分利用了imu数据,对快速旋转的场景有更好的鲁棒性

3. 融合GPS,全局地图可以在没有回环的情况下有更好的全局一致性

4. 框架易于扩展

学新通

 学新通

其代码的组织结构来看,和LEGO-LOAM区别不大:

  • imageProjection.cpp:点云投影成深度图,并分类,利用ring和time给每个点去畸变。
  • featureExtraction.cpp:提取边缘点和平面点特征。
  • mapOptmization.cpp:基于因子图,构建点线、点面约束,回环,GPS等各种因子,最后增量平滑全图位姿。
  • imuPreintegration.cpp:联合优化激光odom和imu数据,估计IMU偏差,进行实时的里程计估算。

大多数IMU坐标系为NED(北、东、下),robot_localization假定的IMU数据使用ENU坐标系

当k时刻的状态发生变化,则通过imu积分得到的k 1时刻的状态也会发生相应变化,而基于滑动窗口的后端优化或者因子图优化中,这些状态量会经常进行调整,如果每次状态调整都要重新计算imu积分,计算量太大。发现预积分量和k以及k 1时刻的状态无关,因此当k时刻状态发生变化时,不需要将imu数据重新积分。

由于imu的零偏会随时间发生变化,因此零偏也是系统的优化变量之一,虽然预积分量与两帧之间的速度和姿态无关,但与零偏相关。为了避免零偏的变化导致预积分重新积分,考虑到零偏的变化在段时间内变化非常小,因此将零偏一阶泰勒展开近似。

预积分量关于零偏的雅克比矩阵会在预积分计算的时候一起计算,因此,当零偏被优化调整之后,根据计算好的雅克比矩阵对预积分量进行更新即可。

实际系统是离散的,因此,每收到一帧新的imu数据后更新一次预积分量,这是一个求和的过程

预积分如何使用?

预积分约束了相邻两帧的状态量,两帧之间的零偏几乎相等。imu累计会漂移,在VIO中imu预积分和重投影误差共同约束两帧之间的状态量。

学新通

 蓝色圆圈代表关键帧位姿,蓝色矩形代表关键帧速度和零偏,橙色矩形代表 IMU 预积分约束,可
以看到,它可以约束相邻帧的位姿、速度和零偏,绿色矩形代表 lidar 里程记的帧间约束,其约束相邻两帧的位置和姿态

imu标定方法

lidar坐标系与imu坐标系不一致。手眼标定算法,即使先计算出两帧 lidar 之间的旋转(通过 ICP 、 NDT 等点云配准算法),然后计算出两帧 IMU 之间的旋转( IMU 陀螺仪积分),然后通过手眼标定的方式求解出外参

学新通

lidar和imu之间的旋转外参比平移外参对性能的影响更大 。

以带有IMU加速计和gps信号的小车为例,用EKF滤波和图优化方法求解某一时刻小车行驶的位置(t=0时,位置为0)

EKF:

假设已知IMU和gps传感器的噪声方差

  1. 预测。 假设已知t-1时刻小车的位置(后验),将其与(t-1)~t时间段内imu的积分相加,可以预测t时刻小车的位置(先验)
  2. 更新。 计算卡尔曼增益,用t时刻的gps数据更新预测的位置,得到t时刻的位置(后验)。

(这里有点递归的感jio。。。)

图优化:

小车在t-1时刻的位置加上(t-1)~t时间段内的imu积分,得到t时刻预测的小车位置。将该值与t时刻gps观测数据相减后做平方和,得到一个代价函数,其中,小车位置是待优化变量。最后用最优化方法求解即可。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgacfja
系列文章
更多 icon
同类精品
更多 icon
继续加载