经典文献阅读之--DAMS-LIO(基于iEKF的轻量级LiDAR惯性里程计)

news2024/11/26 0:44:19

0. 简介

融合方案是多传感器融合方法的关键,多传感器融合方法是地下矿山和行星表面等复杂极端环境下状态估计的最有前途的解决方案。本文提出了一种基于iEKF的轻量级LiDAR惯性里程计系统,该系统采用可感知退化的模块化传感器融合管道,仅在检测到退化时才在更新过程中同时测量来自另一个里程计的LiDAR点和相对位姿。通过CRLB理论和仿真实验验证了该方法与单一观测值方法相比具有更高的精度。此外,针对各种最先进的传感器融合方法,在感知挑战数据集上对所提出的系统进行了评估。结果表明,即使在恶劣的环境和较差的观测条件下,该系统仍具有较高的估计精度和实时性能。

虽然这个工作还没有开源,但是预计应该会在接收后开源吧,具体原文内容可以参考这里《DAMS-LIO: A Degeneration-Aware and Modular Sensor-Fusion LiDAR-inertial Odometry》。
在这里插入图片描述

图1:(a)是DAMS-LIO在CERBERUS DARPA地下挑战数据集中的映射结果,其中包含许多具有挑战性的环境,如(b)-(c)所示,包括黑暗、长隧道和无纹理区域。我们将我们的映射结果与最先进的激光惯性测距导航系统LIO-SAM在(a)右上角进行比较。

1. 文章贡献

  1. 提出了一种基于退化感知和模块化传感器融合的轻量级激光雷达-惯性测程系统(DAMS-LIO),该系统能够在极端环境下进行鲁棒和准确的状态估计,在计算资源有限的情况下,为机器人执行复杂探测任务提供了明显的优势。

  2. 提出了一种新的传感器融合方法,将激光雷达和其他里程计的信息完全融合,仅在检测到退化时,将激光雷达点和其他里程计的相对位姿作为更新过程中的测量值。

  3. 基于CRLB定理进行了理论分析,以量化性能,并证明了所提出的传感器融合方法的高精度。

  4. 在模拟和真实数据集上的大量实验验证了我们方法的鲁棒性和准确性。

2. 系统架构

我们系统中每个坐标系的定义如图2所示。遵循典型的LIO坐标系定义, { L } \{L\} {L} { I } \{I\} {I}分别对应于激光雷达和IMU坐标系,而 { G } \{G\} {G}是一个本地垂直参考坐标系,其原点与初始IMU位置重合。 { O } \{O\} {O}表示其他里程计测量,其原点标记为 { M } \{M\} {M}
在这里插入图片描述

L p ^Lp Lp表示每个点相对于激光雷达坐标系的位置。一些重要且常用符号的定义在表格I中给出。

在这里插入图片描述

A. 状态向量(这部分内容比较通用)

我们系统中估计的状态包括当前的IMU状态 x I x_I xI,LiDAR和IMU之间的外参 I x L I_{x_L} IxL以及从其他里程计帧到IMU帧的变换 I x O I_{x_O} IxO。在时刻 t k t_k tk,状态可写为:

在这里插入图片描述
G v I ^Gv_I GvI是IMU在全局坐标系下的速度, b g , k b_{g,k} bg,k b a , k b_{a,k} ba,k分别表示陀螺仪和加速度计的偏差, g g g是在 { G } \{G\} {G}坐标系下的重力向量, x L = { L I q ˉ , I p L } x_L = \{^I_L \bar{q}, ^Ip_L\} xL={LIqˉ,IpL} x O = { O I q ˉ , I p O } x_O = \{^I_O \bar{q}, ^Ip_O\} xO={OIqˉ,IpO}表示从其他里程计坐标系{O}和LiDAR坐标系 { L } \{L\} {L}到IMU坐标系 { I } \{I\} {I}的变换。

B. IMU传播(同理IMU的传播)

