距离
D
(
P
)
=
x
2
+
y
2
+
z
2
D(P)=\sqrt{x^2+y^2+z^2}
D(P)=x2+y2+z2
水平夹角
ϕ
(
P
)
=
tan
−
1
(
(
y
2
+
z
2
)
/
x
2
)
\phi(P)=\tan^{-1}(\sqrt{(y^2+z^2)/x^2})
ϕ(P)=tan−1((y2+z2)/x2)
垂直夹角
ϕ
(
P
)
=
a
t
a
n
2
(
y
,
z
)
/
P
I
∗
180
°
\phi(P)=atan2(y,z)/PI*180\degree
ϕ(P)=atan2(y,z)/PI∗180°
强度
R
:
激
光
反
射
强
度
R:激光反射强度
R:激光反射强度
I
(
P
)
=
R
/
D
(
P
)
2
I(P)=R/D(P)^2
I(P)=R/D(P)2
激光与平面的夹角
见上图:
P
b
P_b
Pb与局部平面的夹角
P
a
c
=
P
a
−
P
c
P_{ac}=P_a-P_c
Pac=Pa−Pc
θ
(
P
b
)
=
c
o
s
−
1
P
a
c
P
b
∣
P
a
c
∣
∣
P
b
∣
\theta(P_b)=cos^{-1}\frac{P_{ac}P_b}{|P_{ac}||P_b|}
θ(Pb)=cos−1∣Pac∣∣Pb∣PacPb
移除不可靠的点 (1)移除视场角边缘点,防止进行特征提取是不可靠(对于MID40:视场角:38.4,剔除
θ
(
P
b
)
>
17
°
\theta(P_b)>17\degree
θ(Pb)>17°) (2)移除具有过大或过小的激光反射强度,(MID
I
(
P
)
≤
7
×
1
0
−
3
,
I
(
P
)
≥
1
×
1
0
−
1
I(P)\leq 7×10^{-3},I(P)\geq 1×10^{-1}
I(P)≤7×10−3,I(P)≥1×10−1) 强度过大:电路失真/饱和,距离失真 强度多小:噪声影响大 (3)剔除入射角在
0
或
π
0或\pi
0或π附近的,见上图点f,在取平均值时,测量值受大值影响较大,不能代表区域的特性。(MID,
θ
(
P
)
≤
6
°
,
θ
(
P
)
≥
175
°
\theta(P)\leq 6\degree,\theta(P)\geq 175\degree
θ(P)≤6°,θ(P)≥175°) (4)隐藏点:比如点
e
e
e,在边特征提取时会导致问题,如何确定隐藏点:
∣
P
e
−
P
d
∣
≥
0.1
∣
P
e
∣
且
∣
P
e
∣
>
∣
P
d
∣
|P_e-P_d|\geq 0.1|P_e| 且|P_e |>|P_d|
∣Pe−Pd∣≥0.1∣Pe∣且∣Pe∣>∣Pd∣
边到边
ξ
k
:
\xi_k:
ξk:当前坐标系边缘点计
ξ
m
:
\xi_m:
ξm:map坐标系边缘点
p
1
,
.
.
,
5
p_{1,..,5}
p1,..,5:每一个
ξ
k
\xi_k
ξk中的点在
ξ
m
\xi_m
ξm中找到其最临近的5个点(PCL kd树最临近搜索,并采用并行加速),假设有个一点
P
l
∈
ξ
k
P_l\in \xi_k
Pl∈ξk,为了找到其在map中的临近点,需要将其映射到map:公式如下:
R
k
,
T
k
R_k,T_k
Rk,Tk:当前帧最后一个点的位姿
P
w
=
R
k
P
l
+
T
k
P_w=R_kP_l+T_k
Pw=RkPl+Tk
使用点到直线距离构建残差方程优化位姿 为了确保
P
w
P_w
Pw相邻的5个点在一条直线上,计算其均值
u
u
u和协防差
∑
\sum
∑,并且对协防差进行矩阵分解,如果最大的的特征值是第二大值的3倍,认为这5个点在一条直线上,之后构建残差方程如下(在P到直线距离)
r
e
2
c
=
∣
P
w
−
P
5
∣
×
∣
P
w
−
P
1
∣
∣
P
5
−
P
1
∣
r_e2c=\frac{|P_w-P_5|×|P_w-P_1|}{|P_5-P_1|}
re2c=∣P5−P1∣∣Pw−P5∣×∣Pw−P1∣ 4 . 面到面的残差 点
P
w
P_w
Pw为平面上的某点,在map上得到与其最临近的5个点,计算方差矩阵
∑
\sum
∑,求解特征值,最小的特征值小于第二个小特征值三倍时,认为存在一个平面,构建点到面的最小距离:
r
p
2
p
=
(
P
w
−
P
1
)
T
(
(
P
3
−
P
5
)
×
(
P
3
−
P
1
)
)
∣
(
P
3
−
P
5
)
×
(
P
3
−
P
1
)
∣
r_{p2p}=\frac{(P_w-P_1)^T((P_3-P_5)×(P_3-P_1))}{|(P_3-P_5)×(P_3-P_1)|}
rp2p=∣(P3−P5)×(P3−P1)∣(Pw−P1)T((P3−P5)×(P3−P1))
帧内运动补偿
线性插值
T
k
,
R
k
:
T_k,R_k:
Tk,Rk:当前帧位姿
T
k
−
1
,
R
k
−
1
T_{k-1},R_{k-1}
Tk−1,Rk−1前一帧位姿 存在如下关系:
R
k
=
R
k
−
1
R
k
−
1
k
,
T
k
=
R
k
−
1
T
k
−
1
k
+
T
k
−
1
R_k=R_{k-1}R_{k-1}^k,T_k=R_{k-1}T_{k-1}^k+T_{k-1}
Rk=Rk−1Rk−1k,Tk=Rk−1Tk−1k+Tk−1 对于
t
∈
[
t
k
−
1
,
t
k
]
t\in[t_{k-1},t_k]
t∈[tk−1,tk],令
s
=
t
−
t
k
−
1
t
k
−
t
k
−
1
s=\frac{t-t_{k-1}}{t_{k}-t_{k-1}}
s=tk−tk−1t−tk−1,t时间的位姿为:
θ
:
标
量
\theta:标量
θ:标量
w
:
单
位
向
量
(
旋
转
向
量
)
w:单位向量(旋转向量)
w:单位向量(旋转向量)
w
^
:
w
的
斜
对
称
矩
阵
(
w
×
)
\hat w:w的斜对称矩阵(w×)
w^:w的斜对称矩阵(w×)
R
k
−
1
t
=
e
w
^
θ
s
,
T
k
−
1
t
=
s
T
k
−
1
k
R^t_{k-1}=e^{\hat w\theta s},T^t_{k-1}=sT^k_{k-1}
Rk−1t=ew^θs,Tk−1t=sTk−1k 根据罗德里德旋转公式可以得到:
R
k
−
1
t
=
I
+
w
^
sin
(
s
θ
)
+
w
^
2
(
1
−
cos
(
s
θ
)
)
R_{k-1}^t=I+\hat w\sin(s\theta)+\hat w^2(1-\cos(s\theta))
Rk−1t=I+w^sin(sθ)+w^2(1−cos(sθ)) 只需要计算cos与sin值就可以得到每一点相对于当前帧的位姿:
P
w
(
t
)
=
R
t
P
t
+
T
t
R
t
=
R
k
−
1
R
k
−
1
t
,
T
t
=
R
k
−
1
T
k
−
1
T
+
T
k
−
1
P_w(t)=R_tP_t+T_t\\ R_t=R_{k-1}R_{k-1}^t,T_t=R_{k-1}T^T_{k-1}+T_{k-1}
Pw(t)=RtPt+TtRt=Rk−1Rk−1t,Tt=Rk−1Tk−1T+Tk−1
迭代循环 (1)
P
w
=
R
k
P
l
+
T
k
P_w=R_kP_l+T_k
Pw=RkPl+Tk (2)
r
e
2
c
=
∣
P
w
−
P
5
∣
×
∣
P
w
−
P
1
∣
∣
P
5
−
P
1
∣
r_e2c=\frac{|P_w-P_5|×|P_w-P_1|}{|P_5-P_1|}
re2c=∣P5−P1∣∣Pw−P5∣×∣Pw−P1∣ (3)
r
p
2
p
=
(
P
w
−
P
1
)
T
(
(
P
3
−
P
5
)
×
(
P
3
−
P
1
)
)
∣
(
P
3
−
P
5
)
×
(
P
3
−
P
1
)
∣
r_{p2p}=\frac{(P_w-P_1)^T((P_3-P_5)×(P_3-P_1))}{|(P_3-P_5)×(P_3-P_1)|}
rp2p=∣(P3−P5)×(P3−P1)∣(Pw−P1)T((P3−P5)×(P3−P1))
#输入 当前帧的边缘点集ξk和平面点集Pk,
# 地图点的边缘点集ξm和平面点集Pm
# 雷达前一帧的位姿Rk-1,Tk-1
#输出 当前雷达的位姿R_k,T_k
开始:
for 位姿迭代不收敛 dofor 对于点Pl 属于ξk
计算残差(1)
找到其ξm上对应的5个点P1-P5
if(P1-P5) 在一条直线上
计算直线之间残差(2)
for 属于Pk的点Pl
计算残差(1)
在Pm上找到5个最临近点P1-P5
if(P1-P5) 在一个平面上
计算面与面之间的距离(3)
进行位姿优化迭代2次
重新计算残差re2c和rp2p,移除其中大于残差20%的值
for 迭代最大次数 doif 非线性迭代不收点 then
break
end