赞
踩
在之前的工作中有接触过LOAM,最近在工作中又接触到Faster LIO相关的工作,于是想着对Fast LIO / Fast LIO2 / Faster LIO这一系列工作进行一个简单的总结,以加深自己对激光SLAM算法的理解,之前总结过的一些和激光SLAM算法相关的博客还有,感兴趣的同学可以一起学习讨论:
激光SLAM总结——VLOAM / LIMO算法解析
激光SLAM总结——LIO-Mapping / LIOM / LINS / LIO-SAM算法解析
FAST LIO是2021年提出的一个激光和IMU紧耦合迭代卡尔曼滤波框架,论文的贡献主要是提供了一个新的卡尔曼增益计算公式,新公式不依赖于测量维度,仅依赖于状态维度,从而达到高效的计算
Fast LIO是基于LINS进行进一步优化,那么LINS有什么问题呢?LINS是紧耦合框架,点云构建的残差被直接写入了观测方程,点云残差构建如下:
f
i
(
x
b
k
+
1
b
k
)
=
{
∣
(
p
^
i
l
k
−
p
a
l
k
)
×
(
p
^
i
l
k
−
p
b
I
k
)
∣
∣
p
a
l
k
−
p
b
l
k
∣
if
p
i
l
k
+
1
∈
F
e
∣
(
p
^
i
k
−
p
a
l
)
T
(
(
p
a
k
−
p
b
k
)
×
(
p
a
l
−
p
c
l
)
)
∣
∣
(
p
a
l
k
−
p
b
l
k
)
×
(
p
a
l
k
−
p
c
l
c
)
∣
if
p
i
l
k
+
1
∈
F
p
f_{i}\left(\mathbf{x}_{b_{k+1}}^{b_{k}}\right)=\left\{
Fast LIO的总体框架如下图所示:
大致流程是将激光雷达输入到特征提取模块,可获得平面和边缘特征,将提取后的特征和IMU测量值进行状态估计,输出
10
H
Z
10HZ
10HZ到
50
H
Z
50HZ
50HZ的状态估计结果,并根据状态估计结果将特征点注册到全局地图。
下面进行Fast LIO的公式推导:
假设IMU系为Body系,激光系到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)
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
IMU的离散运动学方程为
x
i
+
1
=
x
i
⊞
(
Δ
t
f
(
x
i
,
u
i
,
w
i
)
)
\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)
xi+1=xi⊞(Δtf(xi,ui,wi))其中:
x
≐
[
G
R
I
T
G
p
I
T
G
v
I
T
b
ω
T
b
a
T
G
g
T
]
T
∈
M
\mathbf{x} \doteq\left[
下面迭代扩展卡尔曼滤波进行状态估计,定义误差状态如下:
x
~
k
−
1
≐
x
k
−
1
⊟
x
‾
k
−
1
=
[
δ
θ
T
G
p
~
I
T
G
v
~
I
T
b
~
ω
T
b
~
a
T
G
g
~
T
]
T
\widetilde{\mathbf{x}}_{k-1} \doteq \mathbf{x}_{k-1} \boxminus \overline{\mathbf{x}}_{k-1}=\left[
前向传播流程如下:
x
^
i
+
1
=
x
^
i
⊞
(
Δ
t
f
(
x
^
i
,
u
i
,
0
)
)
;
x
^
0
=
x
‾
k
−
1
.
\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} \text {. }
x
i+1=x
i⊞(Δtf(x
i,ui,0));x
0=xk−1. 其中上述计算的是标称状态的传播,计算过程中不考虑的噪声,状态的协方差通过误差状态进行传播,并吸纳这部分噪声,如下,误差状态定位如下::
x
~
i
+
1
=
x
i
+
1
⊟
x
^
i
+
1
=
(
x
i
⊞
Δ
t
f
(
x
i
,
u
i
,
w
i
)
)
⊟
(
x
^
i
⊞
Δ
t
f
(
x
^
i
,
u
i
,
0
)
)
≃
(
23
)
F
x
~
x
~
i
+
F
w
w
i
.
Fast LIO中使用的是点到面的残差,残差
z
j
κ
\mathbf{z}_j^\kappa
zjκ计算如下:
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({ }^G \widehat{\mathbf{p}}_{f_j}^\kappa-{ }^G \mathbf{q}_j\right)
zjκ=Gj(Gp
fjκ−Gqj)其中
κ
\kappa
κ为迭代卡尔曼滤波中的迭代次数。为了将残差
z
j
κ
\mathbf{z}_j^\kappa
zjκ直接加入滤波过程,因此需要对残差进行线性化,线性化过程如下,如果将点云测量过程中的噪声移除的话,测量方程如下:
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}=\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(xkLjnfj)=Gj(GTIkIkTˇIjITL(Ljpfj−Ljnfj)−Gqj)进行一阶近似后:
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
作者在论文中比较了Fast LIO和LINS的效果,在使用相同数据集的前提下而LINS平均每帧激光提取特征点147个需要34.5ms,Fast LIO平均每帧激光提取特征点784个,用7.3ms的平均处理速度并取得了更高的精度。
Fast LIO2发表于2021年,是在Fast LIO上进一步优化的一篇工作,其主要贡献是:(1)直接将原始点注册到地图而不提取特征,这样有助于提供整个系统的准确性;(2)通过增量k-d树结构ikd-Tree维护映射,该结构支持增量插入、删除和动态重新平衡,与现有的动态数据结构相比有更优越的整体性能
Fast-LIO2的整体框架如下:
其中State Estimation部分和Fast-LIO是基本一致的,下面我们主要总结下区别较大的Mapping部分
Incremental Updates分为Point-wise操作和Box-wise操作,Point-wise指的是对一个点进行Insert、Delete或者Re-insert操作,Box-wise是对一个Box内的所有点进行Insert、Delete或者Re-insert操作
Point Insertion with On-tree Downsampling,对于Point插入操作算法如下:
Point插入过程中会伴随着On-tree Downsample的操作,假定Downsample的分辨率为
l
l
l,根据分辨率
l
l
l可以将空间划分为若干个的立方体
C
D
\mathbf{C}_D
CD,新插入点
p
\mathbf{p}
p会计算属于哪个
C
D
\mathbf{C}_D
CD,算法计算离
C
D
\mathbf{C}_D
CD中心
p
center
\mathbf{p}_{\text {center }}
pcenter 最近的点
P
nearest
\mathbf{P}_{\text {nearest}}
Pnearest,然后将
C
D
\mathbf{C}_D
CD里已经存在的点删除,然后将
P
nearest
\mathbf{P}_{\text {nearest}}
Pnearest重新插入ikd-Tree。插入操作则是在ikd-Tree中递归地找到一个空节点,对于递归过程中涉及到的每一个非空节点会更新其节点属性。
Box-wise Delete using Lazy Labels,在删除过程中,节点并不会立即被删除,而是delete标志位和treedeleted标志位做延后删除,判断节点是否要删除的流程如下:
假定要删除的范围是
C
O
\mathbf{C}_O
CO,根据节点的range属性获得的范围是
C
T
\mathbf{C}_T
CT,如果
C
O
\mathbf{C}_O
CO和
C
T
\mathbf{C}_T
CT不存在交集,则直接返回,如果
C
O
\mathbf{C}_O
CO完全包含
C
T
\mathbf{C}_T
CT,则将
C
T
\mathbf{C}_T
CT包含的所有节点全部删除,如果
C
O
\mathbf{C}_O
CO包含部分
C
T
\mathbf{C}_T
CT递归到子节点做进一步判断。
Faster LIO是高博团队发表于2022年的一篇论文,其主要贡献是是基于Fast LIO2将ikd-Tree的数据结构更新为iVox,进一步提高了算法效率,在知乎上有一篇高博对这个工作的介绍,感兴趣的同学可以参考Faster-LIO:快速激光IMU里程计,本篇只做一个简单总结
如下图是iVox的数据结构定义:
iVov的底层是一个空间哈希映射:
p
=
[
p
x
,
p
y
,
p
z
]
T
\mathbf{p}=\left[p_x, p_y, p_z\right]^T
p=[px,py,pz]T
v
=
1
s
[
p
x
,
p
y
,
p
z
]
T
\mathbf{v}=\frac{1}{s}\left[p_x, p_y, p_z\right]^T
v=s1[px,py,pz]T
i
d
v
=
hash
(
v
)
=
(
v
x
n
x
)
xor
(
v
y
n
y
)
xor
(
v
z
n
z
)
m
o
d
N
i d_v=\operatorname{hash}(v)=\left(v_x n_x\right) \text { xor }\left(v_y n_y\right) \text { xor }\left(v_z n_z\right) \bmod N
idv=hash(v)=(vxnx) xor (vyny) xor (vznz)modN其中
p
x
,
p
y
,
p
z
p_x, p_y, p_z
px,py,pz是空间点坐标,
s
s
s是栅格大小,
n
x
,
n
y
,
n
z
n_x, n_y, n_z
nx,ny,nz是大质数,因为质数不与其他数字存在公约数,可以减少因取模操作而产生的周期性模式,从而避免哈希冲突,
N
N
N是哈希表的大小。
在存储上,这些Voxel以Vector的数据结构进行存储或者使用PHC的数据结构进行存储,根据存储结构的不同分别称为Linear iVox或者iVox-PHC。
在查找K近邻时,先计算被查找的点落在哪个体素中,然后看预定义的范围内是否存在有效的iVox。如果有,就把这些iVox内部的点也考虑进来。我们在每个iVox内部查找至多K个最近邻,再进行合并即可。线性的iVox只须遍历内部点,然后进行部分排序,再进行汇总。PHC的iVox则可以根据空间填充曲线上的索引值来查找最近邻。,使用这种方式进行最近邻搜索其效率更高,精度会有所下降,但是对于点云匹配来讲这种精度已经足够。
上述提到的PHC是一种建立高维数据与低维数据映射的方法,在查找最近邻时可以先把它看成这个iVox里的曲线上的ID,然后相关计算公式计算该ID周边的若干个近邻,如下图所示:
在论文中有补充到,由于Faster LIO会限制填入每个栅格的点的数量,因此PHC带来的收益并不是特别明显
在Fast LIO2中使用LUR缓存进行局部地图管理,在进行近邻搜索时,记录哪些体素是最近使用过的,那么不怎么使用的体素自然被移动到队尾。我们会设置一个局部地图的容量,超过最大容量时,就删除那些很久未使用的体素。删除操作是针对整个体素的,内部的点会被全部删除。这种局部地图缓存策略也会让局部地图跟随车辆运动,而实际操作的地方更少。如下图所示:
如下是不同数据结构插入和最近邻搜索的耗时对比:
如下图是耗时和召回的关系曲线:
最后是Faster LIO整个系统耗时和精度对比:
可以看到,在相同的精度下Faster LIO确实取得了更快的速度,以上是对Faster LIO算法的简单总结
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。