FAST-LIO论文阅读

news2024/11/26 16:29:13

1. 摘要

本文提出一个开销较小且鲁棒的激光惯性里程计框架。使用迭代扩展卡尔曼滤波器来实现激光雷达特征点和IMU的紧耦合,可以在快速运动、有噪声或重复纹理等退化环境中鲁棒地定位。为了在测量数据量很大的情况下降低开销,提出了计算卡尔曼增益的新公式。该公式的计算开销依赖于状态量的维度而非测量量的维度。该方法已经在室内和室外环境中进行了测试,在所以有测试中该方法均能可靠运行。

2. 代码地址

GitHub - hku-mars/FAST_LIO: A computationally efficient and robust LiDAR-inertial odometry (LIO) package

3. 引言

固态激光雷达拥有巨大的潜力,但也带来了一些新的挑战:

  • 激光雷达的特征点通常是环境中的几何结构(边或平面)。当无人机运行在重复纹理的环境中时,因为没有足够强的特征,所以容易产生退化。当激光雷达的FOV较小时这一问题更加明显。
  • 由于沿着扫描方向的高分辨率,每次激光雷达扫描通常包含许多特征(数千)。因为在退化场景这些特征点并不足以可靠地得到位姿,那么把这些特征点与IMU进行紧耦合将会产生巨大的计算开销,对于无人机的是不可接受的。
  • 由于激光采样是循序地发射并接收激光,所以同一次扫描过程中的采样点的时间戳各不相同,这会造成畸变,进而影响匹配结果。

论文主要贡献:

  • 为了就对快速运动、噪声、重复纹理造成的退化,采用紧耦合迭代卡尔曼滤波器来融合激光雷达特征点和IMU数据。提出了一个规范的反向传播过程去计算运动畸变。
  • 为了降低由于数据量大而造成的计算开销大的问题,提出了一个新的公式来计算卡尔曼增益,且证明了它与传统卡尔曼计算公式的等效性。新公式的计算复杂度与状态量的维度相关而非测量量的维度。
  • 在一个快速且鲁棒的激光惯性里程计软件包中实现了所有的公式。该系统可以在板上计算平台中运行。
  • 使用无人机在不同的室内室外环境中测试了该系统,并验证了在快速运动或者强烈震动的噪声环境下的鲁棒性。

4. 论文架构

论文架构图如上:输入为激光雷达数据和imu数据。雷达数据经过预处理环节:激光点累积,以及特征提取(平面特征,边缘特征),imu数据经过前向推算,后向推算,以及为激光雷达点云提供畸变去除,在更新过程中,联合IMU和雷达数据构建观测方程,滤波框架采用IEKF。IMU的后向过程是一个后向的推算,主要作用是为雷达去畸变提供运动约束。

5.系统介绍

5.1. 符号定义

定义了两种符号,如下所示,可以支持在旋转矩阵以及流形两种符号的公式表述。当是旋转矩阵时,就代表加减。

5.2. 连续域模型

假设IMU和激光雷达刚性连接,所以它们之间的安装角和杆臂是固定的。如下是连续域下的运动方程,为微分形式。这里把零偏建模成随机游走过程。

5.3. 离散域模型

离散域下的模型如下所示,连续域转到离散域要乘以采样时间t。

从下面公式可以到,状态变量为18维,这里不太清楚为啥把世界坐标系下的重力放在状态变量中了,因为它本身就是个固定值。

5.4. 雷达数据预处理

雷达原始数据频率非常高,200KHz,在这么高的频率下,不可能做到实时接收,我理解在激光雷达的内部信号处理中,一般做法是累积一段时间,再一块接收,也就是一帧数据,实现降频,在FAST-LIO中,一般为50Hz,按照这个频率计算的话,一帧数据包括4K的原始数据。在论文中,累积处理的时间被记为tk,对于原始数据,我们可以通过高平滑性得到平面特征,低平滑性得到边特征。假设在20ms时间内雷达发生了转弯和线性运动,所以这一帧中的雷达点采集的时间戳是不一样的,每个时间戳对应的位姿也是不一样的,就需要借助IMU来去除运动畸变。

6.状态估计

这是论文的核心内容。

6.1. 前向过程

前向过程其实就是卡尔曼滤波的预测过程,有两个方程:状态变量的预测方程,以及协方差矩阵的预测方程。

如下是系统预测方程。

如下分别为系统转换矩阵和噪声转换矩阵。

下面是协方差先验过程。

6.2. 后向过程&运动补偿

为何要进行后向过程,其实涉及到一个时间软同步的问题。IMU和激光雷达的时间不可能完全对比,相差在几个ms。激光雷达一帧数据由很多点组成,这些点显然不是同一时间测量得到的,所以需要补偿时间差带来的运动误差。如下所示,已知j刻度的激光雷达点坐标,如何求k时刻的激光雷达点坐标,k时刻代表真正的采集时间,当然,这个时间可以用线性插值方法获取,也存在一定的插值误差,但是一般误差足够小了。需要先转换到IMU坐标系,再通过后方推算得到k时刻IMU坐标下的激光点坐标,最后再转换回到激光雷达坐标系,就得到了k时刻的雷达点坐标系。

