【论文阅读】FAST-LIO

零、摘要

本文提出了一种计算效率高、鲁棒的激光雷达-惯性里程计框架。我们利用紧密耦合的迭代扩展卡尔曼滤波器将激光雷达特征点与IMU数据融合,从而在快速运动、噪声或杂波环境中实现鲁棒导航。为了降低在大量测量条件下的计算量,我们提出了一个新的计算卡尔曼增益的公式。新公式的计算量不再依赖于测量维数,而是依赖于状态维数。提出的方法及其实现在各种室内和室外环境中进行了测试。在所有的测试中,我们的方法产生了可靠的实时导航结果:在一台四旋翼机载计算机上运行,它在一次扫描中融合了超过1200个有效特征点,并在25毫秒内完成了iEKF步骤的所有迭代。我们的代码在Github上是开源的。

一、介绍

  1. 相机相比于激光雷达的一些缺陷,如:缺乏深度测量,对光照敏感。
  2. 固态激光雷达的优点:成本低,重量轻,性能高,适用于无人机。
  3. 激光雷达+IMU的一些问题:在嘈杂环境中容易退化,计算量大(点多),存在运动畸变,无人机螺旋桨和马达的持续旋转也会给IMU的测量带来显著的噪声。
  4. FAST-LIO介绍:
    a. 防止退化采用紧耦合迭代卡尔曼滤波器来融合激光雷达特征点和IMU测量值,提出了 一种形式的反向传播过程来补偿运动失真;
    b. 提出了一种新的卡尔曼增益计算公式,降低计算量。

二、相关工作

  1. LOAM及其变体:适用于结构化环境和大视场的激光雷达,但非常容易受到无特征环境或小视场激光雷达的影响。
  2. 松耦合LIO:扫描配准与数据融合的分离降低了计算量。然而,它忽略了系统的其他状态(例如速度)和新扫描的姿态之间的关系。此外,在无特征环境下,扫描配准会在一定方向上退化,导致后期融合不可靠。
  3. 紧耦合LIO:与松耦合方法不同,紧耦合的LIO通常将激光雷达的原始特征点(而不是扫描配准结果)与IMU数据融合。紧耦合LIO有两种主要方法:基于优化和基于滤波器。
  4. 论文的方法属于紧耦合方法。采用迭代扩展卡尔曼滤波器来减小线性化误差。卡尔曼滤波器(及其变体)的时间复杂度为 O ( m 2 ) O(m^2) O(m2),其中m为测量维数,这可能导致在处理大量的LiDAR测量时计算量非常高。下采样会减少测量的数量,但以信息损失为代价。可以通过提取和拟合类似的地平面,减少测量的数量。然而,这并不适用于地面可能不总是出现的空中应用。

三、方法

A.框架概述

1. 一些重要的符号

在这里插入图片描述

2. 流程框架

在这里插入图片描述

B.系统描述

1. 符号定义

在这里插入图片描述
在这里插入图片描述

2. 连续模型

a. LiDAR和IMU的外参

I T L = ( I R L , I p L ) {}^{I}\mathbf{T}_{L}=\left({}^{I}\mathbf{R}_{L},{}^{I}\mathbf{p}_{L}\right) ITL=(IRL,IpL)

b. IMU运动学模型

G p ˙ I = G v I G v ˙ I = G R I ( a m − b a − n a ) + G g G g ˙ = 0 G R ˙ I = G R I [ ω m − b ω − n ω ] ∧ b ˙ ω = n b ω b ˙ a = n b a \begin{align*}^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} &= \mathbf0 \\ {}^{G}\dot{\mathbf{R}}_{I} & = {}^{G}\mathbf{R}_{I}\bigl[\boldsymbol{\omega}_{m}-\mathbf{b}_{\boldsymbol{\omega}}-\mathbf{n}_{\boldsymbol{\omega}}\bigr]_{\wedge}\\ \dot{\mathbf{b}}_{\boldsymbol{\omega}}&=\mathbf{n}_{\mathbf{b}\boldsymbol{\omega}}\\ \dot{\mathbf{b}}_{\mathbf{a}}&=\mathbf{n}_{\mathbf{b}\mathbf{a}}\end{align*} Gp˙IGv˙IGg˙GR˙Ib˙ωb˙a=GvI=GRI(ambana)+Gg=0=GRI[ωmbωnω]=nbω=nba

c. 离散模型

