0 摘要

本文提出了一种计算高效且鲁棒的激光雷达惯性里程计框架。我们使用紧耦合的迭代扩展卡尔曼滤波(IEKF) 将激光雷达特征点与IMU数据融合,以便在可能会造成退化的快速运动、大量噪声或杂乱环境中进行稳健导航。为了在存在大量测量值的情况下降低计算量,我们提出了一个新的公式来计算卡尔曼增益。新公式的计算量取决于状态维数而不是测量维数。我们将所提出的方法进行了实现,并在各种室内外环境中进行了测试。在所有测试中,我们的方法都能够实时地产生可靠的导航结果:在四旋翼机载计算机上运行时,它在一次扫描中融合了1200多个有效特征点,并在25毫秒内完成一次IEKF步骤的所有迭代。我们的代码在Github上是开源的。开源地址为:https://github.com/hku-mars/FAST_LIO

I 引言

同时定位与建图(SLAM)是无人机(UAV)等移动机器人的基本前提。视觉(惯性)里程计(VO),如双目视觉里程计[1]和单目视觉里程计[2, 3]由于其重量轻且成本低,通常用于移动机器人。尽管提供了丰富的RGB信息,但视觉解决方案缺乏直接的深度测量,并且需要大量计算资源来重建三维环境以进行轨迹规划。此外,视觉方案对光照条件非常敏感。激光雷达(LiDAR)类传感器可以克服所有这些困难,但对于小型移动机器人来说成本太高(并且体积太大)。

固态激光雷达是近年来激光雷达发展的主要趋势,如基于MEMS扫描[4]和基于旋转棱镜[5]的激光雷达。这些激光雷达非常具有成本效益(成本接近全球快门相机),重量轻(可以由小型无人机携带),并且高性能(能够直接主动的进行远程的高精度三维测量)。这些特性使得此类激光雷达适用于无人机,特别是工业无人机,这些工业无人机需要获得精确的环境三维地图(如航空测绘)或者可能在具有严重照明变化的混乱环境中工作(如灾后搜索和检查)。

尽管固态激光雷达具有巨大的潜力,但它给SLAM带来了新的挑战:

  1. 激光雷达测量中的特征点通常是几何结构(例如环境中的边缘和平面)。当无人机在没有强特征的杂乱环境中工作时,基于激光雷达的解决方案很容易退化。当激光雷达具有小视场时,这个问题更加明显。
  2. 由于沿扫描方向的高分辨率,激光雷达扫描通常包含大量特征点(例如成千上万个)。虽然这些特征点并不足以可靠地确定在退化情况下的姿态,但将如此大量的特征点与IMU测量进行紧耦合需要巨大的计算资源,这是无人机机载计算机无法负担的。
  3. 由于激光雷达采样点是由几个激光探头和接收器依次发射和接收激光雷达进行采样的,所以一次扫描中的激光点总是在不同的时间被采样,这样会导致运动畸变,从而显著降低扫描配准[6]。无人机螺旋桨和马达的不断旋转也给IMU测量带来了显著的噪声。

为了使激光雷达导航能够适用于小型移动机器人(如无人机),我们提出了FAST-LIO,这是一个计算高效并且鲁棒的激光雷达惯性里程计功能包。更具体地说,我们的贡献如下:

  1. 为了应对可能会造成退化的快速运动、大量噪声或杂乱环境,我们采用紧耦合的迭代卡尔曼滤波IEKF将激光雷达特征点与IMU测量值融合。我们提出了一种正式的反向传播过程,以补偿运动畸变;
  2. 为了降低大量激光雷达特征点所带来的计算负载,我们提出了一个新的公式来计算卡尔曼增益,并证明了它与传统的卡尔曼增益计算公式等价。新公式的计算复杂度取决于状态维数而不是测量维数。
  3. 我们将我们的公式应用到一个快速而鲁棒的激光雷达惯性里程计软件包中。该系统能够在小型四旋翼机载计算机上运行。
  4. 我们在各种室内和室外环境中进行实验,并通过实际的无人机(如图1)飞行测试来验证系统在存在快速运动或强烈振动噪声时的鲁棒性。

接下来的文章组织如下:第二节中,我们讨论了相关的研究工作。在第三节中,我们将对整个系统的pipeline进行概述并介绍每个关键组件的详细信息。第四节介绍了实验。最后在第五节进行总结。

II 相关工作

关于激光雷达SLAM的现有工作非常多。在此,我们将回顾最相关的工作:激光雷达里程计和建图、松耦合和紧耦合激光雷达惯性融合方法。

A 激光雷达里程计和建图

Besl等人[6]提出了一种用于扫描配准的迭代最近点方法(ICP),为激光雷达里程计奠定了基础。ICP方法在稠密三维扫描中表现良好。然而,对于激光雷达测量的稀疏点云,ICP方法要求的精确点匹配很少存在。为了解决这个问题,Segal等人[7]提出了一种基于点到平面距离的广义ICP方法。然后,Zhang等人[8]将这种ICP方法与点到边缘距离相结合,开发了激光雷达里程计和建图框架(LOAM)。此后,基于LOAM出现了很多种改进方法,比如LeGO-LOAM[9]和LOAM- livox[10]。虽然这些方法在结构环境和大视场的激光雷达中表现很好,但它们非常容易受到缺少特征的环境或小视场激光雷达[10]的影响。

B 松耦合激光雷达惯导里程计

IMU测量通常用于减轻激光雷达在缺少特征的环境中退化的问题。松耦合激光雷达惯性里程计(LIO)方法通常分别处理激光雷达和IMU的测量结果,然后融合它们的结果。例如,使用IMU辅助的LOAM[8]将通过IMU测量值积分得到的位姿作为激光雷达扫描配准的初始估计。Zhen等人[11]使用误差状态EKF融合了IMU测量和激光雷达测量的高斯粒子滤波输出。Balazadegan等人[12]增加了imu重力模型来估计六自由度自我运动,以辅助激光雷达扫描配准。Zuo等人[13]使用多状态约束卡尔曼滤波(MSCKF)将扫描配准结果与IMU和视觉测量结果融合。松耦合方法的一个常见步骤是通过对一个新的扫描进行配准来获得位姿测量,然后将位姿测量与IMU测量融合。将扫描配准与数据融合分离,减少了计算负载。然而,它忽略了系统的其他状态(例如速度)和新扫描的位姿之间的相关性。此外,在缺少特征的环境下,扫描配准会在某些方向退化,导致后面步骤中不可靠的融合。

C 紧耦合激光雷达惯导里程计

与松散耦合的方法不同,紧耦合的激光雷达惯性里程计方法通常将激光雷达的原始特征点(而不是扫描配准结果)与IMU数据融合。紧耦合LIO主要有两种方法:基于优化的方法和基于滤波的方法。Geneva等人[14]利用IMU预积分约束[15]和激光雷达特征点的平面约束[16]进行图优化。最近,Ye等人[17]提出了LIOM功能包,该包使用了类似的图优化方法,但基于边缘和平面特征。对于基于滤波器的方法,Bry[18]使用高斯粒子滤波器(GPF)来融合IMU和平面2D激光雷达的数据。该方法也被用于波士顿动力Atlas类人机器人。由于粒子滤波的计算复杂度随着特征点个数和系统维数的增加而快速增长,卡尔曼滤波及其变种通常更受欢迎,比如扩展卡尔曼滤波[19]、无迹卡尔曼滤波[20]、迭代卡尔曼滤波[21]等。

我们的方法属于紧耦合方法。我们采用类似于[21]的迭代扩展卡尔曼滤波器来减小线性化误差。卡尔曼滤波器(及其变体)的时间复杂度为 O(m2)\mathcal{O}\left(m^{2}\right)O(m2),其中m为测量维数[22],这在处理大量激光雷达测量时可能导致非常高的计算负载。朴素的下采样将减少测量的数量,但以信息丢失为代价。类似[9],[21]通过提取和拟合的地面来减少测量的数量。然而,这并不适用于不总是在地上运行的航空应用。

III 方法论

A 框架概览