6.3. 残差计算

在补偿完激光雷达的运动畸变之后,我们就得到了用在时间戳tk接收到的所有激光雷达点,构建观测残差信息。

残差计算是为了构建滤波器的观测方程。如下所示,雷达点坐标,先转到IMU坐标系,再转到世界坐标系下。

对于每一个激光雷达点,最邻近平面或者边缘被定义为激光雷达点投影到地图上之后的最接近的平面或者边缘。残差就是投影到地图之后的两者之间的距离。观测模型如下图所示:

观测模型中,需要计算地图中最邻近的平面,为了得到这个平面方程,需要用到平面上一点(也就是对应的雷达点投影到地图上的相应点),以及该平面的法向量,所以观测模型如下公式所示:

完整的观测方程如下所示,下公式中的u即为法向量,q是图中的平面中对应点。从观测方程中可以看到,IMU欧拉角,IMU和雷达之间的外参也是公式中,可以依靠观测方程被估计出来,我理解这两个待估计量存在耦合性,在标定出其中一个参数的基础上,去估计另外一个参数可能更合适。

观测方程就把雷达数据和状态向量联系在一起了,如下所示。

对于如何寻找最近地图中的边,或者平面,可以建立KD树搜索。通过构建残差方程,对于残差过大的激光点观测,我们就可以把它当成野值处理。

6.4. 迭代更新

我们建立的观测方程如下,其实和残差构建是一致的。

我们知道EKF需要做泰勒公式展开,求雅可比矩阵,如下所示:

H矩阵就是对应的雅可比矩阵,文中提到下面两种计算增益的公式是等价的,第一个公式相比第二个公式,在计算效率上会更高。

协方差的恶后验计算公式如下:

状态变量的后验如下:

从最优化的角度来看滤波器,则IEKF的最优化公式如下:

状态估计的整体流程如下,IEKF的迭代过程,有一个终止条件,就是看残差小于一个特定值。

7. 地图更新

地图更新过程就是把激光雷达点投影到世界坐标系的过程,如下公式所示:

8. 初始化

初始化需要静止2s,静止状态下可以计算陀螺仪的零偏,以及加速度计的重力向量。

9. 实验结果

如下所示,可以看到,相比LOAM以及LOAM+IMU的方案,FAST-LIO用时更短,并且LOAM+IMU是松耦合的方案。

从下图中可以看到,相比LOAM以及LOAM+IMU,FAST-LIO无论在慢速还是快速运动情况下,建图效果都更好。

参考文献

FAST-LIO(一):论文简要介绍 - 知乎

FAST-LIO: A Fast, Robust LiDAR-inertial Odometry Package by Tightly-Coupled Iterated Kalman Filter 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/92446.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何做电商运营

电商是通过电子设备和网络技术进行的商业模式,通俗的来说也就是通过网络结识买家完成最终交易。电子商务凭借它便宜,丰富和方便的特性,迅速占领了中国一大半的经济市场,作为个人怎么才能做好电商呢?掌握这几个要点就不…

物联网开发笔记(63)- 使用Micropython开发ESP32开发板之控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:显示中文

一、目的 这一节我们学习如何使用我们的ESP32开发板来控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程的第一步:显示中文。 二、环境 ESP32 3.2寸 ILI9341触摸屏 Thonny IDE 几根杜邦线 Win10 接线方法:请看上一篇文章。 三、流程介绍 …

Verilog刷题HDLBits——Conwaylife

Verilog刷题HDLBits——Conwaylife题目描述代码结果题目描述 Conway’s Game of Life is a two-dimensional cellular automaton. The “game” is played on a two-dimensional grid of cells, where each cell is either 1 (alive) or 0 (dead). At each time step, each c…

【图像融合】小波变换(加权平均法+局域能量+区域方差匹配)图像融合【含Matlab源码 1819期】

⛄一、小波变换彩色图像融合简介 1 前言 图像融合是将不同传感器所获得的多个图像根据某种算法进行融合处理,取长补短,使一幅图像能够更清楚、更准确地反映多幅图像的信息,多聚焦彩色图像融合是图像融合的一个分支。目前在各种图像采集与分析系统中已使用的CCD数码相机,对于聚…

分享7 个VUE项目用得上的JavaScript库

借助开源库加速VUE项目的开发进度是现代前端开发比较常见的方式,平常收集一些JavaScript库介绍,在遇到需要的时候可以信手拈来。 VUE 生态有很多不错的依赖库或者组件,是使用VUE开发前端的原因之一。 1. vueuse 这是 GitHub 上星最多的库之…