由于IMU的测量受到偏差 b b b和零均值高斯噪声 n n n [15]的影响,因此它们可以被建模为:
在这里插入图片描述
其中, ω m ( t ) ω_m(t) ωm(t) a m ( t ) a_m(t) am(t)是原始的IMU测量数据, I ω ( t ) I_ω(t) Iω(t)是IMU在本地坐标系 { I } \{I\} {I}下的角速度, G g G_g Gg G a I ( t ) G_{a_I}(t) GaI(t)是重力和IMU在全局坐标系下的加速度。IMU运动学与[16]相同,为了保持简洁,我们这里不再重复描述。为了将协方差矩阵从时间 t k t_k tk传递到时间 t k + 1 t_{k+1} tk+1,我们按照[17]的线性离散时间模型生成格式:
在这里插入图片描述
这段文本是关于状态向量和IMU传播的内容。其中,在 Φ k Φ_k Φk是线性化的系统状态转移矩阵, n k = [ n g n w g n a n w a ] n_k=[n_g n_{wg} n_a n_{wa}] nk=[ngnwgnanwa]是系统噪声。除了四元数以外,误差状态定义为 x ~ = x − x ^ \tilde{x} = x − \hat{x} x~=xx^。其中,四元数通过关系式 q = q ^ ⊗ δ q q = \hat{q}⊗δq q=q^δq定义。与[16]相同,符号 ⊗ ⊗ 表示四元数乘法,误差四元数定义为 δ q ⋍ [ 1 2 δ θ T 1 ] T δq \backsimeq [ \frac{1}{2} δθ^T 1]^T δq[21δθT1]T
如果将 n k n_k nk的协方差定义为 Q k Q_k Qk,则可以将状态协方差从 t k t_k tk传播到 t k + 1 t_{k+1} tk+1,具体方法见公式。
在这里插入图片描述
其中, Φ = d i a g ( Φ I , Φ O ) Φ = diag(Φ_I, Φ_O) Φ=diag(ΦI,ΦO) G = [ G I T , G O T ] T G = [G^T_I, G^T_O]^T G=[GIT,GOT]T Φ I Φ_I ΦI G I G_I GI表示与其他里程计和IMU之间的外参之外的变量相关的部分,这与[12]中的定义相同。此外, Φ O = I 6 × 6 , G O = 0 6 × 12 Φ_O = I_{6×6},G_O = 0_{6×12} ΦO=I6×6,GO=06×12

C. 测量模型(比较重点的知识)

1)LiDAR测量:对于来自LiDAR的测量,我们将其建模为[12]中的模型。在对在τi时间采样的扫描进行运动补偿后,我们将局部LiDAR坐标系中的第 j j j个点定义为 L p j ^Lp_j Lpj。通过向后传播,该点可以更改为与 t k t_k tk处IMU测量对应的扫描结束测量。同时,由于每个点应该位于地图中的小平面区域上,我们可以得到
在这里插入图片描述
其中, G q j ^Gq_j Gqj 是小平面上的点, G u j ^Gu_j Guj 是平面的法向量。 I R L ^IR_L IRL G R I k ^GR_{Ik} GRIk 是对应于 %ILq G I K q ^GI_{Kq} GIKq的旋转矩阵。 L n j ^Ln_j Lnj 是点 L p j ^Lp_j Lpj的测距和指向噪声。(8)也可以用更简洁的形式总结为:
在这里插入图片描述
为了线性化更新的测量模型,我们将测量模型在 x ^ k \hat{x}_k x^k处进行一阶近似。
在这里插入图片描述其中 v l ∈ N ( 0 , R l ) v_l ∈ N(0,R_l) vlN(0,Rl)是由于原始测量噪声 L n j ^Ln_j Lnj而产生的高斯噪声。 H L H_L HL是残差 r l r_l rl对误差状态 x ~ k \tilde{x}_k x~k的雅可比矩阵,给出如下:
在这里插入图片描述
2) 另一种里程表测量:由于每个里程表的发布频率不同,我们执行线性插值以获取估计状态在时间 t k t_k tk t k + 1 t_{k+1} tk+1 时的其他里程表姿态,并将它们的坐标系表示为 O k − 1 O_{k−1} Ok1 O k O_k Ok。我们将从 A 到 B 的变换矩阵 A T B ^AT_B ATB 定义为 A T B = [ A R B , A p B ; 0 3 × 3 , 1 ] ^AT_B = [^AR_B ,^Ap_B ; 0_{3×3}, 1] ATB=[ARB,ApB;03×3,1]。然后根据图 2,我们有以下变换关系:
在这里插入图片描述
其中,$^{Q{k-1}}T_{O_k} = KaTeX parse error: Double superscript at position 19: …^{-1}_{O_{k-1}}^̲GT_{O_k} 是通过其他里程计计算出的相对位姿测量。因此,基于(13),我们可以很容易地得到测量模型 z O = [ z r z p ] z_O = [\begin{matrix}z_r \\ z_p\end{matrix}] zO=[zrzp],其中:
在这里插入图片描述
根据公式(10)计算的旋转和平移误差,其中 v r ∈ N ( 0 , R r ) v_r∈N(0,R_r) vrN(0,Rr) v p ∈ N ( 0 , R p ) v_p∈N(0,R_p) vpN(0,Rp)是相应的高斯噪声。因此,根据公式(14)和(15),我们可以得到旋转和平移残差的误差状态的雅可比矩阵。
在这里插入图片描述
其中:
在这里插入图片描述