本文将使用表I中所示的符号。我们的工作流程概述如图2所示。激光雷达输入被送入特征提取模块,以获得平面和边缘特征。然后,将提取的特征和IMU测量值输入到我们的状态估计模块,以10Hz−50Hz的频率进行状态估计。然后,使用估计的姿势将特征点注册到全局帧,并将它们与从一开始构建的特征点地图进行合并。更新后的地图最终用于在下一步中注册更多的新点。

  • tkt_{k}tk​:第 kkk 次 Lidar 扫描的结束时间
  • τi\tau_{i}τi​:一次 Lidar 扫描中的 IMU 第 iii 次采样时间
  • ρj\rho_{j}ρj​:一次 Lidar 扫描中的 第 jjj 个特征点的采样时间
  • Ii,Ij,IkI_{i}, I_{j}, I_{k}Ii​,Ij​,Ik​:分别表示在 τi,ρj\tau_{i},\rho_{j}τi​,ρj​ 和 tkt_{k}tk​ 时刻的 IMU 坐标系
  • Lj,LkL_{j}, L_{k}Lj​,Lk​:分别表示 ρj\rho_{j}ρj​ 和 tkt_{k}tk​ 时刻的 Lidar 坐标系
  • x,x^,x‾\mathbf{x}, \widehat{\mathbf{x}}, \overline{\mathbf{x}}x,x,x:分别表示系统状态的真值、传播值和更新值
  • x~\widetilde{\mathbf{x}}x:表示真值 x\mathbf{x}x 和估计值 x‾\overline{\mathbf{x}}x 之间的误差
  • x^κ\widehat{\mathbf{x}}^{\kappa}xκ:表示迭代卡尔曼滤波第 kkk 次更新的状态传播值
  • xi,xi,xk\mathbf{x}_{i}, \mathbf{x}_{i}, \mathbf{x}_{k}xi​,xi​,xk​:表示在 τi,ρj\tau_{i},\rho_{j}τi​,ρj​ 和 tkt_{k}tk​ 时刻的系统状态
  • xˇj\check{\mathbf{x}}_{j}xˇj​:表示在反向传播时,与 xk\mathbf{x}_{k}xk​ 相关的估计值 xj\mathbf{x}_{j}xj​

B 系统描述

1)⊞/⊟\boxplus/\boxminus⊞/⊟ 运算符:

记 M\mathcal{M}M 为 nnn 维流形空间,比如:M=SO(3)\mathcal{M}=S O(3)M=SO(3)。由于流行在局部上和 Rn\mathbb{R}^{n}Rn 是同胚(homeomorphic)的,我们可以通过两个封闭运算符 ⊞\boxplus⊞ 和 ⊟\boxminus⊟ 来构建从 M\mathcal{M}M 的一个局部邻域到它的正切空间 Rn\mathbb{R}^{n}Rn 之间的双向映射[23]:

⊞:M×Rn→M;⊟:M×M→Rn\boxplus: \mathcal{M} \times \mathbb{R}^{n} \rightarrow \mathcal{M}; \quad \boxminus: \mathcal{M} \times \mathcal{M} \rightarrow \mathbb{R}^{n} ⊞:M×Rn→M;⊟:M×M→Rn

M=SO(3):R⊞r=RExp⁡(r);R1⊟R2=Log⁡(R2TR1)\mathcal{M}=S O(3): \mathbf{R} \boxplus \mathbf{r}=\mathbf{R} \operatorname{Exp}(\mathbf{r}) ; \quad \mathbf{R}_{1} \boxminus \mathbf{R}_{2}=\operatorname{Log}\left(\mathbf{R}_{2}^{\mathrm{T}} \mathbf{R}_{1}\right) M=SO(3):R⊞r=RExp(r);R1​⊟R2​=Log(R2T​R1​)

M=Rn:a⊞b=a+b;a⊟b=a−b\mathcal{M}=\mathbb{R}^{n}: \quad \mathbf{a} \boxplus \mathbf{b}=\mathbf{a}+\mathbf{b} ; \quad \mathbf{a} \boxminus \mathbf{b}=\mathbf{a}-\mathbf{b} M=Rn:a⊞b=a+b;a⊟b=a−b

其中,Exp⁡(r)=I+r∥r∥sin⁡(∥r∥)+r2∥r∥2(1−cos⁡(∥r∥))\operatorname{Exp}(\mathbf{r})=\mathbf{I}+\frac{\mathbf{r}}{\|\mathbf{r}\|} \sin (\|\mathbf{r}\|)+\frac{\mathbf{r}^{2}}{\|\mathbf{r}\|^{2}}(1-\cos (\|\mathbf{r}\|))Exp(r)=I+∥r∥r​sin(∥r∥)+∥r∥2r2​(1−cos(∥r∥)) 是指数映射[23],Log⁡(⋅)\operatorname{Log}(\cdot)Log(⋅) 是其逆映射。对于复合流形:M=SO(3)×Rn\mathcal{M}=S O(3) \times \mathbb{R}^{n}M=SO(3)×Rn,我们有:

[Ra]⊞[rb]=[R⊞ra+b];[R1a]⊟[R2b]=[R1⊟R2a−b]\left[\begin{array}{c}\mathbf{R} \\\mathbf{a}\end{array}\right] \boxplus\left[\begin{array}{l}\mathbf{r} \\\mathbf{b}\end{array}\right]=\left[\begin{array}{c}\mathbf{R} \boxplus \mathbf{r} \\\mathbf{a}+\mathbf{b}\end{array}\right] ;\left[\begin{array}{c}\mathbf{R}_{1} \\\mathbf{a}\end{array}\right] \boxminus\left[\begin{array}{c}\mathbf{R}_{2} \\\mathbf{b}\end{array}\right]=\left[\begin{array}{c}\mathbf{R}_{1} \boxminus \mathbf{R}_{2} \\\mathbf{a}-\mathbf{b}\end{array}\right] [Ra​]⊞[rb​]=[R⊞ra+b​];[R1​a​]⊟[R2​b​]=[R1​⊟R2​a−b​]

由上面的定义,我们很容易证明:

(x⊞u)⊟x=u;x⊞(y⊟x)=y;∀x,y∈M,∀u∈Rn(\mathbf{x} \boxplus \mathbf{u}) \boxminus \mathbf{x}=\mathbf{u} ; \mathbf{x} \boxplus(\mathbf{y} \boxminus \mathbf{x})=\mathbf{y} ; \forall \mathbf{x}, \mathbf{y} \in \mathcal{M}, \forall \mathbf{u} \in \mathbb{R}^{n} (x⊞u)⊟x=u;x⊞(y⊟x)=y;∀x,y∈M,∀u∈Rn

2)连续模型:

假设IMU稳固的连接在了激光雷达上面,并且外参已知 ITL=(IRL,IpL){ }^{I} \mathbf{T}_{L}=\left({ }^{I} \mathbf{R}_{L},{ }^{I} \mathbf{p}_{L}\right)ITL​=(IRL​,IpL​)。将 IMU 坐标系(记为 III )作为本体参考坐标系,从而可以推出动力学模型:

Gp˙I=GvI,Gv˙I=GRI(am−ba−na)+Gg,Gg˙=0GR˙I=GRI⌊ωm−bω−nω⌋∧,b˙ω=nbω,b˙a=nba(1)\begin{aligned}{ }^{G} \dot{\mathbf{p}}_{I} &={ }^{G} \mathbf{v}_{I},{ }^{G} \dot{\mathbf{v}}_{I}={ }^{G} \mathbf{R}_{I}\left(\mathbf{a}_{m}-\mathbf{b}_{\mathbf{a}}-\mathbf{n}_{\mathbf{a}}\right)+{ }^{G} \mathbf{g},{ }^{G} \dot{\mathbf{g}}=\mathbf{0} \\{ }^{G} \dot{\mathbf{R}}_{I} &={ }^{G} \mathbf{R}_{I}\left\lfloor\boldsymbol{\omega}_{m}-\mathbf{b}_{\boldsymbol{\omega}}-\mathbf{n}_{\boldsymbol{\omega}}\right\rfloor_\wedge, \dot{\mathbf{b}}_{\boldsymbol{\omega}}=\mathbf{n}_{\mathbf{b} \boldsymbol{\omega}}, \dot{\mathbf{b}}_{\mathbf{a}}=\mathbf{n}_{\mathbf{b a}}\end{aligned}\tag{1} Gp˙​I​GR˙I​​=GvI​,Gv˙I​=GRI​(am​−ba​−na​)+Gg,Gg˙​=0=GRI​⌊ωm​−bω​−nω​⌋∧​,b˙ω​=nbω​,b˙a​=nba​​(1)