在这里插入图片描述
M = S O ( 3 ) × R 15 , dim ⁡ ( M ) = 18 \mathcal{M}=SO(3)\times\mathbb{R}^{15},\dim(\mathcal{M})=18 \\ M=SO(3)×R15,dim(M)=18 x ≐ [ G R I T G p I T G v I T b ω T b a T G g T ] T ∈ M u ≐ [ ω m T a m T ] T w ≐ [ n ω T n a T n b ω T n b a T ] T \begin{align*} \mathbf{x} &\doteq\begin{bmatrix}G\mathbf{R}_I^T&G\mathbf{p}_I^T&^G\mathbf{v}_I^T&\mathbf{b}_\omega^T&\mathbf{b}_\mathbf{a}^T&^G\mathbf{g}^T\end{bmatrix}^T\in\mathcal{M} \\ \mathbf{u}&\doteq\begin{bmatrix}\boldsymbol{\omega}_m^T&\mathbf{a}_m^T\end{bmatrix}^T\\\mathbf{w}&\doteq\begin{bmatrix}\mathbf{n}_{\boldsymbol{\omega}}^{T}&\mathbf{n}_{\mathbf{a}}^{T}&\mathbf{n}_{\mathbf{b}\boldsymbol{\omega}}^{T}&\mathbf{n}_{\mathbf{ba}}^{T}\end{bmatrix}^{T}\end{align*} xuw[GRITGpITGvITbωTbaTGgT]TM[ωmTamT]T[nωTnaTnbωTnbaT]T在这里插入图片描述

d.激光雷达测量数据预处理

激光雷达测量的是点在其自身坐标系下的坐标,由于原始的雷达点在非常高的速率下采集的,所以新点一接收到就处理是不可能的。更实际的方法是在一定时间内积累这些点,并一次性处理它们。也就是每获得一帧点云再进行处理。处理方式是提取平面点和角点这样的特征点。假设有m个特征点,每个特征点的采样时间为 ρ j ∈ ( t k − 1 , t k ] ρ_j ∈ (t_{k−1}, t_k] ρj(tk1,tk]并表示为 L j p f i {}^{L_j}p_{f_i} Ljpfi,其中 L j L_j Lj ρ j ρ_j ρj时刻的激光雷达坐标。同时在一帧激光雷达中有多个IMU测量,每个在 τ i ∈ [ t k − 1 , t k ] τ_i ∈ [t_{k−1},t_{k}] τi[tk1tk]处采样,每个都有
离散模型中相应的状态 x i x_i xi。注意,最后一个LiDAR特征点是扫描的结束,即, ρ m = t k ρ_m = t_k ρm=tk,而IMU测量可能不一定与扫描的开始或结束对齐。

3. 状态估计

论文使用IEKF实现状态估计,并且在状态估计的切空间中表征估计协方差。假设在 t k − 1 t_{k-1} tk1时最后一次雷达扫描的最佳状态估计为 x ‾ k − 1 \overline{x}_{k-1} xk1,协方差矩阵为 P ‾ k − 1 \overline{P}_{k-1} Pk1,其中 P ‾ k − 1 \overline{P}_{k-1} Pk1表示如下定义的随机误差状态向量的协方差:
在这里插入图片描述

a.前向传播

在这里插入图片描述
其中 ∆ t = τ i + 1 − τ i ∆t = τ_{i+1} − τ_{i} t=τi+1τi
为了传播协方差,论文使用下面获得的误差状态动态模型:
在这里插入图片描述
F x ~ F_{\widetilde{x}} Fx F w F_w Fw的计算过程见附录A

在这里插入图片描述在这里插入图片描述
所以有协方差的传播公式:
P ^ i + 1 = F x ~ P ^ i F x ~ T + F w Q F w T ; P ^ 0 = P ˉ k − 1 . \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}=\bar{\mathbf{P}}_{k-1}. P i+1=Fx P iFx T+FwQFwT;P 0=Pˉk1.
这个传播过程一直到新一帧到来。其中的传播状态和协方差分别表示为 x ^ k , P ^ k \hat{x}_k,\hat{P}_k x^k,P^k,其中 P ^ k \hat{P}_k P^k表示真值 x k x_k xk和状态传播值 x ^ k \hat{x}_k x^k之间误差的协方差。

b.反向传播和运动补偿