D. 变形感知更新(比较重点的知识)

与[12]类似,我们有以下误差状态:
在这里插入图片描述
⊞ / ⊟ \boxplus/\boxminus /表示Lie群中的加减运算符[18]。 M κ M_\kappa Mκ ( x ^ k κ ⊞ x ~ k κ ) ⊟ x ^ k (\hat{x}^\kappa_k \boxplus \tilde{x}^\kappa_k)\boxminus \hat{x}_k (x^kκx~kκ)x^k相对于 x ~ k κ \tilde{x}^\kappa_k x~kκ的偏导数,以零为值进行评估。

…详情请参照古月居

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

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

相关文章

C语言小项目——通讯录高阶(文件管理版)

通讯录初阶: 点这里 通讯录中阶: 点这里 文件管理版本改进之处通讯录初始化退出通讯录并保存 完整代码contact.hcontact.ctest.c 文件管理版本改进之处 通讯录初始化 contact.c 退出通讯录并保存 test.c contact.c contact.h 完整代码 contact.h #pragma once#include&l…

缕析条分Scroll属性 | 京东云技术团队

最近有项目需要使用js原生开发滑动组件,频繁要用到dom元素的各种属性,其中以各种类型的height和top属性居多,名字相近,含义也很容易搞混。因此特地总结归纳了一下常用的知识点,在文末我们来挑战实现一个简易的移动端Sc…

Window下编译ffmpeg

Window下编译ffmpeg 下载MSYS2编译ffmpeg运行 下载MSYS2 MSYS2是一个是工具和库的集合,它能够方便的在windows上编译、安装和运行程序。ffmpeg可以通过这个软件来编译。 从MSYS2官网下载MSYS2并安装。 运行MSYS2终端,在终端中输入命令,安装…

JVM运行时数据区——Java虚拟机栈

每个线程在运行时都会创建一个Java虚拟机栈,也是线程私有的,其内部包含一个个的栈帧,先进后出,对应着一个个方法的调用,运行完则弹出,所以不存在垃圾回收的问题,如果线程所需要的栈深度大于此线…

什么是芯片组,南桥与北桥芯片的作用与区别

主板是连接计算机所有部件的PCB。在老式计算机中,所有芯片都分布在主板上。在现代计算机中,芯片数量减少并集中在特定位置。因此,将多个芯片组合起来形成一个芯片。这种可以替代大量芯片的芯片称为芯片组。主板上有一个芯片组。芯片组处理CPU…

docker在linux下简单部署项目

springboot项目docke部署 1.手动部署 1. 编写dockerfile文件 2. 将jar包和docker文件放到服务器上 执行mvn clean package docker:build 3.执行docker images查询是否存在镜像 4.启动方式放在下面写 2.通过gitlab ci/cd方式实现自动化部署 3.创建一个.gitlab-ci.yml 文件 3…

匿名内部类/Lambda Java和Kotlin谁会导致内存泄漏?

前言 内存泄漏是程序界永恒的话题,对于Android开发来说尤为重要,想让你的App表现得更优雅,了解并治理内存泄漏问题势在必行。 通过本篇文章,你将了解到: 何为内存泄漏?Android 常见内存泄漏场景Java匿名内部类会导致…