其中 GpI,GRI{ }^{G} \mathbf{p}_{I},{ }^{G} \mathbf{R}_{I}GpI​,GRI​ 分别表示 IMU 坐标系在世界坐标系下的位置和姿态(第一帧 IMU 坐标系表示世界坐标系,记为 GGG ),Gg{ }^{G} \mathbf{g}Gg 表示世界坐标系下未知的重力向量,am\mathbf{a}_{m}am​ 和 ωm\boldsymbol{\omega}_{m}ωm​ 分别表示 IMU 加速度计和陀螺仪的测量值,na\mathbf{n}_{\mathbf{a}}na​ 和 nω\mathbf{n}_{\mathbf{\omega}}nω​ 表示IMU测量的白噪声,ba\mathbf{b}_{\mathbf{a}}ba​ 和 bω\mathbf{b}_{\mathbf{\omega}}bω​ 分别表示 IMU 加速度计和陀螺仪的偏置,分别建模为高斯白噪声 nba\mathbf{n}_{\mathrm{b_a}}nba​​ 和 nbω\mathbf{n}_{\mathrm{b_\omega}}nbω​​ 的随机游走过程。叉乘运算符⌊a⌋∧\lfloor\mathbf{a}\rfloor_{\wedge}⌊a⌋∧​ 表示为向量 a∈R3‾\mathbf{a} \in \mathbb{R}^{\overline{3}}a∈R3 的反对称矩阵。

3)离散模型:

基于运算符 ⊞\boxplus⊞ ,我们可以使用零阶保持器(zero-order holder)将 IMU 采样周期 Δt\Delta tΔt 内的连续模型离散化。离散模型表示为:

xi+1=xi⊞(Δtf(xi,ui,wi))(2)\mathbf{x}_{i+1}=\mathbf{x}_{i} \boxplus\left(\Delta t \mathbf{f}\left(\mathbf{x}_{i}, \mathbf{u}_{i}, \mathbf{w}_{i}\right)\right)\tag{2} xi+1​=xi​⊞(Δtf(xi​,ui​,wi​))(2)

其中,iii 是 IMU 测量的索引,系统状态 x\mathbf{x}x 、输入 u\mathbf{u}u 和噪声项 w\mathbf{w}w 、函数 f\mathbf{f}f 定义如下:

M=SO(3)×R15,dim⁡(M)=18x≐[GRITGpITGvITbωTbaTGgT]T∈Mu≐[ωmTamT]T,w≐[nωTnaTnbωTnbaT]Tf(xi,ui,wi)=[ωmi−bωi−nωiGvIiGRIi(ami−bai−nai)+Gginbwinbai03×1](3)\begin{aligned}&\mathcal{M}=S O(3) \times \mathbb{R}^{15}, \operatorname{dim}(\mathcal{M})=18\\&\mathbf{x} \doteq\left[\begin{array}{cccccc}{ }^{G} \mathbf{R}_{I}^{T} & { }^{G} \mathbf{p}_{I}^{T} & { }^{G} \mathbf{v}_{I}^{T} & \mathbf{b}_{\boldsymbol{\omega}}^{T} & \mathbf{b}_{\mathbf{a}}^{T} & { }^{G} \mathbf{g}^{T}\end{array}\right]^{T} \in \mathcal{M}\\&\mathbf{u} \doteq\left[\begin{array}{ll}\boldsymbol{\omega}_{m}^{T} & \mathbf{a}_{m}^{T}\end{array}\right]^{T}, \mathbf{w} \doteq\left[\begin{array}{llll}\mathbf{n}_{\boldsymbol{\omega}}^{T} & \mathbf{n}_{\mathbf{a}}^{T} & \mathbf{n}_{\mathbf{b} \boldsymbol{\omega}}^{T} & \mathbf{n}_{\mathbf{b a}}^{T}\end{array}\right]^{T}\\&\mathbf{f}\left(\mathbf{x}_{i}, \mathbf{u}_{i}, \mathbf{w}_{i}\right)=\left[\begin{array}{c}\boldsymbol{\omega}_{m_{i}}-\mathbf{b}_{\boldsymbol{\omega}_{i}}-\mathbf{n}_{\boldsymbol{\omega}_{i}} \\{ }^{G} \mathbf{v}_{I_{i}} \\{ }^{G} \mathbf{R}_{I_{i}}\left(\mathbf{a}_{m_{i}}-\mathbf{b}_{\mathbf{a}_{i}}-\mathbf{n}_{\mathbf{a}_{i}}\right)+{ }^{G} \mathbf{g}_{i} \\\mathbf{n}_{\mathbf{b} \boldsymbol{w}_{i}} \\\mathbf{n}_{\mathbf{b a}_{i}} \\\mathbf{0}_{3 \times 1}\end{array}\right]\end{aligned}\tag{3} ​M=SO(3)×R15,dim(M)=18x≐[GRIT​​GpIT​​GvIT​​bωT​​baT​​GgT​]T∈Mu≐[ωmT​​amT​​]T,w≐[nωT​​naT​​nbωT​​nbaT​​]Tf(xi​,ui​,wi​)=⎣⎡​ωmi​​−bωi​​−nωi​​GvIi​​GRIi​​(ami​​−bai​​−nai​​)+Ggi​nbwi​​nbai​​03×1​​⎦⎤​​(3)

4)激光雷达点云预处理:

激光雷达点云测量包括其局部坐标系下的点云坐标。由于原始Lidar点的采样频率很高,所以不太可能对采样到的每个点都进行实时处理。在 FAST-LIO 中,设定了最小为20ms的数据采集间隔,即在一定时间内积累数据点,之后再一次性处理,这样使得状态估计(里程计输出)与地图更新最高可达 50Hz。这样一组累积的点被称为一次扫描,这些点的处理时间记为 tkt_ktk​(如图2(b))。

假设特征点的数量为 mmm ,每个特征点的采样时间记为 ρj\rho_{j}ρj​,ρj∈(tk−1,tk]\rho_{j} \in\left(t_{k-1}, t_{k}\right]ρj​∈(tk−1​,tk​] 。特征点记为 Ljpfj{ }^{L_{j}} \mathbf{p}_{f_{j}}Lj​pfj​​,其中 LjL_jLj​ 表示 ρj\rho_{j}ρj​ 时刻的Lidar局部坐标系。在一次Lidar扫描中,会有多个IMU测量,每个IMU测量的采样时间记为 τi∈[tk−1,tk]\tau_{i} \in\left[t_{k-1}, t_{k}\right]τi​∈[tk−1​,tk​] ,每个IMU测量对应公式(2)中的一个系统状态 xi\mathbf{x}_{i}xi​。

需要注意的是,最后一个Lidar特征点在一次Lidar扫描的最后时刻采样,即 ρm=tk\rho_{m}=t_{k}ρm​=tk​;但是IMU测量的时间不一定与一次Lidar扫描的开始或结束时间对齐。

C 状态估计

我们使用迭代扩展卡尔曼滤波IEKF进行状态方程(2)中的状态估计。此外我们在[23, 24]中表征了状态估计的切线空间中的估计协方差。

假设上一次激光雷达扫描在 tk−1t_{k-1}tk−1​ 时刻优化后的状态估计是 x‾k−1\overline{\mathbf{x}}_{k-1}xk−1​,协方差矩阵为 P‾k−1\overline{\mathbf{P}}_{k-1}Pk−1​。然后 P‾k−1\overline{\mathbf{P}}_{k-1}Pk−1​ 表示下面定义的随机误差状态向量的协方差:

