前端配准 I
内容基于深蓝学院课件,如有错误,烦请斧正,不胜感激。
本篇是ICP及其相关变型的介绍。
1.ICP
属于point-to-point ICP,掌握思想。
1.1 目的
求解两坨点云之间的转换关系。
1.2 数学表述
- 给定两坨点云
X = { x 1 , x 2 , . . . , x N x } P = { p 1 , p 2 , . . . , p N p } X=\{x_1,x_2,...,x_{N_x}\} \\ P=\{p_1,p_2,...,p_{N_p}\} X={x1,x2,...,xNx}P={p1,p2,...,pNp}
其中 x i x_i xi和 p i p_i pi表示点云的坐标, N x N_x Nx和 N p N_p Np分别表示两坨点云中的点的数量。 - 求解旋转矩阵
R
R
R和平移向量
t
t
t,使得误差最小
E ( R , t ) = 1 N ∑ i = 1 N ∥ x i − R p i − t ∥ 2 E(R,t)=\frac {1}{N}\sum_{i=1}^{N}\| x_i-Rp_i-t \| ^2 E(R,t)=N1i=1∑N∥xi−Rpi−t∥2
其中 N N N表示两坨点云匹配点对的数量。
1.3 求解方法
1.3.1 已知对应点
特点
- 不迭代
步骤
- 分别求两坨点云的质心
u x = 1 N ∑ i = 1 N x i u p = 1 N ∑ i = 1 N p i u_x=\frac{1}{N}\sum_{i=1}^{N}x_i \\ u_p=\frac{1}{N}\sum_{i=1}^{N}p_i ux=N1i=1∑Nxiup=N1i=1∑Npi
u x u_x ux是点云 X X X的质心, u p u_p up是点云 P P P的质心。 - 去中心化
x i ′ = x i − u x p i ′ = p i − u p x_i'=x_i-u_x \\ p_i'=p_i-u_p xi′=xi−uxpi′=pi−up - 构建
W
W
W矩阵
W = ∑ i = 1 N x i ′ p i ′ T W=\sum_{i=1}^{N}x_i'p_i'^T W=i=1∑Nxi′pi′T - 对
W
W
W进行SVD分解
W = U [ σ 1 0 0 0 σ 2 0 0 0 σ 3 ] V T W=U \begin {bmatrix} \sigma_1 & 0 & 0 \\ 0 & \sigma_2 & 0 \\ 0 & 0 & \sigma_3 \end {bmatrix} V^T W=U σ1000σ2000σ3 VT - 得到
R
R
R和
t
t
t
R = V U T t = u x − R u p R=VU^T \\ t=u_x-Ru_p R=VUTt=ux−Rup
推导
- 排除
t
t
t,目标锁定在
R
R
R上
E ( R , t ) = 1 N ∑ i = 1 N ∥ x i − R p i − t ∥ 2 = 1 N ∑ i = 1 N ∥ x i − R p i − t − u x + R u p + u x − R u p ∥ 2 = 1 N ∑ i = 1 N ∥ ( x i − u x − R ( p i − u p ) ) + ( u x − R u p − t ) ∥ 2 = 1 N ∑ i = 1 N [ ∥ x i − u x − R ( p i − u p ) ∥ 2 + ∥ u x − R u p − t ∥ 2 + 2 ( x i − u x − R ( p i − u p ) ) T ( u x − R u p − t ) ] = 1 N ∑ i = 1 N [ ∥ x i − u x − R ( p i − u p ) ∥ 2 + ∥ u x − R u p − t ∥ 2 ] + 1 N ∑ i = 1 N 2 ( x i − u x − R ( p i − u p ) ) T ( u x − R u p − t ) \begin{aligned} E(R,t) &=\frac{1}{N}\sum_{i=1}^{N}\parallel x_i-Rp_i-t \parallel^2 \\ &=\frac{1}{N}\sum_{i=1}^{N}\parallel x_i-Rp_i-t-u_x+Ru_p+u_x-Ru_p \parallel^2 \\ &=\frac{1}{N}\sum_{i=1}^{N}\parallel (x_i-u_x-R(p_i-u_p))+(u_x-Ru_p-t) \parallel^2 \\ &=\frac{1}{N}\sum_{i=1}^{N}[\parallel x_i-u_x-R(p_i-u_p)\parallel^2 +\parallel u_x-Ru_p-t \parallel^2 \\ &+ 2(x_i-u_x-R(p_i-u_p))^T(u_x-Ru_p-t)] \\ &=\frac{1}{N}\sum_{i=1}^{N}[\parallel x_i-u_x-R(p_i-u_p)\parallel^2 +\parallel u_x-Ru_p-t \parallel^2] \\ &+ \frac{1}{N}\sum_{i=1}^{N}2(x_i-u_x-R(p_i-u_p))^T(u_x-Ru_p-t) \\ \end{aligned} E(R,t)=N1i=1∑N∥xi−Rpi−t∥2=N1i=1∑N∥xi−Rpi−t−ux+Rup+ux−Rup∥2=N1i=1∑N∥(xi−ux−R(pi−up))+(ux−Rup−t)∥2=N1i=1∑N[∥xi−ux−R(pi−up)∥2+∥ux−Rup−t∥2+2(xi−ux−R(pi−up))T(ux−Rup−t)]=N1i=1∑N[∥xi−ux−R(pi−up)∥2+∥ux−Rup−t∥2]+N1i=1∑N2(xi−ux−R(pi−up))T(ux−Rup−t)
其中
1 N ∑ i = 1 N 2 ( x i − u x − R ( p i − u p ) ) T ( u x − R u p − t ) = 2 ( u x − R u p − t ) 1 N ∑ i = 1 N ( x i − u x − R ( p i − u p ) ) T = 2 ( u x − R u p − t ) ( 1 N ∑ i = 1 N ( x i − u x − R ( p i − u p ) ) ) T = 2 ( u x − R u p − t ) ( 1 N ∑ i = 1 N x i − u x + R u p − 1 N ∑ i = 1 N R p i ) T = 0 \begin{aligned} \frac{1}{N}\sum_{i=1}^{N}2(x_i-u_x-R(p_i-u_p))^T(u_x-Ru_p-t) \\ =2(u_x-Ru_p-t)\frac{1}{N}\sum_{i=1}^{N}(x_i-u_x-R(p_i-u_p))^T \\ =2(u_x-Ru_p-t)(\frac{1}{N}\sum_{i=1}^{N}(x_i-u_x-R(p_i-u_p)))^T \\ =2(u_x-Ru_p-t) (\frac{1}{N}\sum_{i=1}^{N}x_i-u_x+Ru_p-\frac{1}{N}\sum_{i=1}^{N}Rp_i)^T =0 \end{aligned} N1i=1∑N2(xi−ux−R(pi−up))T(ux−Rup−t)=2(ux−Rup−t)N1i=1∑N(xi−ux−R(pi−up))T=2(ux−Rup−t)(N1i=1∑N(xi−ux−R(pi−up)))T=2(ux−Rup−t)(N1i=1∑Nxi−ux+Rup−N1i=1∑NRpi)T=0
因此
E ( R , t ) = 1 N ∑ i = 1 N [ ∥ x i − u x − R ( p i − u p ) ∥ 2 + ∥ u x − R u p − t ∥ 2 ] = E 1 ( R ) + E 2 ( R , t ) \begin{aligned} E(R,t) &=\frac{1}{N}\sum_{i=1}^{N}[\parallel x_i-u_x-R(p_i-u_p)\parallel^2 +\parallel u_x-Ru_p-t \parallel^2 ]\\ &=E_1(R)+E_2(R,t) \end{aligned} E(R,t)=N1i=1∑N[∥xi−ux−R(pi−up)∥2+∥ux−Rup−t∥2]=E1(R)+E2(R,t)
即
E 1 ( R ) = 1 N ∑ i = 1 N ∥ x i − u x − R ( p i − u p ) ∥ 2 E 2 ( R , t ) = ∥ u x − R u p − t ∥ 2 \begin{aligned} E_1(R) &=\frac{1}{N}\sum_{i=1}^{N}\parallel x_i-u_x-R(p_i-u_p)\parallel^2 \\ E_2(R,t) &=\parallel u_x-Ru_p-t \parallel^2 \end{aligned} E1(R)E2(R,t)=N1i=1∑N∥xi−ux−R(pi−up)∥2=∥ux−Rup−t∥2
由于对于任意 R R R,总能得到 t = u x − R u p t=u_x-Ru_p t=ux−Rup,使得 E 2 ( R , t ) E_2(R,t) E2(R,t)取得最小值0。
因此
min E ( R , t ) = 1 N ∑ i = 1 N ∥ x i − R p i − t ∥ 2 \begin{aligned} \min E(R,t) &=\frac{1}{N}\sum_{i=1}^{N}\parallel x_i-Rp_i-t \parallel^2 \end{aligned} minE(R,t)=N1i=1∑N∥xi−Rpi−t∥2
可转变为
min E 1 ( R , t ) = 1 N ∑ i = 1 N ∥ x i − u x − R ( p i − u p ) ∥ 2 \begin{aligned} \min E_1(R,t) &=\frac{1}{N}\sum_{i=1}^{N}\parallel x_i-u_x-R(p_i-u_p)\parallel^2 \\ \end{aligned} minE1(R,t)=N1i=1∑N∥xi−ux−R(pi−up)∥2 - 简化
min
E
1
(
R
)
\min E_1(R)
minE1(R)
min E 1 ( R ) = 1 N ∑ i = 1 N ∥ x i − u x − R ( p i − u p ) ∥ 2 = 1 N ∑ i = 1 N ∥ x i ′ − R p i ′ ∥ 2 = 1 N ∑ i = 1 N ( x i ′ T x i ′ + p i ′ T R T R p i ′ − 2 x i ′ T R p i ′ ) = 1 N ∑ i = 1 N ( x i ′ T x i ′ + p i ′ T p i ′ − 2 x i ′ T R p i ′ ) = 1 N ∑ i = 1 N − 2 x i ′ T R p i ′ + 1 N ∑ i = 1 N ( x i ′ T x i ′ + p i ′ T p i ′ ) \begin{aligned} \min E_1(R) &=\frac{1}{N}\sum_{i=1}^{N}\parallel x_i-u_x-R(p_i-u_p)\parallel^2 \\ &=\frac{1}{N}\sum_{i=1}^{N}\parallel x_i'-Rp_i'\parallel^2 \\ &=\frac{1}{N}\sum_{i=1}^{N} (x_i'^Tx_i'+p_i'^TR^TRp_i'-2x_i'^TRp_i') \\ &=\frac{1}{N}\sum_{i=1}^{N} (x_i'^Tx_i'+p_i'^Tp_i'-2x_i'^TRp_i') \\ &=\frac{1}{N}\sum_{i=1}^{N} -2x_i'^TRp_i' + \frac{1}{N}\sum_{i=1}^{N} (x_i'^Tx_i'+p_i'^Tp_i') \\ \end{aligned} minE1(R)=N1i=1∑N∥xi−ux−R(pi−up)∥2=N1i=1∑N∥xi′−Rpi′∥2=N1i=1∑N(xi′Txi′+pi′TRTRpi′−2xi′TRpi′)=N1i=1∑N(xi′Txi′+pi′Tpi′−2xi′TRpi′)=N1i=1∑N−2xi′TRpi′+N1i=1∑N(xi′Txi′+pi′Tpi′)
由于 1 N ∑ i = 1 N ( x i ′ T x i ′ + p i ′ T p i ′ ) \frac{1}{N}\sum_{i=1}^{N} (x_i'^Tx_i'+p_i'^Tp_i') N1∑i=1N(xi′Txi′+pi′Tpi′)与 R R R无关,
因此 min E 1 ( R ) \min E_1(R) minE1(R)等价于 max ∑ i = 1 N x i ′ T R p i ′ \max \sum_{i=1}^{N}x_i'^TRp_i' max∑i=1Nxi′TRpi′ - 将
max
∑
i
=
1
N
x
i
′
T
R
p
i
′
\max \sum_{i=1}^{N}x_i'^TRp_i'
max∑i=1Nxi′TRpi′转换为求矩阵迹
x i ′ T R p i ′ = [ x i 0 ′ x i 1 ′ x i 2 ′ ] R p i ′ = [ x i 0 ′ x i 1 ′ x i 2 ′ ] [ R ⃗ 0 R ⃗ 1 R ⃗ 2 ] p i ′ = x i 0 ′ R ⃗ 0 p i ′ + x i 1 ′ R ⃗ 1 p i ′ + x i 2 ′ R ⃗ 2 p i ′ = R ⃗ 0 x i 0 ′ p i ′ + R ⃗ 1 x i 1 ′ p i ′ + R ⃗ 2 x i 2 ′ p i ′ \begin{aligned} x_i'^TRp_i' &= \begin{bmatrix} x_{i0}' & x_{i1}' & x_{i2}' \\ \end{bmatrix} Rp_i' \\ &= \begin{bmatrix} x_{i0}' & x_{i1}' & x_{i2}' \\ \end{bmatrix} \begin{bmatrix} \vec R_0 \\ \vec R_1 \\ \vec R_2 \\ \end{bmatrix} p_i' \\ &=x_{i0}'\vec R_0p_i'+x_{i1}'\vec R_1p_i'+x_{i2}'\vec R_2p_i' \\ &=\vec R_0x_{i0}'p_i'+\vec R_1x_{i1}'p_i'+\vec R_2x_{i2}'p_i' \end{aligned} xi′TRpi′=[xi0′xi1′xi2′]Rpi′=[xi0′xi1′xi2′] R0R1R2 pi′=xi0′R0pi′+xi1′R1pi′+xi2′R2pi′=R0xi0′pi′+R1xi1′pi′+R2xi2′pi′
R p i ′ x i ′ T = [ R ⃗ 0 R ⃗ 1 R ⃗ 2 ] [ x i 0 ′ p i ′ x i 1 ′ p i ′ x i 2 ′ p i ′ ] = [ R ⃗ 0 x i 0 ′ p i ′ R ⃗ 0 x i 1 ′ p i ′ R ⃗ 0 x i 2 ′ p i ′ R ⃗ 1 x i 0 ′ p i ′ R ⃗ 1 x i 1 ′ p i ′ R ⃗ 1 x i 2 ′ p i ′ R ⃗ 2 x i 0 ′ p i ′ R ⃗ 2 x i 1 ′ p i ′ R ⃗ 2 x i 2 ′ p i ′ ] \begin{aligned} Rp_i'x_{i'}^T &= \begin {bmatrix} \vec R_0 \\ \vec R_1 \\ \vec R_2 \\ \end {bmatrix} \begin {bmatrix} x_{i0}'p_i' & x_{i1}'p_i' & x_{i2}'p_i' \end {bmatrix} \\ &= \begin {bmatrix} \vec R_0 x_{i0}'p_i' & \vec R_0 x_{i1}'p_i' & \vec R_0 x_{i2}'p_i' \\ \vec R_1 x_{i0}'p_i' & \vec R_1 x_{i1}'p_i' & \vec R_1 x_{i2}'p_i' \\ \vec R_2 x_{i0}'p_i' & \vec R_2 x_{i1}'p_i' & \vec R_2 x_{i2}'p_i' \\ \end {bmatrix} \end{aligned} Rpi′xi′T= R0R1R2 [xi0′pi′xi1′pi′xi2′pi′]= R0xi0′pi′R1xi0′pi′R2xi0′pi′R0xi1′pi′R1xi1′pi′R2xi1′pi′R0xi2′pi′R1xi2′pi′R2xi2′pi′
图示
因此
max ∑ i = 1 N x i ′ T R p i ′ = max ∑ i = 1 N T r a c e ( R p i ′ x i ′ T ) = max T r a c e ( R ∑ i = 1 N ( p i ′ x i ′ T ) ) = max T r a c e ( R H ) \begin{aligned} \max \sum_{i=1}^{N} {x_i'}^TRp_i' &=\max \sum_{i=1}^{N} Trace(Rp_i'{x_i'}^T) \\ &=\max Trace(R\sum_{i=1}^{N}(p_i'{x_i'}^T)) \\ &=\max Trace(RH) \end{aligned} maxi=1∑Nxi′TRpi′=maxi=1∑NTrace(Rpi′xi′T)=maxTrace(Ri=1∑N(pi′xi′T))=maxTrace(RH) - 利用矩阵迹的性质进行转换,并证明
R
=
V
U
T
R=VU^T
R=VUT
引理及证明:
假设矩阵 A A A为正定对称矩阵,则对于任意的正交矩阵 B B B,都有
T r a c e ( A ) ≥ T r a c e ( B A ) Trace(A) \geq Trace(BA) Trace(A)≥Trace(BA)
由于 H H H并非正定对称矩阵,因此要构造一个正定对称矩阵:
(1).对 H H H进行SVD分解,即 H = U Σ V T H=U\Sigma V^T H=UΣVT
(2).构建正交矩阵 X X X,令 X = V U T X=VU^T X=VUT
(3). X H = V U T U Σ V T = V Σ V T XH=VU^TU\Sigma V^T=V\Sigma V^T XH=VUTUΣVT=VΣVT为正定对称矩阵
对于任意的正交矩阵 B B B,根据上述性质,可得
T r a c e ( X H ) ≥ T r a c e ( B X H ) Trace(XH) \geq Trace(BXH) Trace(XH)≥Trace(BXH)
因为 B B B为任意正交矩阵,因此 B X BX BX可以取遍所有的正交矩阵,当然也包括需要求解的旋转矩阵 R R R,因此
T r a c e ( R H ) ≤ T r a c e ( X H ) Trace(RH) \leq Trace(XH) Trace(RH)≤Trace(XH)
当 R = X R=X R=X时,等式成立。 - 综上所述
R = X = V U T t = u x − R u p R=X=VU^T \\ t=u_x-Ru_p R=X=VUTt=ux−Rup
1.3.2 未知对应点
特点
- 迭代
步骤
- 构造匹配点对
对 P P P中的点在 X X X中寻找对应点(欧氏距离最小),构造匹配点对,数量为 N N N。 - 计算
R
R
R和
t
t
t
根据1.3.1的方法求解 R R R和 t t t。
( R R R是 R X ← P R_{X\larr P} RX←P, t t t是 t X ← P t_{X\larr P} tX←P) - 对点云姿态进行变换,计算误差
将 R R R和 t t t作用于点云 P P P,于是 P P P相对于 X X X就有了一个新的姿态。
误差的计算如1.2中 E ( R , t ) E(R,t) E(R,t)所示。 - 不断迭代,直至误差小于某一个值
未达到迭代终止条件,则继续进行1,2,3步。
参考
[LIDAR-SLAM] Iterative Closest Point (ICP)简单实现
[0024] Iterative Closest Points(迭代最近点)
2.PL-ICP
2.1 示意图
2.2 基本思想
- 激光点是对实际环境中曲面的离散采样
- 最好的误差尺度为当前激光点到实际曲面的距离,因此关键的问题是如何恢复曲面
PL-ICP的思想是用分段线性的方法来对实际曲面进行近似,用激光点到最近两点连线的距离来模拟激光点到实际曲面的距离。
2.3 数学描述
变量说明
p
i
p_i
pi:点云集合
P
P
P中,点
p
i
p_i
pi的三维坐标
x
j
i
x_{j}^i
xji:
T
k
p
i
T_kp_i
Tkpi在点
x
j
1
i
x_{j_1}^i
xj1i,
x
j
2
i
x_{j_2}^i
xj2i组成的直线上的投影点
x
j
1
i
x_{j_1}^i
xj1i,
x
j
2
i
x_{j_2}^i
xj2i:点云集合
X
X
X中,距离
T
k
p
i
T_kp_i
Tkpi最近的两个点
n
i
T
n_i^T
niT:点
x
j
1
i
x_{j_1}^i
xj1i,
x
j
2
i
x_{j_2}^i
xj2i组成的直线的法向量(单位法向量)
目标函数
PL-ICP的目标函数表示了点到直线的距离,近似表示了点到曲面的距离。
PL-ICP也可转为point-to-point ICP。
min
T
k
∑
i
∥
n
i
T
(
x
j
2
i
−
T
k
p
i
)
∥
2
⟺
min
T
k
∑
i
∥
x
j
i
−
T
k
p
i
∥
2
\min_{T_k} \sum_i \parallel n_i^T(x_{j_2}^i-T_kp_i) \parallel^2 \iff \min_{T_k} \sum_i \parallel x_j^i-T_kp_i \parallel^2
Tkmini∑∥niT(xj2i−Tkpi)∥2⟺Tkmini∑∥xji−Tkpi∥2
其中,
T
k
=
[
R
k
t
k
0
1
]
T_k= \begin {bmatrix} R_k & t_k \\ 0 & 1 \end {bmatrix}
Tk=[Rk0tk1],
T
k
p
i
=
R
k
p
i
+
t
k
T_kp_i=R_kp_i+t_k
Tkpi=Rkpi+tk
2.4 求解
已知量
- 当前激光帧 P P P
- 参考激光帧 X X X
- 初始位姿 T 0 T_0 T0
未知量
每次迭代计算后的两帧激光之间的相对位姿 T ∗ T^* T∗
算法流程
- 把当前帧的数据 p i p_i pi根据初始位姿进行变换,得到 T k p i T_kp_i Tkpi
- 对于当前帧中的点 T k p i T_kp_i Tkpi,在参考帧中找到最近的两个点 x j 1 i x_{j_1}^i xj1i, x j 2 i x_{j_2}^i xj2i,并计算此两点间直线的法向量 n i T n_i^T niT和投影点 x j i x_j^i xji
- 计算点 T k p i T_kp_i Tkpi与投影点 x j i x_j^i xji的距离,去除误差过大的点
- 最小化误差函数 min T k ∑ i ∥ x j i − T k p i ∥ 2 \min_{T_k} \sum_i \parallel x_j^i-T_kp_i \parallel^2 Tkmini∑∥xji−Tkpi∥2
2.5 与ICP的区别
- 误差函数形式不同
ICP的误差是点到点的误差,PL-ICP的误差实际是点到直线的误差(虽然也能转成点到点的误差)。
PL-ICP的误差形式更符合实际情况。 - 误差收敛速度不同
ICP为一阶收敛,误差是递减的
∥ T k − T ∞ ∥ < k ∥ T k − 1 − T ∞ ∥ \parallel T_k-T_\infty \parallel < k \parallel T_{k-1}-T_\infty \parallel ∥Tk−T∞∥<k∥Tk−1−T∞∥
PL-ICP为二阶收敛,误差的平方和是递减的
∥ T k − T ∞ ∥ 2 < k ∥ T k − 1 − T ∞ ∥ 2 \parallel T_k-T_\infty \parallel^2 < k \parallel T_{k-1}-T_\infty \parallel^2 ∥Tk−T∞∥2<k∥Tk−1−T∞∥2 - PL-ICP的求解精度高于ICP,特别是在结构化环境中
- PL-ICP对初始值更敏感,因此不单独使用,而是与里程计、CSM等一起使用
PL-ICP对初始值敏感,容易陷入局部极值。
CSM不容易陷入局部极值(为何?)。
3.NICP
3.1 示意图
3.2 基本思想
- 较ICP而言,在对应点匹配方面纳入了法向量和曲率
利用法向量和曲率对错误的匹配点进行滤除。 - 误差项除了考虑对应点的欧氏距离之外,还考虑对应点法向量的角度差
3.3 数学描述
符号
p
i
,
p
j
p_i,p_j
pi,pj:点云集合
P
C
,
P
R
P^C,P^R
PC,PR中点的三维坐标
n
i
n_i
ni:点
i
i
i处曲面的法向量
σ
i
\sigma_i
σi:点
i
i
i处曲面的曲率
T
T
T:欧氏变换矩阵
ζ
\zeta
ζ:两个点云集合
P
C
,
P
R
P^C,P^R
PC,PR中对应点对的集合
p
i
~
=
[
p
i
n
i
]
\tilde{p_i}=\begin {bmatrix} p_i \\ n_i \end {bmatrix}
pi~=[pini]
T
⨁
p
i
~
=
[
R
p
i
+
t
R
n
i
]
T\bigoplus\tilde{p_i}=\begin {bmatrix} Rp_i+t \\ Rn_i \end {bmatrix}
T⨁pi~=[Rpi+tRni]
误差
e
i
j
(
T
)
=
(
p
~
i
c
−
T
⨁
p
~
j
r
)
e_{ij}(T)=(\tilde{p}_i^c-T\bigoplus\tilde{p}_j^r)
eij(T)=(p~ic−T⨁p~jr)
(前三维,欧氏距离的误差;后三维,法向量的误差)
目标函数
定义为
∑
ζ
e
i
j
(
T
)
T
Ω
~
i
j
e
i
j
(
T
)
\sum_{\zeta}e_{ij}(T)^T\tilde{\Omega}_{ij}e_{ij}(T)
ζ∑eij(T)TΩ~ijeij(T)
而
Ω
~
i
j
=
[
Ω
i
s
0
0
Ω
i
n
]
\tilde{\Omega}_{ij}=\begin {bmatrix} \Omega_i^s & 0 \\ 0 & \Omega_i^n \end {bmatrix}
Ω~ij=[Ωis00Ωin]
Ω
~
i
j
\tilde{\Omega}_{ij}
Ω~ij为信息矩阵。
⚠️法向量和曲率的计算
- 找到点
p
i
p_i
pi周围半径
R
R
R球形空间内的所有点
V
i
V_i
Vi
u i s = 1 ∣ V i ∣ ∑ p j ∈ V i p i ∑ i s = 1 ∣ V i ∣ ∑ p j ∈ V i ( p i − u i ) T ( p i − u i ) ∑ i s = R [ λ 1 0 0 λ 2 ] R T u_i^s=\frac{1}{|V_i|} \sum_{p_j \in V_i}p_i \\ {\textstyle\sum_i^s}=\frac{1}{|V_i|} \sum_{p_j \in V_i}(p_i-u_i)^T(p_i-u_i) \\ {\textstyle\sum_i^s}=R \begin {bmatrix} \lambda_1 & 0 \\ 0 & \lambda_2 \end {bmatrix}R^T uis=∣Vi∣1pj∈Vi∑pi∑is=∣Vi∣1pj∈Vi∑(pi−ui)T(pi−ui)∑is=R[λ100λ2]RT - 曲率
σ i = λ 1 λ 1 + λ 2 ( λ 2 ≫ λ 1 ) \sigma_i=\frac{\lambda_1}{\lambda_1+\lambda_2} \\ (\lambda_2 \gg \lambda_1) σi=λ1+λ2λ1(λ2≫λ1) - 法向量
最小特征值对应的特征向量(为何?) - 信息矩阵
Ω i s = ( ∑ i s ) − 1 Ω i n = { R [ 1 ε 0 0 1 ] R T 曲率足够小 I \Omega_i^s=({\textstyle\sum_i^s})^{-1} \\ \Omega_i^n= \begin {cases} R \begin {bmatrix} \frac{1}{\varepsilon} & 0 \\ 0 & 1 \end {bmatrix}R^T \qquad \text{曲率足够小} \\ I \end {cases} Ωis=(∑is)−1Ωin=⎩ ⎨ ⎧R[ε1001]RT曲率足够小I
3.4 点匹配规则
- 如果没有well define的法向量,则拒绝
- 两点间的欧式距离大于阈值,则拒绝
∥ p i c − T ⨁ p j r ∥ > ϵ d \parallel {p}_i^c-T\bigoplus{p}_j^r \parallel >\epsilon_d ∥pic−T⨁pjr∥>ϵd - 两点的曲率之差大于阈值,则拒绝
∣ log σ i c − log σ j r ∣ > ϵ σ | \log \sigma_i^c - \log \sigma_j^r | >\epsilon_{\sigma} ∣logσic−logσjr∣>ϵσ - 两点的法向量角度之差大于阈值,则拒绝
n i c ⋅ T ⨁ n j r < ϵ n n_i^c\cdot T\bigoplus n_j^r < \epsilon_{n} nic⋅T⨁njr<ϵn
3.5 求解
如前所述,目标函数定义为
∑
ζ
e
i
j
(
T
)
T
Ω
~
i
j
e
i
j
(
T
)
\sum_{\zeta}e_{ij}(T)^T\tilde{\Omega}_{ij}e_{ij}(T)
ζ∑eij(T)TΩ~ijeij(T)
该非线性最小二乘问题使用LM方法进行求解
3.6 特点
- 在寻找点匹配过程中,考虑了环境曲面的法向量和曲率,因此可以提前排除一些明显是错误的匹配
- 在误差定义中,除了考虑欧式距离之外,还考虑了法向量之间的距离,因此具有更加准确的角度(激光里程计的误差主要来源于角度)
- 在开源领域,效果最好的ICP匹配方法
3.7 算法流程总结
- 计算参考激光帧和当前激光帧中每一个点的法向量和曲率
- 根据当前解,把当前激光帧的点转换到参考坐标系中,并且根据欧氏距离、法向量、曲率等信息来选择匹配点(也有可能没有匹配点)
- 根据上面介绍的方法,用LM方法进行迭代求解,迭代收敛即可得到两帧激光数据之间的相对位姿
4.IMLS-ICP
4.1 示意图
4.2 基本思想
拟合出一个曲面,求当前点到曲面的距离,但并没有显式的表达式来表达拟合过程。
- 选择具有代表性的激光点来进行匹配,既能减少计算量同时又能减少激光点分布不均匀导致的计算结果出现偏移
- 点云中隐藏着真实的曲面,最好的做法就是能从参考帧点云中把曲面重建出来
- 曲面重建的越准确,对真实世界描述越准确,匹配的精度就越高
4.3 代表点的选取
- 具有丰富特征的点,即为结构化的点–具有良好的曲率和法向量的定义
- 曲率越小的点越好,因为曲率为0代表着直线,代表着最结构化的点,也代表着具有非常 好的法向量定义,能够提供足够的约束
- 选点的时候需要注意选取的激光点的均衡以保证可观性,因为是平面匹配,不存在角度不可观的情况。只需要考虑X方向和Y方向的可观性。要保证两者的约束基本上是一致的,才能让结果不出现偏移
4.4 曲面重建
P
k
P_k
Pk:前
n
n
n帧激光数据组成的子图
n
i
n_i
ni:点云集合
P
k
P_k
Pk中的点
p
i
p_i
pi的法向量
I
P
k
(
x
)
I^{P_k}(x)
IPk(x):
R
3
\R^3
R3空间的点
x
x
x到点云集合
P
k
P_k
Pk隐藏曲面的距离
I
P
k
(
x
)
I^{P_k}(x)
IPk(x)定义如下
I
P
k
(
x
)
=
∑
p
i
∈
P
k
W
i
(
x
)
(
(
x
−
p
i
)
⋅
n
⃗
i
)
∑
p
i
∈
P
k
W
j
(
x
)
I^{P_k}(x)=\frac{\textstyle \sum_{p_i \in P_k}W_i(x)((x-p_i)\cdot \vec n_i) }{\sum_{p_i \in P_k}W_j(x)}
IPk(x)=∑pi∈PkWj(x)∑pi∈PkWi(x)((x−pi)⋅ni)
(实际上完成了曲面拟合,基于假设、隐式拟合得到隐藏曲面)
其中,权重
W
i
(
x
)
W_i(x)
Wi(x)定义如下
W
i
(
x
)
=
e
−
∥
x
−
p
i
∥
2
/
h
2
W_i(x)=e^{-\parallel x-p_i \parallel^2/h^2}
Wi(x)=e−∥x−pi∥2/h2
(
I
P
k
(
x
)
I^{P_k}(x)
IPk(x)=0表示点云集合
P
k
P_k
Pk隐藏的曲面)
4.5 匹配求解
S
k
S_k
Sk:新一帧激光数据
I
P
k
(
x
i
)
I^{P_k}(x_i)
IPk(xi):当前帧
S
k
S_k
Sk中的点
x
i
x_i
xi到曲面的距离
n
⃗
i
\vec n_i
ni:
P
k
P_k
Pk中距离点
x
i
x_i
xi最近的点的法向量
- 点
x
i
x_i
xi在曲面上的投影
y
i
y_i
yi为:
x i ′ = R x i + t y i = x i ′ − I P k ( x i ′ ) n ⃗ i x_i'=Rx_i+t \\ y_i=x_i'-I^{P_k}(x_i')\vec n_i xi′=Rxi+tyi=xi′−IPk(xi′)ni - 对于新一帧激光数据
S
k
S_k
Sk,通过最小化以下函数,求解姿态变换:
∑ x i ∈ S k ( ( R x i + t − y i ) ⋅ n ⃗ i ) 2 \sum_{x_i \in S_k}((Rx_i+t-y_i)\cdot \vec n_i)^2 xi∈Sk∑((Rxi+t−yi)⋅ni)2