一、数学基础
对于两个非零向量:
a = ( x 1 , y 1 , z 1 ) T , b = ( x 2 , y 2 , z 2 ) T a = ({x_1},{y_1},{z_1})^\mathsf{T},b = ({x_2},{y_2},{z_2})^\mathsf{T}\\ a=(x1,y1,z1)T,b=(x2,y2,z2)T
则向量的内积:
⟨
b
,
a
⟩
=
a
T
b
=
x
1
x
2
+
y
1
y
2
+
z
1
z
2
\left\langle {b,a} \right\rangle = a^\mathsf{T} b = {x_1}{x_2} + {y_1}{y_2} + {z_1}{z_2}\\
⟨b,a⟩=aTb=x1x2+y1y2+z1z2
其结果为一个标量;
向量的外积:
a
×
b
=
∣
i
j
k
x
1
y
1
z
1
x
2
y
2
z
2
∣
=
(
y
1
z
2
−
y
2
z
1
,
z
1
x
2
−
z
2
x
1
,
x
1
y
2
−
x
2
y
1
)
T
=
[
0
−
z
1
y
1
z
1
0
−
x
1
−
y
1
x
1
0
]
b
\begin{aligned} a \times b &= \left| {\begin{matrix} i&j&k\\ {{x_1}}&{{y_1}}&{{z_1}}\\ {{x_2}}&{{y_2}}&{{z_2}} \end{matrix}} \right| \\ &= ({y_1}{z_2} - {y_2}{z_1},{z_1}{x_2} - {z_2}{x_1},{x_1}{y_2} - {x_2}{y_1})^\mathsf{T}\\ &= \left[ {\begin{matrix} 0&{ - {z_1}}&{{y_1}}\\ {{z_1}}&0&{ - {x_1}}\\ { - {y_1}}&{{x_1}}&0 \end{matrix}} \right] b \end{aligned}
a×b=∣∣∣∣∣∣ix1x2jy1y2kz1z2∣∣∣∣∣∣=(y1z2−y2z1,z1x2−z2x1,x1y2−x2y1)T=⎣⎡0z1−y1−z10x1y1−x10⎦⎤b
向量的外积依旧是个向量,其方向为用右手从a转向b,其模长为:
∣
a
∣
∣
b
∣
sin
⟨
a
,
b
⟩
\left| a \right|\left| b \right|\sin \left\langle {a,b} \right\rangle
∣a∣∣b∣sin⟨a,b⟩
令矩阵:
a
∧
=
[
0
−
z
1
y
1
z
1
0
−
x
1
−
y
1
x
1
0
]
a ^\wedge =\left[ {\begin{matrix} 0&{ - {z_1}}&{{y_1}}\\ {{z_1}}&0&{ - {x_1}}\\ { - {y_1}}&{{x_1}}&0 \end{matrix}} \right]
a∧=⎣⎡0z1−y1−z10x1y1−x10⎦⎤
我们称其为a向量的反对称矩阵。
二、旋转矩阵求导
三维的旋转矩阵R构成了一种特殊的正交群SO(3),变换矩阵T则构成了SE(3):
S
O
(
3
)
=
{
R
∈
R
3
×
3
∣
R
R
T
=
I
,
det
(
R
)
=
1
}
S
E
(
3
)
=
{
T
=
[
R
t
0
T
1
]
∈
R
4
×
4
∣
R
∈
R
3
×
3
,
t
∈
R
3
}
\begin{aligned} SO(3) &= \{ R \in {\mathbb{R}^{3 \times 3}}|R{R^T} = I,\det (R) = 1\} \\ SE(3) &= \{ T = \left[ {\begin{matrix} R&t \\ {{0^T}}&1 \end{matrix}} \right] \in {\mathbb{R}^{4 \times 4}}|R \in {\mathbb{R}^{3 \times 3}},t \in {\mathbb{R}^3}\} \end{aligned}
SO(3)SE(3)={R∈R3×3∣RRT=I,det(R)=1}={T=[R0Tt1]∈R4×4∣R∈R3×3,t∈R3}
需要注意的是,它们对加法不封闭:
R
1
+
R
2
∉
S
O
(
3
)
,
T
1
+
T
2
∉
S
E
(
3
)
{R_1} + {R_2} \notin SO(3),{T_1} + {T_2} \notin SE(3)
R1+R2∈/SO(3),T1+T2∈/SE(3)
我们首先让旋转矩阵对时间t求导(注意这里是对时间t求导,和后面的左扰动求导参数不同)
因为:
R
R
T
=
I
RR^T=I
RRT=I
若旋转矩阵随时间变化,则:
R
(
t
)
R
(
t
)
T
=
I
R(t)R(t)^T=I
R(t)R(t)T=I
我们设初始时刻姿态为P0,t时刻姿态为Pt,则:
P
t
=
R
(
t
)
P
0
{P_t} = R(t){P_0}
Pt=R(t)P0
两边同时求导得:
d
P
t
d
t
=
d
R
(
t
)
d
t
P
0
\frac{\mathrm{d} P_t }{\mathrm{d} t} = \frac{\mathrm{d} R(t) }{\mathrm{d} t} P_0
dtdPt=dtdR(t)P0
由理论力学的知识得:
V
(
t
)
=
ω
×
P
(
t
)
=
ω
×
R
(
t
)
⋅
P
0
=
ω
∧
R
(
t
)
⋅
P
0
V(t) = \omega \times P(t)=\omega \times R(t)\cdot P_0=\omega^\wedge R(t)\cdot P_0
V(t)=ω×P(t)=ω×R(t)⋅P0=ω∧R(t)⋅P0
位置对t求导即速度:
d
P
t
d
t
=
V
(
t
)
\frac{\mathrm{d} P_t }{\mathrm{d} t} = V(t)
dtdPt=V(t)
所以由上式得
ω
∧
R
(
t
)
⋅
P
0
=
d
R
(
t
)
d
t
P
0
\omega^\wedge R(t)\cdot P_0=\frac{\mathrm{d} R(t) }{\mathrm{d} t} P_0
ω∧R(t)⋅P0=dtdR(t)P0
所以有:
d
R
(
t
)
d
t
=
ω
∧
R
(
t
)
⋅
\frac{\mathrm{d} R(t) }{\mathrm{d} t}= \omega^\wedge R(t)\cdot
dtdR(t)=ω∧R(t)⋅
又假设t0=0时的初始条件为:
R
(
t
0
)
=
I
R(t_0)=I
R(t0)=I
所以由矩阵论的知识可得:
R
(
t
)
=
e
x
p
(
t
⋅
ω
∧
)
R(t) = exp(t\cdot \omega^\wedge)
R(t)=exp(t⋅ω∧)
又因为:
ϕ
=
ω
⋅
t
\phi = \omega\cdot t
ϕ=ω⋅t
所以最后:
R
(
t
)
=
e
x
p
(
ϕ
∧
)
R(t)=exp(\phi^\wedge)
R(t)=exp(ϕ∧)
由因为此式对任意时刻都适用,即:
R
=
e
x
p
(
ϕ
∧
)
R=exp(\phi^\wedge)
R=exp(ϕ∧)
三、李代数求导
3.1 对李代数求导的意义:
假设一个点的世界坐标p已知,又已知在一个位姿下T(位姿T未知)观测到该点的坐标为z,求出最优的T使得||z-Tp||
最小,这样的T就是最优估计;
或者也可以这么解释,如果我们得到一组点的k
时刻观测数据Z ,上一个时刻k-1
对同一组点观测的数据为P(k-1时刻的位姿与世界坐标重合),此时我们估计它从k-1
到k
的变化矩阵T,这时候存在着一个误差:
e
=
z
−
T
p
e = z-Tp
e=z−Tp
这时候我们需要让这个误差最小,才能让我们估计的T成为最优估计;
所以可以转化为,对于目标函数J(T),使得J(T)最小:
min
T
J
(
T
)
=
∑
i
=
1
N
∥
z
i
−
T
p
i
∥
2
2
\mathop {\min }\limits_T J(T) = \sum\limits_{i = 1}^N {\left\| {{z_i} - T{p_i}} \right\|_2^2}
TminJ(T)=i=1∑N∥zi−Tpi∥22
我们需要对Tp求导,通过导数来判断极小值点,求出最优解;
但由于李群的不可加性,所以只能通过李群对应的李代数来进行求导;例如:
∂
(
T
p
)
∂
T
=
lim
Δ
T
→
0
(
T
+
Δ
T
)
p
−
T
p
Δ
T
\frac{{\partial (Tp)}}{{\partial T }} =\mathop {\lim }\limits_{\Delta T \to 0} \frac{{(T+\Delta T)p - Tp}}{\Delta T }
∂T∂(Tp)=ΔT→0limΔT(T+ΔT)p−Tp
这个式子是不正确的,因为T+△T
不再是SE(3)群,所以要考虑利用其李代数求导;
考虑旋转,平移六个自由度,六个参数:
T
=
T
(
ϕ
,
t
)
,
ϕ
∈
R
3
,
t
∈
R
3
T=T(\phi,t),\phi \in \mathbb{R}^3,t \in \mathbb{R}^3
T=T(ϕ,t),ϕ∈R3,t∈R3
这个问题就转变为了对下面的式子:
min
ϕ
,
t
J
(
ϕ
,
t
)
=
∑
i
=
1
N
∥
z
i
−
T
(
ϕ
,
t
)
p
i
∥
2
2
\mathop {\min }\limits_{\phi,t} J(\phi,t)=\sum\limits_{i = 1}^N {\left\| {{z_i} - T(\phi,t){p_i}} \right\|_2^2}
ϕ,tminJ(ϕ,t)=i=1∑N∥zi−T(ϕ,t)pi∥22
由定义的李代数:
s
e
(
3
)
=
{
ξ
=
[
ρ
ϕ
]
∈
R
6
∣
ρ
∈
R
3
,
ϕ
∈
s
o
(
3
)
,
ξ
∧
=
[
ϕ
∧
ρ
0
T
0
]
}
se(3) = \{ \xi = \left[ {\begin{matrix} \rho \\ \phi \end{matrix}} \right] \in {\mathbb{R}^6}|\rho \in {\mathbb{R}^3},\phi \in so(3),{\xi ^ \wedge } = \left[ {\begin{matrix} {{\phi ^ \wedge }}&\rho \\ {{0^T}}&0 \end{matrix}} \right]\}
se(3)={ξ=[ρϕ]∈R6∣ρ∈R3,ϕ∈so(3),ξ∧=[ϕ∧0Tρ0]}
最后变为:
min
ϕ
,
ρ
J
(
ϕ
,
ρ
)
=
∑
i
=
1
N
∥
z
i
−
exp
(
ϕ
∧
)
p
i
∥
2
2
\mathop {\min }\limits_{\phi,\rho} J(\phi,\rho)=\sum\limits_{i = 1}^N {\left\| {{z_i} - \exp ({\phi ^ \wedge) }{p_i}} \right\|_2^2}
ϕ,ρminJ(ϕ,ρ)=i=1∑N∥zi−exp(ϕ∧)pi∥22
3.2 在李群SO(3)上的扰动模型:
对旋转矩阵R进行扰动△R,对应在李代数上为δψ,利用李代数求扰动模型:
∂
(
R
p
)
∂
φ
=
lim
φ
→
0
exp
(
φ
∧
)
exp
(
ϕ
∧
)
p
−
exp
(
ϕ
∧
)
p
φ
=
−
(
R
p
)
∧
\begin{aligned} \frac{{\partial (Rp)}}{{\partial \varphi }} &= \mathop {\lim }\limits_{\varphi \to 0} \frac{{\exp ({\varphi ^ \wedge })\exp ({\phi ^ \wedge })p - \exp ({\phi ^ \wedge })p}}{\varphi }\\ &= - {(Rp)^ \wedge } \end{aligned}
∂φ∂(Rp)=φ→0limφexp(φ∧)exp(ϕ∧)p−exp(ϕ∧)p=−(Rp)∧
不再叙述推导的过程;
3.3 在李群SE(3)上的扰动模型:
首先说明对应的李代数se(3):
s
e
(
3
)
=
{
ξ
=
[
ρ
ϕ
]
∈
R
6
∣
ρ
∈
R
3
,
ϕ
∈
s
o
(
3
)
,
ξ
∧
=
[
ϕ
∧
ρ
0
T
0
]
}
se(3) = \{ \xi = \left[ {\begin{matrix} \rho \\ \phi \end{matrix}} \right] \in {\mathbb{R}^6}|\rho \in {\mathbb{R}^3},\phi \in so(3),{\xi ^ \wedge } = \left[ {\begin{matrix} {{\phi ^ \wedge }}&\rho \\ {{0^T}}&0 \end{matrix}} \right]\}
se(3)={ξ=[ρϕ]∈R6∣ρ∈R3,ϕ∈so(3),ξ∧=[ϕ∧0Tρ0]}
其中满足:
e
x
p
(
ξ
∧
)
=
T
=
[
R
J
ρ
0
T
1
]
exp(\xi ^ \wedge)=T=\left[ {\begin{matrix} R&J\rho \\ {{0^T}}&1 \end{matrix}} \right]
exp(ξ∧)=T=[R0TJρ1]
所以:
∂
(
T
p
)
∂
δ
ξ
=
∂
(
exp
(
ϕ
∧
)
)
∂
δ
ξ
=
lim
δ
ξ
→
0
exp
(
δ
ξ
∧
)
exp
(
ξ
∧
)
p
−
exp
(
ξ
∧
)
p
δ
ξ
=
[
I
3
×
3
−
(
R
p
+
t
)
∧
0
1
×
3
T
0
1
×
3
T
]
\begin{aligned} \frac{{\partial (Tp)}}{{\partial \delta \xi }} &=\frac{{\partial (\exp ({\phi ^ \wedge) })}}{{\partial \delta \xi }}\\ &=\mathop {\lim }\limits_{\delta \xi \to 0} \frac{{\exp ({\delta \xi ^ \wedge })\exp ({\xi ^ \wedge })p - \exp ({\xi ^ \wedge })p}}{\delta \xi }\\ &= \left[ {\begin{matrix} {{I_{3 \times 3}}}&{ - {{(Rp + t)}^ \wedge }} \\ {0_{1 \times 3}^T}&{0_{1 \times 3}^T} \end{matrix}} \right] \end{aligned}
∂δξ∂(Tp)=∂δξ∂(exp(ϕ∧))=δξ→0limδξexp(δξ∧)exp(ξ∧)p−exp(ξ∧)p=[I3×301×3T−(Rp+t)∧01×3T]
总结
李群李代数的左扰动模型是非常有用的,尤其是在估计位姿的时候。
对于左扰动,我们定义的变换矩阵为:
T
k
,
k
−
1
T_{k,k-1}
Tk,k−1
(这个矩阵的物理意义为:上一个观测位姿下观测点的坐标左乘变换矩阵T可以得到下一个观测位姿下的观测点坐标)
P
k
=
T
k
,
k
−
1
⋅
P
k
−
1
P_k =T_{k,k-1}\cdot P_{k-1}
Pk=Tk,k−1⋅Pk−1
左扰动定义为:
δ
T
=
δ
T
k
,
k
−
1
\delta T=\delta T_{k,k-1}
δT=δTk,k−1
所以有:
T
k
,
k
−
1
=
δ
T
k
,
k
−
1
⋅
T
k
−
1
T_{k,k-1} = \delta T_{k,k-1} \cdot T_{k-1}
Tk,k−1=δTk,k−1⋅Tk−1
同理对于右扰动模型:
T
k
−
1
⋅
δ
T
k
−
1
,
k
=
T
k
−
1
,
k
T_{k-1} \cdot \delta T_{k-1,k} =T_{k-1,k}\\
Tk−1⋅δTk−1,k=Tk−1,k