x~k−1≐xk−1⊟x‾k−1=[δθTGp~ITGv~ITb~ωTb~aTGg~T]T\widetilde{\mathbf{x}}_{k-1} \doteq \mathbf{x}_{k-1} \boxminus \overline{\mathbf{x}}_{k-1}=\left[\begin{array}{llllll}\delta \boldsymbol{\theta}^{T} & { }^{G} \widetilde{\mathbf{p}}_{I}^{T} & G \widetilde{\mathbf{v}}_{I}^{T} & \widetilde{\mathbf{b}}_{\boldsymbol{\omega}}^{T} & \widetilde{\mathbf{b}}_{\mathbf{a}}^{T} & { }^{G} \widetilde{\mathbf{g}}^{T}\end{array}\right]^{T} xk−1​≐xk−1​⊟xk−1​=[δθT​Gp​IT​​GvIT​​bωT​​baT​​Gg​T​]T

其中 δθ=log⁡(GR‾ITGRI)\delta \boldsymbol{\theta}=\log \left({ }^{G} \overline{\mathbf{R}}_{I}^{T G} \mathbf{R}_{I}\right)δθ=log(GRITG​RI​) 是姿态误差,剩下的都是标准加法误差(比如,状态 x\mathbf{x}x 的估计值 x‾\overline{\mathbf{x} }x 的误差为 x~=x−x‾\widetilde{\mathbf{x}}=\mathbf{x}-\overline{\mathbf{x}}x=x−x)。直观上,姿态误差 δθ\delta \boldsymbol{\theta}δθ 描述了真实姿态和估计姿态之间的(微小)偏离。此处误差定义的主要优点是,它允许我们通过 3×33 \times 33×3 协方差矩阵 E{δθδθT}\mathbb{E}\{\delta \boldsymbol{\theta} \delta \boldsymbol{\theta}^{T}\}E{δθδθT} 来表示姿态的不确定性。由于姿态具有3个自由度,因此这是一个最小的表示。

1)前向传播:

一旦接收到IMU输入,就进行前向传播(如图2(b))。更具体的,状态传播按照公式(2)进行,并且将过程噪声 wi\mathbf{w}_{i}wi​ 设为0:

x^i+1=x^i⊞(Δtf(x^i,ui,0));x^0=x‾k−1(4)\widehat{\mathbf{x}}_{i+1}=\widehat{\mathbf{x}}_{i} \boxplus\left(\Delta t \mathbf{f}\left(\widehat{\mathbf{x}}_{i}, \mathbf{u}_{i}, \mathbf{0}\right)\right) ; \widehat{\mathbf{x}}_{0}=\overline{\mathbf{x}}_{k-1}\tag{4} xi+1​=xi​⊞(Δtf(xi​,ui​,0));x0​=xk−1​(4)

其中,Δt=τi+1−τi\Delta t=\tau_{i+1}-\tau_{i}Δt=τi+1​−τi​。为了传播协方差,我们使用以下误差状态的动力学模型:

x~i+1=xi+1⊟x^i+1=(xi⊞Δtf(xi,ui,wi))⊟(x^i⊞Δtf(x^i,ui,0))≃Fx~x~i+Fwwi.(5)\begin{aligned}\widetilde{\mathbf{x}}_{i+1} &=\mathbf{x}_{i+1} \boxminus \widehat{\mathbf{x}}_{i+1} \\&=\left(\mathbf{x}_{i} \boxplus \Delta t \mathbf{f}\left(\mathbf{x}_{i}, \mathbf{u}_{i}, \mathbf{w}_{i}\right)\right) \boxminus\left(\widehat{\mathbf{x}}_{i} \boxplus \Delta t \mathbf{f}\left(\widehat{\mathbf{x}}_{i}, \mathbf{u}_{i}, \mathbf{0}\right)\right) \\& \stackrel{}{\simeq} \mathbf{F}_{\widetilde{\mathbf{x}}} \widetilde{\mathbf{x}}_{i}+\mathbf{F}_{\mathbf{w}} \mathbf{w}_{i} .\end{aligned}\tag{5} xi+1​​=xi+1​⊟xi+1​=(xi​⊞Δtf(xi​,ui​,wi​))⊟(xi​⊞Δtf(xi​,ui​,0))≃Fx​xi​+Fw​wi​.​(5)

上式的推导参考附录A。推导结果在公式(7)中,其中,类似于 [25], ω^i=ωmi−bωi\widehat{\boldsymbol{\omega}}_{i}=\boldsymbol{\omega}_{m_{i}}-\mathbf{b}_{\boldsymbol{\omega}_{i}}ωi​=ωmi​​−bωi​​,a^i=ami−b^ai\widehat{\mathbf{a}}_{i}=\mathbf{a}_{m_{i}}-\widehat{\mathbf{b}}_{\mathbf{a}_{i}}ai​=ami​​−bai​​ 以及 A(u)−1\mathbf{A}(\mathbf{u})^{-1}A(u)−1 定义如下:

A(u)−1=I−12⌊u⌋∧+(1−α(∥u∥))u2∥u∥2α(m)=m2cot⁡(m2)=m2cos⁡(m/2)sin⁡(m/2)(6)\begin{aligned}\mathbf{A}(\mathbf{u})^{-1} &=\mathbf{I}-\frac{1}{2}\lfloor\mathbf{u}\rfloor_{\wedge}+(1-\boldsymbol{\alpha}(\|\mathbf{u}\|)) \frac{\mathbf{u}^{2}}{\|\mathbf{u}\|^{2}} \\\alpha(\mathrm{m}) &=\frac{\mathrm{m}}{2} \cot \left(\frac{\mathrm{m}}{2}\right)=\frac{\mathrm{m}}{2} \frac{\cos (\mathrm{m} / 2)}{\sin (\mathrm{m} / 2)}\end{aligned}\tag{6} A(u)−1α(m)​=I−21​⌊u⌋∧​+(1−α(∥u∥))∥u∥2u2​=2m​cot(2m​)=2m​sin(m/2)cos(m/2)​​(6)

Fx~=[Exp⁡(−ω^iΔt)00−A(ω^iΔt)TΔt000IIΔt000−GR^Ii⌊a^i⌋∧Δt0I0−GR^IiΔtIΔt000I000000I000000I],Fw=[−A(ω^iΔt)TΔt00000000−GR^IiΔt0000IΔt0000IΔt0000](7)\mathbf{F}_{\widetilde{\mathbf{x}}}=\left[\begin{array}{cccccc}\operatorname{Exp}\left(-\widehat{\boldsymbol{\omega}}_{i} \Delta t\right) & \mathbf{0} & \mathbf{0} & -\mathbf{A}\left(\widehat{\boldsymbol{\omega}}_{i} \Delta t\right)^{T} \Delta t & \mathbf{0} & \mathbf{0} \\\mathbf{0} & \mathbf{I} & \mathbf{I} \Delta t & \mathbf{0} & \mathbf{0} & \mathbf{0} \\-{ }^{G} \widehat{\mathbf{R}}_{I_{i}} \left\lfloor \widehat{\mathbf{a}}_{i}\right\rfloor_\wedge \Delta t & \mathbf{0} & \mathbf{I} & \mathbf{0} & -{ }^{G} \widehat{\mathbf{R}}_{I_{i}} \Delta t & \mathbf{I} \Delta t \\\mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{I} & \mathbf{0} & \mathbf{0} \\\mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{I} & \mathbf{0} \\\mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{I}\end{array}\right], \\\mathbf{F}_{\mathbf{w}}=\left[\begin{array}{ccccc}-\mathbf{A}\left(\widehat{\boldsymbol{\omega}}_{i} \Delta t\right)^{T} \Delta t & \mathbf{0} & \mathbf{0} & \mathbf{0} \\\mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{0} \\\mathbf{0} & -{ }^{G} \widehat{\mathbf{R}}_{I_{i}} \Delta t & \mathbf{0} & \mathbf{0} \\\mathbf{0} & \mathbf{0} & \mathbf{I} \Delta t & \mathbf{0} \\\mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{I} \Delta t \\\mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{0}\end{array}\right]\tag{7} Fx​=⎣⎡​Exp(−ωi​Δt)0−GRIi​​⌊ai​⌋∧​Δt000​0I0000​0IΔtI000​−A(ωi​Δt)TΔt00I00​00−GRIi​​Δt0I0​00IΔt00I​⎦⎤​,Fw​=⎣⎡​−A(ωi​Δt)TΔt00000​00−GRIi​​Δt000​000IΔt00​0000IΔt0​⎦⎤​(7)

