LIO-SAM代码简明分析

LIO-SAM代码简明分析

0.IMU预积分

目的

1.IMU通过加速度计和陀螺仪测出的是加速度和角速度,通过积分获得两帧之间的旋转和位移的变换;
2.在后端非线性优化的时候,需要优化位姿,每次调整位姿都需要在它们之间重新传递IMU测量值,需要重新积分,这将非常耗时,为了避免重新传递测量值,所以采取预积分策略。

一.ImageProjection:接受来自IMUPreintegration的高频激光里程计odom,发布经过运动畸变校正的点云。

1.点云去除运动畸变

(1).首帧imu姿态角赋予lidar帧做初始姿态角,之后令第一个imu帧旋转角为0,则之后每一个IMU时刻的旋转角都是基于当前IMU角速度和之前旋转角的累加。
(2).通过匀速模型计算之后每个imu数据帧的旋转角。
(3)获得首尾激光里程计之间的位姿变换
(4).寻找每个激光点云点最近的两个相邻imu帧,通过两个相邻imu帧之间的旋转,线性插值获得每个激光点云点的旋转。
(5).通过获得当前时刻与初始时刻之间的位姿变换,计算每个激光点云点与初始时刻的位姿变换,并且将每个激光点云点补偿到第一个点对应的时刻。

二.IMUPreintegration:接受imu原始数据与mapOptmization发出的里程计数据,发出经过imu预积分优化之后的里程计数据。

1.imu预积分以及更新步骤(imuHandler与odometryHandler结合观看的)

  1. 第一次优化:
  • 传入imu数据,传入mapOp发布的激光里程计数据;
  • 系统初始化:获得先验odom位姿,重置imu积分器和opt积分器;
  • 提取两帧imu数据,放入opt积分器进行预积分,构建imu因子;
  • 然后把Xkey-1 到Xkey之间,加入这个imu因子以及 激光里程计提供的pose因子,整体做一个优化。优化的结果就是bias,以及“第二帧开始”这个时刻的系统位姿;
  • 把优化的结果(主要是bias),重置opt积分器和imu积分器。 然后把当前帧(上面的“第二帧开始”)之前的数据给删掉,用imu积分器,从“第二帧开始”这里开始往后积分。(我们需要明确一点,在这个处理过程中,imu队列也在持续的进数据,(即1.1的imu
lio-sam是一个开源项目,是LIO(Linux内核iSCSI target)模块的一个分支。它是专门为高性能和可扩展性而设计的iSCSI目标代码lio-sam项目的主要目标是提供一个高性能的iSCSI目标,同时保持Linux kernel的稳定性和可靠性。它在传输层使用Scst(SCSI target实现)和LIO(Linux iSCSI实现)的组合,并有一些优化以提高性能。它还支持各种iSCSI功能,如CHAP认证、数据压缩和IPsec等。 代码阅读lio-sam对Linux内核和iSCSI有一定的了解是很有帮助的。lio-sam使用了一些Linux内核的机制,如工作队列和内存管理。了解这些机制将有助于理解lio-sam的实现原理和性能优化技巧。 在阅读lio-sam代码时,可以关注以下几个方面: 1. LIO模块的初始化和配置:lio-sam在加载模块时进行一些初始化工作,包括创建Scst的实例和配置iSCSI target。了解这些步骤可以帮助理解lio-sam的工作流程和配置方式。 2. iSCSI连接管理:lio-sam负责管理iSCSI连接,包括连接的建立、维护和中断。了解连接管理的实现原理可以帮助理解lio-sam如何处理多个客户端的连接和请求。 3. SCSI命令处理:lio-sam的核心功能是处理SCSI命令。了解lio-sam如何解析SCSI命令、调用底层存储设备和返回响应可以帮助理解其工作原理和性能优化方法。 4. 性能优化技巧:lio-sam的设计目标之一是提高性能。代码中可能包含一些性能优化技巧,如批量处理、IO调度和缓存管理等。了解这些技巧可以帮助优化自己的应用程序。 需要注意的是,代码阅读是一项耗时耗力的工作,需要具备一定的编程和系统知识。在阅读代码时,可以结合官方文档、论坛和社区来获取更多的信息和帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值