由于特征点采集的时间不同(特征点采集时间 ρ j ρ_j ρj< t k t_k tk),所以会产生运动畸变,这就需要进行运动补偿,反向传播公式如下:
x ˇ j − 1 = x ˇ j ( − Δ t f ( x ˇ j , u j , 0 ) ) \check{\mathbf{x}}_{j-1}=\check{\mathbf{x}}_{j}(-\Delta t\mathbf{f}(\check{\mathbf{x}}_{j},\mathbf{u}_{j},\mathbf{0})) xˇj1=xˇj(Δtf(xˇj,uj,0))
后向传播是在特征点的采集频率下执行的,该频率通常远高于IMU速率。对于在两个IMU测量之间采样的所有特征点,使用左侧IMU测量作为反向传播中的输入(这句话为理解下面三个方程的关键)。此外,注意到 f ( x j , u j , 0 ) f(x_j,u_j,0) f(xjuj0)的噪声为零,反向传播可以被简化为:
I k p ˇ I j + 1 = I k p ˇ I j − I k v ˇ I j Δ t , s . f . I k p ˇ I m = 0 ; I k v ˇ I j − 1 = I k v ˇ I j − I k R ˇ I j ( a m i − 1 − b ^ a k ) Δ t − I k g ^ k Δ t , s . f . I k v ˇ I m = G R ^ I k T G v ^ I k , I k g ^ k = G R ^ I k T G g ^ k ; I k R ˇ I j − 1 = I k R ˇ I j E x p ( ( b ^ ω k − ω m i − 1 ) Δ t ) , s . f . I k R I m = I . {}^{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 s.f.{}^{I_k}\check{\mathbf{p}}_{I_m}=\mathbf{0}; \\ \begin{gathered} {}^{I_{k}}\check{\mathbf{v}}_{I_{j-1}}={}^{I_{k}}\check{\mathbf{v}}_{I_{j}}-{}^{I_{k}}\check{\mathbf{R}}_{I_{j}}(\mathbf{a}_{m_{i-1}}-\widehat{\mathbf{b}}_{\mathbf{a}_{k}})\Delta t-{}^{I_{k}}\widehat{\mathbf{g}}_{k}\Delta t, \\ 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}; \end{gathered} \\ {}^{I_k}\check{\mathbf{R}}_{I_{j-1}}={}^{I_k}\check{\mathbf{R}}_{I_j}\mathrm{Exp}((\widehat{\mathbf{b}}_{\mathbf{\omega}_k}-\mathbf{\omega}_{m_{i-1}})\Delta t),\quad s.f.{}^{I_k}\mathbf{R}_{I_m}=\mathbf{I}. IkpˇIj+1=IkpˇIjIkvˇIjΔt,s.f.IkpˇIm=0;IkvˇIj1=IkvˇIjIkRˇIj(ami1b ak)ΔtIkg kΔt,s.f.IkvˇIm=GR IkTGv Ik,Ikg k=GR IkTGg k;IkRˇIj1=IkRˇIjExp((b ωkωmi1)Δt),s.f.IkRIm=I.
其中 ρ j − 1 ∈ [ τ i − 1 , τ i ) ,∆ t = ρ j − ρ j − 1 , s . f . ρ_{j−1} ∈ [τ_{i−1}, τ_i),∆t = ρ_j − ρ_{j−1},s.f. ρj1[τi1,τi)t=ρjρj1s.f.means “starting from”.
通过上三个方程就能获得激光雷达 ρ j ρ_j ρj时刻和 t k t_k tk时刻的相对位姿: I k T ˇ I j = ( I k R ˇ I j , I k p ˇ I j ) {}^{I_k}\check{T}_{I_j}=({}^{I_k}\check{R}_{I_j},{}^{I_k}\check{p}_{I_j}) IkTˇIj=(IkRˇIj,IkpˇIj)
这个相对姿态可以将局部测量 L j p f j {}^{L_j}{p}_{f_j} Ljpfj投影到扫描结束端 L k p f j {}^{L_k}{p}_{f_j} Lkpfj
L k p f j = I T L − 1 I k T ˇ I j I T L L j p f j . {}^{L_k}\mathbf{p}_{f_j}={}^{I}\mathbf{T}_{L}^{-1I_k}\check{\mathbf{T}}_{I_j}{}^{I}\mathbf{T}_{L}{}^{L_j}\mathbf{p}_{f_j}. Lkpfj=ITL1IkTˇIjITLLjpfj.
然后就可以利用 L k p f j {}^{L_k}{p}_{f_j} Lkpfj去构造残差。(去畸变的思路和LOAM差不多)

c. 残差计算