记白噪声 w\mathbf{w}w 的协方差为 Q\mathbf{Q}Q ,然后传播的协方差 P^i\widehat{\mathbf{P}}_{i}Pi​ 可以通过下面式子进行迭代计算:

P^i+1=Fx~P^iFx~T+FwQFwT;P^0=P‾k−1(8)\widehat{\mathbf{P}}_{i+1}=\mathbf{F}_{\widetilde{\mathbf{x}}} \widehat{\mathbf{P}}_{i} \mathbf{F}_{\widetilde{\mathbf{x}}}^{T}+\mathbf{F}_{\mathbf{w}} \mathbf{Q} \mathbf{F}_{\mathbf{w}}^{T} ; \widehat{\mathbf{P}}_{0}=\overline{\mathbf{P}}_{k-1}\tag{8} Pi+1​=Fx​Pi​FxT​+Fw​QFwT​;P0​=Pk−1​(8)

前向传播一直持续到一个新扫描帧的结束时间 tkt_{k}tk​ ,此时所传播的状态和协方差分别表示为 x^k,P^k\widehat{\mathbf{x}}_{k}, \widehat{\mathbf{P}}_{k}xk​,Pk​。然后,P^k\widehat{\mathbf{P}}_{k}Pk​ 表示系统状态的真值 xk\mathbf{x}_kxk​ 和传播值 x^k\widehat{\mathbf{x}}_kxk​ 之间的误差 x~k\widetilde{\mathbf{x}}_kxk​ ( x~k=xk⊟x^k\widetilde{\mathbf{x}}_k = \mathbf{x}_{k} \boxminus \widehat{\mathbf{x}}_{k}xk​=xk​⊟xk​)的协方差。

2)反向传播和运动补偿:

当点的积累时间间隔到达 tkt_{k}tk​ ,应将新扫描的特征点与传播的状态 x^k\widehat{\mathbf{x}}_{k}xk​ 和协方差 P^k\widehat{\mathbf{P}}_{k}Pk​ 融合,以形成最优的状态更新。但是,尽管新扫描是在时间 tkt_{k}tk​ 时,但特征点在其各自的采样时间 ρj≤tk\rho_{j} \leq t_{k}ρj​≤tk​ 时被测量(请参阅第III-B.4和图2(b)),导致在本体参考坐标系中的不匹配。

为了补偿时间 ρj\rho_{j}ρj​ 和时间 tkt_{k}tk​ 之间的相对运动(即运动畸变),我们对公式(2)进行反向传播 xˇj−1=xˇj⊞(−Δtf(xˇj,uj,0))\check{\mathbf{x}}_{j-1}=\check{\mathbf{x}}_{j} \boxplus\left(-\Delta t \mathbf{f}\left(\check{\mathbf{x}}_{j}, \mathbf{u}_{j}, \mathbf{0}\right)\right)xˇj−1​=xˇj​⊞(−Δtf(xˇj​,uj​,0)),我们以 x^k\widehat{\mathbf{x}}_{k}xk​ 为零时刻的位姿和静止状态(比如速度和偏置)出发进行反向传播。反向传播以特征点的频率进行,通常比IMU频率高得多。对于在两个IMU测量之间采样的所有特征点,我们将左侧IMU测量用于反向传播中的输入。此外,注意到公式(3)中 f(xj,uj,0)\mathbf{f}\left(\mathbf{x}_{j}, \mathbf{u}_{j}, \mathbf{0}\right)f(xj​,uj​,0) 的最后三个块元素(分别对应于陀螺仪偏置,加速度计偏置和外参)为零,可以将反向传播简化为:

IkpˇIj−1=IkpˇIj−IkvˇIjΔt,s.f. IkpˇIm=0; IkvˇIj−1=IkvˇIj−IkRˇIj(ami−1−b^ak)Δt−Ikg^kΔt, s.f. IkvˇIm=GR^IkTGv^Ik,Ikg^k=GR^IkTGg^k; IkRˇIj−1=IkRˇIjExp⁡((b^ωk−ωmi−1)Δt), s.f. IkRIm=I. (9)\begin{aligned}&{ }^{I_{k}} \check{\mathbf{p}}_{I_{j-1}}={ }^{I_{k}} \check{\mathbf{p}}_{I_{j}}-{ }^{I_{k}} \check{\mathbf{v}}_{I_{j}} \Delta t, \quad \text { s.f. }{ }^{I_{k}} \check{\mathbf{p}}_{I_{m}}=\mathbf{0} \text {; }\\&{ }^{I_{k}} \check{\mathbf{v}}_{I_{j-1}}={ }^{I_{k}} \check{\mathbf{v}}_{I_{j}}-{ }^{I_{k}} \check{\mathbf{R}}_{I_{j}}\left(\mathbf{a}_{m_{i-1}}-\widehat{\mathbf{b}}_{\mathbf{a}_{k}}\right) \Delta t-{ }^{I_{k}} \widehat{\mathbf{g}}_{k} \Delta t \text {, }\\&\text { s.f. }{ }^{I_{k}} \check{\mathbf{v}}_{I_{m}}={ }^{G} \widehat{\mathbf{R}}_{I_{k}}^{T}{ }^{G} \widehat{\mathbf{v}}_{I_{k}},{ }^{I_{k}} \widehat{\mathbf{g}}_{k}={ }^{G} \widehat{\mathbf{R}}_{I_{k}}^{T} {}^G \widehat{\mathbf{g}}_{k} \text {; }\\&{ }^{I_{k}} \check{\mathbf{R}}_{I_{j-1}}={ }^{I_{k}} \check{\mathbf{R}}_{I_{j}} \operatorname{Exp}\left(\left(\widehat{\mathbf{b}}_{\boldsymbol{\omega}_{k}}-\boldsymbol{\omega}_{m_{i-1}}\right) \Delta t\right) \text {, s.f. }{ }^{I_{k}} \mathbf{R}_{I_{m}}=\mathbf{I} \text {. }\end{aligned}\tag{9} ​Ik​pˇ​Ij−1​​=Ik​pˇ​Ij​​−Ik​vˇIj​​Δt, s.f. Ik​pˇ​Im​​=0; Ik​vˇIj−1​​=Ik​vˇIj​​−Ik​RˇIj​​(ami−1​​−bak​​)Δt−Ik​g​k​Δt,  s.f. Ik​vˇIm​​=GRIk​T​GvIk​​,Ik​g​k​=GRIk​T​Gg​k​; Ik​RˇIj−1​​=Ik​RˇIj​​Exp((bωk​​−ωmi−1​​)Δt), s.f. Ik​RIm​​=I. ​(9)

其中,ρj−1∈[τi−1,τi),Δt=ρj−ρj−1\rho_{j-1} \in\left[\tau_{i-1}, \tau_{i}\right), \Delta t=\rho_{j}-\rho_{j-1}ρj−1​∈[τi−1​,τi​),Δt=ρj​−ρj−1​,s.fs . fs.f 表示从 … 开始。

反向传播将在时间 ρj\rho_{j}ρj​ 和一次扫描的结束时间 tkt_{k}tk​ 之间产生相对位姿 IkTˇIj=(IkRˇIj,IkpˇIj){}^{I_{k}} \check{\mathbf{T}}_{I_{j}}=\left({ }^{I_{k}} \check{\mathbf{R}}_{I_{j}},{ }^{I_{k}} \check{\mathbf{p}}_{I_{j}}\right)Ik​TˇIj​​=(Ik​RˇIj​​,Ik​pˇ​Ij​​)。该相对位姿使我们能够将局部测量 Ljpfj{ }^{L_{j}} \mathbf{p}_{f_{j}}Lj​pfj​​ 投影到扫描结束时刻的测量 Lkpfj{ }^{L_{k}} \mathbf{p}_{f_{j}}Lk​pfj​​ 上(见图2),即:

Lkpfj=ITL−1IkTˇIjITLLjpfj(10){ }^{L_{k}} \mathbf{p}_{f_{j}}={ }^{I} \mathbf{T}_{L}^{-1 I_{k}} \check{\mathbf{T}}_{I_{j}}{ }^{I} \mathbf{T}_{L} {}^{L_{j}} \mathbf{p}_{f_{j}}\tag{10} Lk​pfj​​=ITL−1Ik​​TˇIj​​ITL​Lj​pfj​​(10)

其中,ITL{ }^{I} \mathbf{T}_{L}ITL​ 是激光雷达和IMU之间的已知的外参。然后,投影点 Lkpfj{ }^{L_{k}} \mathbf{p}_{f_{j}}Lk​pfj​​ 用于在下面的部分中构建残差。

3)残差计算:

通过公式(10)中的运动补偿,我们可以在同一时刻 tkt_ktk​ 查看一次扫描中的所有特征点 {Lkpfj}\left\{{ }^{L_{k}} \mathbf{p}_{f_{j}}\right\}{Lk​pfj​​} ,并使用它来构造残差。假设迭代卡尔曼滤波器的当前迭代为 κ{\kappa}κ,相应的状态估计为 x^kκ\widehat{\mathbf{x}}_{k}^{\kappa}xkκ​。当 κ=0{\kappa} = 0κ=0 ,x^kκ=x^k\widehat{\mathbf{x}}_{k}^{\kappa} = \widehat{\mathbf{x}}_{k}xkκ​=xk​ 时,此时状态为公式(4)中传播完成的预测状态。然后,特征点 {Lkpfj}\left\{{ }^{L_{k}} \mathbf{p}_{f_{j}}\right\}{Lk​pfj​​} 可以变换到世界坐标系下,如下所示:

Gp^fjκ=GT^IkκITLLkpfj;j=1,⋯,m(11){}^G \widehat{\mathbf{p}}_{f_{j}}^{\kappa}={}^G \widehat{\mathbf{T}}_{I_{k}}^{\kappa} {}^I \mathbf{T}_{L}{}^{L_{k}} \mathbf{p}_{f_{j}} ; j=1, \cdots, m \tag{11} Gp​fj​κ​=GTIk​κ​ITL​Lk​pfj​​;j=1,⋯,m(11)

对于每一个激光雷达特征点,找到地图中该点附近的特征点所定义的最近的平面或边缘,并假设所找到的平面或者是边缘为该点真正所属的位置。也就是说,残差定义为特征点在世界坐标系中被估计的坐标 Gp^fjκ{}^G \widehat{\mathbf{p}}_{f_{j}}^{\kappa}Gp​fj​κ​ 与地图中最近的平面(或边缘)之间的距离。记 uj\mathbf{u}_juj​ 为相应平面(或边缘)的法向量(或边缘朝向),其中 Gqj{ }^{G} \mathbf{q}_{j}Gqj​ 为相应平面(或边缘)伤的一个点,则残差 zjκ\mathbf{z}_{j}^{\kappa}zjκ​ 可以通过以下公式计算:

zjκ=Gj(Gp^fjκ−Gqj)(12)\mathbf{z}_{j}^{\kappa}=\mathbf{G}_{j}\left({ }^{G} \widehat{\mathbf{p}}_{f_{j}}^{\kappa}-{ }^{G} \mathbf{q}_{j}\right) \tag{12} zjκ​=Gj​(Gp​fj​κ​−Gqj​)(12)

其中,如果 Gj=ujT\mathbf{G}_{j}=\mathbf{u}_{j}^{T}Gj​=ujT​ 则表示平面特征,Gj=⌊uj⌋∧\mathbf{G}_{j}=\left\lfloor\mathbf{u}_{j}\right\rfloor_\wedgeGj​=⌊uj​⌋∧​ 则表示边缘特征。uj\mathbf{u}_juj​ 的计算和地图中附近点的查找(这些点用于定义相应的平面或边缘)是通过在当前最新的地图中构建点的Kd-Tree来实现的[10]。此外,我们仅考虑范数低于一定阈值(例如0.5m)的残差。超过此阈值的残差对应的点被认为是离群点或者是新观察到的点。

4)迭代状态更新:

为了将由公式(12)中计算出来的残差 zjκ\mathbf{z}_{j}^{\kappa}zjκ​ 与从IMU数据中传播得到的状态预测 x^k\widehat{\mathbf{x}}_kxk​ 和协方差 P^k\widehat{\mathbf{P}}_{k}Pk​ 进行融合,我们需要对将残差 zjκ\mathbf{z}_{j}^{\kappa}zjκ​ 与状态的真值 xk\mathbf{x}_kxk​ 联系来的测量模型进行线性化,以及对测量噪声进行线性化。测量噪声来源于激光雷达测量点 Ljpfj{ }^{L_{j}} \mathbf{p}_{f_{j}}Lj​pfj​​ 时的探测和光束方向噪声 Ljnfj{}^{L_{j}} \mathbf{n}_{f_{j}}Lj​nfj​​。由点的测量值 Ljpfj{ }^{L_{j}} \mathbf{p}_{f_{j}}Lj​pfj​​ 减去噪声可以得到点的位置的真值:

Ljpfjgt=Ljpfj−Ljnfj(13){}^{L_{j}}\mathbf{p}_{f_{j}}^{\mathrm{gt}}={ }^{L_{j}} \mathbf{p}_{f_{j}}-{ }^{L_{j}} \mathbf{n}_{f_{j}}\tag{13} Lj​pfj​gt​=Lj​pfj​​−Lj​nfj​​(13)

真值点通过公式(10)投影到坐标系 LkL_kLk​ 之后,就可以通过状态真值 xk\mathbf{x}_kxk​(比如位姿)投影到世界坐标系下。投影之后的真值点应完全位于地图中的平面(或边缘)上。也就是说,将公式(13)代入到公式(10)中,然后再代入公式(11)中,然后再进一步进入(12)中,应该为零。也就是:

0=hj(xk,Ljnfj)=Gj(GTIkIkTˇIjITL(Ljpfj−Ljnfj)−Gqj)\mathbf{0}=\mathbf{h}_{j}\left(\mathbf{x}_{k},{ }^{L_{j}} \mathbf{n}_{f_{j}}\right)=\mathbf{G}_{j}\left({ }^{G} \mathbf{T}_{I_{k}}{ }^{I_{k}} \check{\mathbf{T}}_{I_{j}}{ }^{I} \mathbf{T}_{L}\left({ }^{L_{j}} \mathbf{p}_{f_{j}}-{ }^{L_{j}} \mathbf{n}_{f_{j}}\right)-{ }^{G} \mathbf{q}_{j}\right) 0=hj​(xk​,Lj​nfj​​)=Gj​(GTIk​​Ik​TˇIj​​ITL​(Lj​pfj​​−Lj​nfj​​)−Gqj​)

通过在 x^kκ\widehat{\mathbf{x}}_{k}^{\kappa}xkκ​ 处上述方程式进行一阶近似有:

0=hj(xk,Ljnfj)≃hj(x^kκ,0)+Hjκx~kκ+vj=zjκ+Hjκx~kκ+vj(14)\begin{aligned}\mathbf{0} &=\mathbf{h}_{j}\left(\mathbf{x}_{k},{ }^{L_{j}} \mathbf{n}_{f_{j}}\right) \simeq \mathbf{h}_{j}\left(\widehat{\mathbf{x}}_{k}^{\kappa}, \mathbf{0}\right)+\mathbf{H}_{j}^{\kappa} \widetilde{\mathbf{x}}_{k}^{\kappa}+\mathbf{v}_{j} \\&=\mathbf{z}_{j}^{\kappa}+\mathbf{H}_{j}^{\kappa} \widetilde{\mathbf{x}}_{k}^{\kappa}+\mathbf{v}_{j}\end{aligned}\tag{14} 0​=hj​(xk​,Lj​nfj​​)≃hj​(xkκ​,0)+Hjκ​xkκ​+vj​=zjκ​+Hjκ​xkκ​+vj​​(14)