Vue3警告提示(Alert)

可自定义设置以下属性: 警告提示内容(message),类型:string | slot,默认:‘’警告提示的辅助性文字介绍(description),类型:string | slot&#…

14 - 堆栈 - 小顶堆

前面我们学习了线性结构的栈, 今天我们来学习一种非线性结构-堆 堆的定义 堆是一种非线性结构,可以把堆看作一棵二叉树, 堆的存储可以使用数组来存放! 堆的分类 堆可以分为大顶堆和小顶堆。 大顶堆: 每个结点的值都大于或等于其左右孩子结点的值。 小顶堆: 每个结点的值…

目标检测——yolo系列算法

目录 yolo算法yolo算法思想yolo的网络结构网络输入网络输出7x7网格30维向量 yolo模型的训练训练样本的构建损失函数模型训练 模型预测yolo总结 yoloV2预测更准确(better)batch normalization使用高分辨率图像微调分类模型采样Anchor Boxes聚类提取anchor尺度边框位置的预测细粒…

设计模式之单例模式的实现形式、弊端以及可替代的解决方案。

你好,我是爱养猫的程序员雪球,今天与你分享设计模式之单例模式。 单例模式是指一个类只允许创建一个对象(或实例)的模式。它在很多应用场景中具有重要作用,例如处理资源访问冲突(如日志文件写入&#xff09…

生信分析案例 Python简明教程 | 视频12

开源生信 Python教程 生信专用简明 Python 文字和视频教程 源码在:https://github.com/Tong-Chen/Bioinfo_course_python 目录 背景介绍 编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Python基本语法 数…

安徽华云安荣获合肥市大数据企业认定

日前,合肥市数据资源局公布了2023年度合肥市大数据企业认定名单,华云安子公司安徽华云安科技有限公司(以下简称安徽华云安)被成功认定为合肥市大数据企业。 据悉,合肥市大数据企业是合肥市为扶持和鼓励大数据企业发展&…

Android 自定义带箭头对话框背景

简介 自定义drawable,带箭头对话框背景,三角形矩形组合。应用于对话框背景、提示语背景等。 可设置箭头显示方向、箭头大小、箭头导圆角尺寸、矩形尺寸、矩形导圆角尺寸、背景颜色、drawable padding值(影响宿主控件padding)。 …

欧姆龙以太网模块如何设置ip连接 Kepware opc步骤

在数字化和自动化的今天,PLC在工业控制领域的作用日益重要。然而,PLC通讯口的有限资源成为了困扰工程师们的问题。为了解决这一问题,捷米特推出了JM-ETH-CP转以太网模块,让即插即用的以太网通讯成为可能,不仅有效利用了…

排序算法之冒泡排序详解-python版

冒泡排序:通过比较2个相邻元素之间的大小,交换元素顺序,从而达到排序目的。 从百度百科摘抄下来的冒泡排序原理如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作&#xf…

ComboBox基本用法

作用:是一个下拉框,用于以下拉列表的方式展示数据。 常用属性: 常用事件: 下拉列表框内容选择变化时触发 后台代码示范: private void comboBox1_SelectedIndexChanged(object sender, EventArgs e){//获取被选中的…

怎样优雅地增删查改(七):按用户查询

文章目录 实现使用测试 实现 定义按用户查询(IUserOrientedFilter)接口 public interface IUserOrientedFilter {public string EntityUserIdIdiom { get; }Guid? UserId { get; set; } }EntityUserIdIdiom:语义上的UserId,用于…

使用Pandas简化数据探索性分析

大家好,本文将探讨数据探索性分析的两个基本方面:数据集形状和空值。我们将深入了解Pandas如何简化这些任务,重点关注需要同时分析多个表格的情况。使用的库是pandas和tabulate。 数据集形状 要检索单个表格的形状,可以使用.sh…

「小摹AI」赋能原型设计 开放内测申请

「小摹AI」智能原型助手发布啦! 4大AI应用能力:智能原型|智能文本|智能翻译|智能填充 释放原型设计的无限潜能 摹客AI - 让设计更具创造力http://www.mockplus.cn/ai/?hmsrwencsdnAI 智能原型 催生创新,开启原型设计新境界 根据描述&…