通过上一步的运动补偿,可以获得所有在同一时刻 t k t_k tk采样得到的特征点集
{ L k p f j {}^{L_k}{p}_{f_j} Lkpfj},并用它来构造残差。假设当前迭代卡尔曼滤波的迭代数为 k k k,其对应的状态为 x ^ k k \hat{x}_k^k x^kk。当 k = 0 , x ^ k k = x ^ k k=0,\hat{x}_k^k=\hat{x}_k k=0,x^kk=x^k,传播的预测状态用方程为在这里插入图片描述
所以特征点集{ L k p f j {}^{L_k}{p}_{f_j} Lkpfj}可以通过如下方式变换到全局坐标下。
G p ^ f j κ = G T ^ I k κ I T L L k p f j ; j = 1 , ⋯   , m . {}^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. Gp fjκ=GT IkκITLLkpfj;j=1,,m.
接下来就是计算点—线,点—面的残差。
z j κ = G j ( G p ^ f j κ − G q j ) \mathbf{z}_j^{\kappa}=\mathbf{G}_j\left(\mathbf{}^G\widehat{\mathbf{p}}_{f_j}^{\kappa}-\mathbf{}^G\mathbf{q}_j\right) zjκ=Gj(Gp fjκGqj)
G p ^ f j κ {}^G\widehat{\mathbf{p}}_{f_j}^{\kappa} Gp fjκ表示特征点的全局坐标系坐标,
G q j \mathbf{}^G\mathbf{q}_j Gqj表示线/面上的点,
G j \mathbf{G}_j Gj表示线/面特征,
z j κ \mathbf{z}_j^{\kappa} zjκ表示残差。
方法和LOAM中类似。

d.迭代状态更新