其中 x~kκ=xk⊟x^kκ\widetilde{\mathbf{x}}_{k}^{\kappa}=\mathbf{x}_{k} \boxminus \widehat{\mathbf{x}}_{k}^{\kappa}xkκ​=xk​⊟xkκ​ (或者 xk=x^kκ⊞x~kκ\mathbf{x}_{k}=\widehat{\mathbf{x}}_{k}^{\kappa} \boxplus \widetilde{\mathbf{x}}_{k}^{\kappa}xk​=xkκ​⊞xkκ​),Hjκ\mathbf{H}_{j}^{\kappa}Hjκ​ 是 hj(x^kκ⊞x~kκ,Ljnfj)\mathbf{h}_{j}\left(\widehat{\mathbf{x}}_{k}^{\kappa} \boxplus \widetilde{\mathbf{x}}_{k}^{\kappa},{ }^{L_{j}} \mathbf{n}_{f_{j}}\right)hj​(xkκ​⊞xkκ​,Lj​nfj​​) 关于 x~kκ\widetilde{\mathbf{x}}_{k}^{\kappa}xkκ​ 在值为0时的雅可比矩阵,vj∈N(0,Rj)\mathbf{v}_{j} \in \mathcal{N}\left(\mathbf{0}, \mathbf{R}_{j}\right)vj​∈N(0,Rj​) 来自于原始测量噪声 Ljnfj{}^{L_{j}} \mathbf{n}_{f_{j}}Lj​nfj​​ 。

注意到在第 III-C.1节中通过前向传播获得的 xk\mathbf{x}_{k}xk​ 的先验分布用于下式:

xk⊟x^k=(x^kκ⊞x~kκ)⊟x^k=x^kκ⊟x^k+Jκx~kκ(15)\mathbf{x}_{k} \boxminus \widehat{\mathbf{x}}_{k}=\left(\widehat{\mathbf{x}}_{k}^{\kappa} \boxplus \widetilde{\mathbf{x}}_{k}^{\kappa}\right) \boxminus \widehat{\mathbf{x}}_{k}=\widehat{\mathbf{x}}_{k}^{\kappa} \boxminus \widehat{\mathbf{x}}_{k}+\mathbf{J}^{\kappa} \widetilde{\mathbf{x}}_{k}^{\kappa}\tag{15} xk​⊟xk​=(xkκ​⊞xkκ​)⊟xk​=xkκ​⊟xk​+Jκxkκ​(15)

其中 Jκ\mathbf{J}^{\kappa}Jκ 是 (x^kκ⊞x~kκ)⊟x^k\left(\widehat{\mathbf{x}}_{k}^{\kappa} \boxplus \widetilde{\mathbf{x}}_{k}^{\kappa}\right) \boxminus \widehat{\mathbf{x}}_{k}(xkκ​⊞xkκ​)⊟xk​ 关于 x~kκ\widetilde{\mathbf{x}}_{k}^{\kappa}xkκ​ 在值为0的偏导数:

Jκ=[A(GR^Ikκ⊟GR^Ik)−T03×15015×3I15×15](16)\mathbf{J}^{\kappa}=\left[\begin{array}{cc}\mathbf{A}\left({ }^{G} \widehat{\mathbf{R}}_{I_{k}}^{\kappa} \boxminus^{G} \widehat{\mathbf{R}}_{I_{k}}\right)^{-T} & \mathbf{0}_{3 \times 15} \\\mathbf{0}_{15 \times 3} & \mathbf{I}_{15 \times 15}\end{array}\right]\tag{16} Jκ=[A(GRIk​κ​⊟GRIk​​)−T015×3​​03×15​I15×15​​](16)

其中 A(⋅)−1\mathbf{A}(\cdot)^{-1}A(⋅)−1 在公式(6)中定义。对于第一次迭代(即扩展卡尔曼滤波器的情况),x^kκ=x^k\widehat{\mathbf{x}}_{k}^{\kappa}=\widehat{\mathbf{x}}_{k}xkκ​=xk​,并且 Jκ=I\mathbf{J}^{\kappa}= \mathbf{I}Jκ=I 。

将公式(15)中的先验与公式(14)中的后验分布相结合,可以得到最大后验估计(MAP):

min⁡x~kκ(∥xk⊟x^k∥P^k−12+∑j=1m∥zjκ+Hjκx~kκ∥Rj−12)(17)\min _{\widetilde{\mathbf{x}}_{k}^{\kappa}}\left(\left\|\mathbf{x}_{k} \boxminus \widehat{\mathbf{x}}_{k}\right\|_{\widehat{\mathbf{P}}_{k}^{-1}}^{2}+\sum_{j=1}^{m}\left\|\mathbf{z}_{j}^{\kappa}+\mathbf{H}_{j}^{\kappa} \widetilde{\mathbf{x}}_{k}^{\kappa}\right\|_{\mathbf{R}_{j}^{-1}}^{2}\right)\tag{17} xkκ​min​(∥xk​⊟xk​∥Pk−1​2​+j=1∑m​∥∥​zjκ​+Hjκ​xkκ​∥∥​Rj−1​2​)(17)

其中,∥x∥M2=xTMx\|\mathbf{x}\|_{\mathbf{M}}^{2}=\mathbf{x}^{T} \mathbf{M} \mathbf{x}∥x∥M2​=xTMx。

将公式(15)中先验的线性化代入到公式(17)并优化得到的二次代价,可以得到标准的迭代卡尔曼滤波[21],可以通过下式计算(为了简化表示,令 H=[H1κT,⋯,HmκT]T\mathbf{H}=\left[\mathbf{H}_{1}^{\kappa^{T}}, \cdots, \mathbf{H}_{m}^{\kappa^{T}}\right]^{T}H=[H1κT​,⋯,HmκT​]T,R=diag⁡(R1,⋯Rm)\mathbf{R}=\operatorname{diag}\left(\mathbf{R}_{1}, \cdots \mathbf{R}_{m}\right)R=diag(R1​,⋯Rm​),P=(Jκ)−1P^k(Jκ)−T\mathbf{P}=\left(\mathbf{J}^{\kappa}\right)^{-1} \widehat{\mathbf{P}}_{k}\left(\mathbf{J}^{\kappa}\right)^{-T}P=(Jκ)−1Pk​(Jκ)−T,zkκ=[z1κT,⋯,zmκT]T\mathbf{z}_{k}^{\kappa}=\left[\mathbf{z}_{1}^{\kappa^{T}}, \cdots, \mathbf{z}_{m}^{\kappa^{T}}\right]^{T}zkκ​=[z1κT​,⋯,zmκT​]T):

K=PHT(HPHT+R)−1x^kκ+1=x^kκ⊞(−Kzkκ−(I−KH)(Jκ)−1(x^kκ⊟x^k))(18)\begin{aligned}\mathbf{K} &=\mathbf{P} \mathbf{H}^{T}\left(\mathbf{H P} \mathbf{H}^{T}+\mathbf{R}\right)^{-1} \\\widehat{\mathbf{x}}_{k}^{\kappa+1}&=\widehat{\mathbf{x}}_{k}^{\kappa} \boxplus\left(-\mathbf{K} \mathbf{z}_{k}^{\kappa}-(\mathbf{I}-\mathbf{K H})\left(\mathbf{J}^{\kappa}\right)^{-1}\left(\widehat{\mathbf{x}}_{k}^{\kappa} \boxminus \widehat{\mathbf{x}}_{k}\right)\right)\end{aligned}\tag{18} Kxkκ+1​​=PHT(HPHT+R)−1=xkκ​⊞(−Kzkκ​−(I−KH)(Jκ)−1(xkκ​⊟xk​))​(18)