【coarse-to-fine:基于频谱和空间损失约束】

UPanGAN: Unsupervised pansharpening based on the spectral and spatial loss constrained Generative Adversarial Network (UPanGAN:基于频谱和空间损失约束的生成式对抗网络的无监督全色锐化) 研究发现,在大多数基于神经网…

扎根底层核心技术:OPPO发布旗舰蓝牙音频SoC芯片

OPPO自研芯片能力更进一步。 2022年12月14日,OPPO发布自研芯片马里亚纳MariSilicon Y,作为一颗旗舰蓝牙音频SoC,实现了三大核心技术突破,使OPPO具备了计算连接能力的蓝牙SoC平台的设计能力。 这是OPPO发布的第二款自研芯片。去年…

初学者数据分析——Python职位全链路分析

最近在做Python职位分析的项目,做这件事的背景是因为接触Python这么久,还没有对Python职位有一个全貌的了解。所以想通过本次分析了解Python相关的职位有哪些、在不同城市的需求量有何差异、薪资怎么样以及对工作经验有什么要求等等。分析的链路包括&…

用了那么久的Vue,你了解Vue的报错机制吗?

Vue的5种处理Vue异常的方法 相信大家对Vue都不陌生。在使用Vue的时候也会遇到报错,也会使用浏览器的F12 来查看报错信息。但是你知道Vue是如何进行异常抛出的吗?vue 是如何处理异常的呢?接下来和大家介绍介绍,Vue是如何处理这几种…

【数据结构】树以及二叉树的概念

作者:一个喜欢猫咪的的程序员 专栏:《数据结构》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 目录 树的概念: 树的相关概念: 树如何表示&#xff…

Anaconda中Python虚拟环境的创建、使用与删除

本文介绍在Anaconda环境下,创建、使用与删除Python虚拟环境的方法。 在Python的使用过程中,我们常常由于不同Python版本以及不同第三方库版本的支持情况与相互之间的冲突情况,而需要创建不同的Python虚拟环境;在Anaconda的帮助下&…

如何使用Python构建Telegram机器人来生成随机引语

使用Python构建Telegram机器人以生成随机引语 聊天机器人是用于进行在线聊天对话的软件应用程序,通过文本或文本转语音的方式实现客户服务的自动化。[聊天机器人]可以用于提醒、预约等事情,也可以在社交媒体平台上使用。 在本教程中,我们将…

会自动化就能拿20K?不,你这顶多算会点皮毛···

前段时间公司要招2个自动化测试,同事面了几十个候选人,发现了一个很奇怪的现象,面试的时候,如果问的是框架api、脚本编写这些问题,基本上个个都能对答如流,等问到实际项目的时候,类似“怎么从0开…

如何实现一个基于WebRTC的音视频通信系统

文章有点长,推荐先收藏前言 目前市场上音视频技术方案大致分为以下几类,WebRTC因其超低延时、集成音视频采集传输等优点,是在线教育、远程会议等领域首选技术。 前言 目前市场上音视频技术方案大致分为以下几类,WebRTC因其超低延…

10年网安经验分享:一般人别瞎入网络安全行业

小白入门网络安全,如何选择方向? 如果你是一个新手小白,那么在最开始方向选择上面这一步是至关重要的,一旦你选错了那很可能就要和安全“saygoodbye”了。 很多小白刚开始的时候还没开始学会走就想着飞了,计算机功底…

四六级口语|考研复试口语|满满干货

目录 1.Which do you prefer to use, credit cards or cash?/Do you prefer the credit card or cash? 2.When you shop, do you prefer to go by yourself or with someone?

指针进阶(3)--玩转指针

指针进阶 内容不多,但面面俱到,都是精华 1.回调函数: 2.详解qsort函数参数: 回调函数就是,把一个函数的地址,放在函数指针中,然后将该指针作为一个参数,传到 另一个函数中&#x…

04.南瓜树低代码平台平台 分析后的感想

随着企业产品的不断完善,后续将有时间来推进产品转向低代码平台化。 低代码平台不是无代码平台,采用配置的方式完成UI/流程/报表的处理,有业务人员在完成基本的产品框架后,由研发人员完成业务规则代码固化,最终达到产…

MobSDK 封装MobSDK基础包

平台兼容性 Android Android CPU类型 iOS 适用版本区间:4.4 - 12.0 armeabi-v7a:支持,arm64-v8a:支持,x86:支持 原生插件通用使用流程: 购买插件,选择该插件绑定的项目。在HB…

3. 实例化Bean的三种方式

实例化Bean的三种方式 一、构造方法方式 1.1 BookDaoImpl package com.lin.dao.daoimpl;import com.lin.dao.BookDao;public class BookDaoImpl implements BookDao {public BookDaoImpl() {System.out.println("BookDao的无参构造器");}/*** 数据层实现*/public …