为了将残差 z j κ \mathbf{z}_j^{\kappa} zjκ和IMU预测状态 x ^ k \hat{x}_k x^k,协方差 P ^ k \hat{P}_k P^k融合,需要将残差 z j κ \mathbf{z}_j^{\kappa} zjκ与真值 x k x_k xk和测量噪声联系起来的测量模型线性化。测量噪声来源于测量点 L j p f j {}^{L_j}{p}_{f_j} Ljpfj时的雷达测距和定向噪声 L j n f j {}^{L_j}{n}_{f_j} Ljnfj。从测量点 L j p f j {}^{L_j}{p}_{f_j} Ljpfj中去除这一噪声,就得到了真实点的位置。
L j p f j gt = L j p f j − L j n f j {}^{L_j}\mathbf{p}_{f_j}^{\text{gt}}={}^{L_j}\mathbf{p}_{f_j}-{}^{L_j}\mathbf{n}_{f_j} Ljpfjgt=LjpfjLjnfj
这个真实点带入残差方程理应结果为0,即
0 = h j ( x k , L j n f j ) = G j ( G T I k I k T ˇ I j I T L ( L j p f j − L j n f j ) − G q j ) \mathbf{0=h}_j\bigl(\mathbf{x}_k,{}^{L_j}\mathbf{n}_{f_j}\bigr)\mathbf{=G}_j\bigl({}^G\mathbf{T}_{I_k}{}^{I_k}\check{\mathbf{T}}_{I_j}{}^I\mathbf{T}_L\bigl(^{L_j}\mathbf{p}_{f_j}-{}^{L_j}\mathbf{n}_{f_j}\bigr)\mathbf{-}^G\mathbf{q}_j\bigr) 0=hj(xk,Ljnfj)=Gj(GTIkIkTˇIjITL(LjpfjLjnfj)Gqj)
x ^ k k \hat{x}_k^k x^kk处进行一阶近似(这一部分对应于EKF的线性化)
0 = h j ( x k , L j n f j ) ≃ h j ( x ^ k κ , 0 ) + H j κ x ~ k κ + v j = z j κ + H j κ x ~ k κ + v j \begin{aligned} 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} 0=hj(xk,Ljnfj)hj(x kκ,0)+Hjκx kκ+vj=zjκ+Hjκx kκ+vj
其中在这里插入图片描述
H j k H_j^k Hjk x ~ k κ \widetilde{\mathbf{x}}_k^\kappa x kκ关于 h j h_j hj的雅可比矩阵, x ~ k κ \widetilde{\mathbf{x}}_k^\kappa x kκ取值为0, v j ∈ N ( 0 , R j ) {\mathbf{v}}_{j}\in{\mathcal{N}}(\mathbf{0},\mathbf{R}_{j}) vjN(0,Rj)来自测量噪声 L j n f j {}^{L_j}\mathbf{n}_{f_j} Ljnfj
注意:先验 x k x_k xk通过正向传播获得,将其线性化
在这里插入图片描述
其中 J k J^k Jk
在这里插入图片描述在这里插入图片描述
构建MAP
在这里插入图片描述
得到标准的迭代卡尔曼滤波器
定义 H = [ H 1 κ T , ⋯   , H m κ T ] T , R = d i a g ( R 1 , ⋯ R m ) , P = ( J κ ) − 1 P ^ k ( J κ ) − T , a n d z k κ = [ z 1 κ T , ⋯   , z m κ T ] T \mathbf{H}=[\mathbf{H}_{1}^{\kappa^{T}},\cdots,\mathbf{H}_{m}^{\kappa^{T}}]^{T},\\ \mathbf{R=diag}(\mathbf{R}_{1},\cdots\mathbf{R}_{m}),\\P=\begin{aligned} (\mathbf{J}^{\kappa})^{-1}\widehat{\mathbf{P}}_{k}(\mathbf{J}^{\kappa})^{-T},\mathrm{and \quad}\mathbf{z}_{k}^{\kappa}=\left[\mathbf{z}_{1}^{\kappa^{T}},\cdots,\mathbf{z}_{m}^{\kappa^{T}}\right]^{T} \end{aligned} H=[H1κT,,HmκT]T,R=diag(R1,Rm),P=(Jκ)1P k(Jκ)T,andzkκ=[z1κT,,zmκT]T在这里插入图片描述
这个更新后的估计值 x ^ k k + 1 \hat{x}_k^{k+1} x^kk+1为第k+1次迭代的结果,循环迭代直到收敛至在这里插入图片描述。收敛后优化的状态估计和方差为:
x ˉ k = x ^ k κ + 1 , P ˉ k = ( I − K H ) P \bar{\mathbf{x}}_{k}=\widehat{\mathbf{x}}_{k}^{\kappa+1},\bar{\mathbf{P}}_{k}=\left(\mathbf{I}-\mathbf{KH}\right)\mathbf{P} xˉk=x kκ+1,Pˉk=(IKH)P
论文重点
常用的卡尔曼增益形式的一个问题是,它需要对度量维度内的矩阵 H P H T + R HPH^T+R HPHT+R求逆。在实践中,LiDAR特征点的数量是非常大的,这种大小的矩阵的逆是禁止的。因此,现有的一些方案只使用了少量的测量方法。论文证明了这种限制是可以避免的。直觉源于(17)
,其中代价函数在状态之上,因此解决方案的计算复杂度取决于状态维。通过该式可以得到新的Kalman增益形式,如下图所示: K = ( H T R − 1 H + P − 1 ) − 1 H T R − 1 \mathbf{K=}\left(\mathbf{H}^T\mathbf{R}^{-1}\mathbf{H+P}^{-1}\right)^{-1}\mathbf{H}^T\mathbf{R}^{-1} K=(HTR1H+P1)1HTR1
我们在附录B中证明了基于矩阵逆引理的两种形式的卡尔曼增益确实是等价的。由于激光雷达测量是独立的,因此协方差矩阵R是(块)对角线,因此新公式只需要两个矩阵的状态维,而不是测量。由于在LIO中状态维数通常远低于测量值(例如,在10 Hz扫描速率下一次扫描1000多个有效特征点,而状态维数只有18),新公式大大节省了计算量。

e.算法流程

在这里插入图片描述

4.地图更新

G p ˉ f j = G T ˉ I k I T L L k p f j ; j = 1 , ⋯   , m . ^G\bar{\mathbf{p}}_{f_j}={}^G\bar{\mathbf{T}}_{I_k}{}^I\mathbf{T}_L{}^{L_k}\mathbf{p}_{f_j};j=1,\cdots,m. Gpˉfj=GTˉIkITLLkpfj;j=1,,m.

5.初始化

为了获得系统状态的良好初始估计(例如重力矢量Gg、偏差和噪声协方差),从而加速状态估计,需要初始化。在FAST-LIO中,初始化很简单:保持LiDAR静态数秒(论文中所有实验均为2秒),然后使用收集到的数据初始化IMU偏差和重力矢量。如果激光雷达支持非重复扫描(如Livox AVIA),保持静态也允许激光雷达捕获初始的高分辨率地图,这对后续导航是有益的。

四、附录

A. F x ~ F_{\widetilde{x}} Fx F w F_w Fw的计算

在这里插入图片描述
在这里插入图片描述
其中式子(5)为
在这里插入图片描述

B.两种卡尔曼增益的等价证明

在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值