然后使用更新后的估计值 x^kκ+1\widehat{\mathbf{x}}_{k}^{\kappa+1}xkκ+1​ 计算 III-C.3 中的残差,重复该过程直至收敛(∥x^kκ+1⊟x^kκ∥<ϵ\left\|\widehat{\mathbf{x}}_{k}^{\kappa+1} \boxminus \widehat{\mathbf{x}}_{k}^{\kappa}\right\|<\epsilon∥∥​xkκ+1​⊟xkκ​∥∥​<ϵ)。收敛后,最优状态估计和协方差为:

x‾k=x^kκ+1,P‾k=(I−KH)P(19)\overline{\mathbf{x}}_{k}=\widehat{\mathbf{x}}_{k}^{\kappa+1}, \overline{\mathbf{P}}_{k}=(\mathbf{I}-\mathbf{K} \mathbf{H}) \mathbf{P}\tag{19} xk​=xkκ+1​,Pk​=(I−KH)P(19)

公式(18)中常用的卡尔曼增益形式的一个问题是,它需要对矩阵 HPHT+R\mathbf{H P} \mathbf{H}^{T}+\mathbf{R}HPHT+R 求逆,但是该矩阵的维度是测量数的维度。在实际应用中,激光雷达特征点的数量非常庞大,对维度如此大的矩阵求逆很难实现。因此,现有的工作[21,26]只使用少量的测量。在本文中,我们表明,这种限制是可以避免的。直觉来源于公式(17) ,其中代价函数建立在状态之上,因此解决方案应该根据状态维数的复杂度进行计算。事实上,如果直接对公示(17)进行求解,我们可以得到公式(18)中的相同解,但是可以使用一种新的形式的卡尔曼增益:

K=(HTR−1H+P−1)−1HTR−1(20)\mathbf{K}=\left(\mathbf{H}^{T} \mathbf{R}^{-1} \mathbf{H}+\mathbf{P}^{-1}\right)^{-1} \mathbf{H}^{T} \mathbf{R}^{-1} \tag{20} K=(HTR−1H+P−1)−1HTR−1(20)

我们在附录B中证明,基于矩阵逆引理(matrix inverse lemma)[27]的两种形式的卡尔曼增益等效。由于激光雷达测量值是独立的,因此协方差矩阵为(块)对角,因此新公式仅需要在状态维度而不是测量维度的情况下对两个矩阵求逆。新公式大大节约了计算量,因为状态维度通常比LIO中的测量数要低得多(例如,在10 Hz的扫描频率中,一次扫描包含超过1000个有效特征点,而状态维度仅为18)。

5)算法:

我们的状态估计总结在算法1中:

D 地图更新

使用状态更新 x‾k\overline{\mathbf{x}}_{k}xk​ 将每一个特征点 (Lkpfj)\left({}^{L_{k}} \mathbf{p}_{f_{j}}\right)(Lk​pfj​​) 先投影到体坐标系中(如公式(10)),然后再投影到世界坐标系中:

Gp‾fj=GT‾IkITLLkpfj;j=1,⋯,m(21){ }^{G} \overline{\mathbf{p}}_{f_{j}}={ }^{G} \overline{\mathbf{T}}_{I_{k}}{ }^{I} \mathbf{T}_{L}{ }^{L_{k}} \mathbf{p}_{f_{j}} ; j=1, \cdots, m \tag{21} Gp​fj​​=GTIk​​ITL​Lk​pfj​​;j=1,⋯,m(21)

最后,这些特征点被添加到包含前面所有步骤的特征点的现有地图中。

E 初始化

为了获得对系统状态的良好初始估计(例如,重力向量 Gg{}^G\mathbf{g}Gg,偏置和噪声协方差)以加快状态估计器,需要进行初始化。在 FAST-LIO中,初始化很简单:将激光雷达静止保持几秒钟(本文中所有实验为2秒),然后将收集的数据用于初始化IMU偏置和重力向量。如果激光雷达(例如Livox Avia)支持非重复扫描,保持静态扫描还可以获得一张高分辨率的初始地图,有利于后续的导航。

FAST-LIO:A Fast Robust LiDAR-inertial Odometry Package by Tightly-Coupled Iterated Kalman Filter论文翻译相关推荐

  1. LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping

    文章目录 1. 主要工作 2. 研究背景 3. 方法 3.1 IMU预积分因子 3.2 激光雷达里程计因子 3.3 GPS因子 3.4 闭环因子 4. 实验结果 4.1 精度对比 4.2 运行时间对比 ...

  2. Tightly Coupled LiDAR Inertial Odometry and Mapping源码解析(一)

    Tightly Coupled LiDAR Inertial Odometry and Mapping源码解析(一) 1. LiDAR inertial odometry and mapping简介 ...

  3. 【论文阅读】LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping

    LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping 摘要 I. 介绍 II. 相关工作 III. 基于 ...

  4. Tightly Coupled LiDAR Inertial Odometry and Mapping源码解析(四)

    Tightly Coupled LiDAR Inertial Odometry and Mapping源码解析(四) 3. Joint optimization 3.3 IMU preintegrat ...

  5. Tightly Coupled LiDAR Inertial Odometry and Mapping源码解析(二)

    Tightly Coupled LiDAR Inertial Odometry and Mapping源码解析(二) 3. Joint optimization 3.1 Marginalization ...

  6. #论文阅读 LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping

    论文阅读 LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping 摘要 Abstract-We propo ...

  7. LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping论文解读

    文章目录 abstract 一.Introduction 1.1 LOAM的缺点: 1.2 LIO-SAM的改进: 二.Related Work 三.LIDAR INERTIAL ODOMETRY V ...

  8. Tightly Coupled LiDAR Inertial Odometry and Mapping源码解析(三)

    Tightly Coupled LiDAR Inertial Odometry and Mapping源码解析(三) 3. Joint optimization 3.2 IMU preintegrat ...

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

      固态激光和IMU紧耦合的里程计,主要创新点加速了卡尔曼增益的求解方法.固态激光由于视野较小,更容易收到环境退化的影响. 系统描述   状态描述和常规的LIO类似.对于固态激光雷达,本文截取一段时间 ...

最新文章

  1. 转】R利剑NoSQL系列文章 之 Hive
  2. data too long for column的解决方法
  3. 第三天【DOM4J Xpath】
  4. python之路day5_学习python之路--Day5 计算器
  5. ORA-06413 连接未打开的处理办法【独家办法】
  6. AD16导出Gerber文件教程
  7. SQL案例学习-员工考勤记录
  8. win10升级助手_Win10系统易升如何彻底关闭?「系统天地」
  9. 关于虚拟机IP更改问题教给大家一个必杀技
  10. 目标跟踪算法研究整理
  11. 命令行解析模块 以及 metavar 和dest的理解
  12. 树莓派智能语音机器人
  13. python-文件读写-OS-窗口控制
  14. 【Python数据挖掘课程】八.关联规则挖掘及Apriori实现购物推荐
  15. python 抖音文案提取_一篇文章教会你用Python抓取抖音app热点数据!
  16. oracle 里sum(0),sum(1) ,sum(2) ,sum(num) over,count(*) over() ,coun(*),count(1)
  17. pip设置代理 豆瓣源
  18. vue使用render函数自定义标签动态导入js文件
  19. wifi模块esp8266的使用
  20. 已开源!Flutter 基于分帧渲染的流畅度优化组件 Keframe

热门文章

  1. 2023年MBA/MPA/MEM联考笔试答题抓分点
  2. 带你十分钟快速入门画图绘图作图神器 Matplotlib_各种画图小结
  3. 嘲讽java的词语_形容用嘲讽的语气说话成语_四字词语 - 成梦词典
  4. 【原创】史蒂芬.柯维《高效能人士的7个习惯》札记(一)
  5. 企业常用的企业微信管理系统—快鲸scrm
  6. 网络综合布线七大子系统详解(图解)
  7. 红队视角下的防御体系突破之第二篇案例分析
  8. 世界上最神奇的24堂课
  9. 从零学Java(28)之数组的定义与使用
  10. 【转】机器学习@美团 ——吃喝玩乐中的算法问题