前言
机器人在二维或三维空间中的平移和旋转可以通过旋转矩阵R和平移向量t进行表示,对机器人进行定位或者状态估计就是求解R和t。定位或状态估计时,经常需要对以机器人位姿(R和t)为自变量的函数f(R,t)进行优化,不可避免地需要对R和t进行求导:
f
(
x
)
˙
=
l
i
m
Δ
x
→
0
f
(
x
+
Δ
x
)
−
f
(
x
)
Δ
x
\dot{f(x)}=\underset{\Delta x\rightarrow0}{lim}\frac{f(x+\Delta x)-f(x)}{\Delta x}
f(x)˙=Δx→0limΔxf(x+Δx)−f(x)
t是向量,满足向量的数乘和加法,但是R是矩阵,无法直接相加相减,为了解决旋转矩阵求导的问题,需要借助李群和李代数这个工具。
1.群(Group)
a group is a set equipped with a binary operation that combines any two elements to form a third element in such a way that three conditions called group axioms are satisfied, namely associativity, identity and invertibility. 维基百科里面的解释,简而言之,群就是集合加上二元运算的一种代数结构。百度百科中,群满足四个性质:封闭性、结合律、幺元和逆元。
所有的实数和加法构成了一个“加群”,但是集合不只是数的集合,二元运算也不仅限于加减乘除,根据研究的需要可以任意定义,只要满足群的四个性质,都构成了群。
旋转矩阵与乘法构成了旋转矩阵群,SO(2),SO(3)
变换矩阵与乘法构成了变换矩阵群,SE(2),SE(3)
2.流形(Manifold)
In mathematics, a manifold is a topological space that locally resembles Euclidean space near each point. 维基百科中,流形是由局部具有欧几里得性质的点构成的拓扑空间。一维流形是线或圆,但不是“8”字形;二维流形是面,例如平面、球面或环面。
3.李群(Lie Group)与李代数(Lie Algebra)
In mathematics, a Lie group is a group that is also a differentiable manifold. 维基百科中,李群是一个具备可微流形性质的群。李代数代表了李群单位元附近的正切空间,是线性的向量空间。通过建立李群与李代数的联系,将非线性连续流形转移到线性空间中,是求解问题的关键。
1.李群与李代数的关系
(1)从图上直观描述:
李群为蓝色球面,为李群的单位元(Identity),通过指数映射,所有通过单位元的直线都会产生一条围绕流形的路径。同理群中的每一个元素都会通过对数映射到李代数向量空间。以至于李群中所有的弯曲的、非线性的运算都能在李代数中进行等价,转为线性的运算。这也是为什么在进行旋转矩阵求导的时候引入李群和李代数的原因。
(2)由旋转矩阵推导李代数
旋转矩阵满足,当旋转随时间变化时,
R
(
t
)
R
(
t
)
T
=
I
\boldsymbol{R}(t) \boldsymbol{R}(t)^{T}=\boldsymbol{I}
R(t)R(t)T=I
两侧对时间求导:
R
˙
(
t
)
R
(
t
)
T
+
R
(
t
)
R
˙
(
t
)
T
=
0
\dot{\boldsymbol{R}}(t) \boldsymbol{R}(t)^{T}+\boldsymbol{R}(t) \dot{\boldsymbol{R}}(t)^{T}=0
R˙(t)R(t)T+R(t)R˙(t)T=0
R
(
t
)
˙
R
(
t
)
T
=
−
(
R
˙
(
t
)
R
(
t
)
T
)
T
\dot{\boldsymbol{R}(t)} \boldsymbol{R}(t)^{T}=-\left(\dot{\boldsymbol{R}}(t) \boldsymbol{\boldsymbol { R } ( t ) ^ { T }} \right)^{T}
R(t)˙R(t)T=−(R˙(t)R(t)T)T
可以发现,
R
(
t
)
˙
R
(
t
)
T
\dot{\boldsymbol{R}(t)} \boldsymbol{R}(t)^{T}
R(t)˙R(t)T是一个反对称矩阵,记为:
R
˙
(
t
)
R
(
t
)
T
=
ϕ
(
t
)
∧
\dot{\boldsymbol{R}}(t) \boldsymbol{R}(t)^{T}=\phi(t)^{\wedge}
R˙(t)R(t)T=ϕ(t)∧
两边右乘
R
(
t
)
R(t)
R(t):
R
˙
(
t
)
=
ϕ
(
t
)
∧
R
(
t
)
\dot{\boldsymbol{R}}(t)=\phi(t)^{\wedge} \boldsymbol{R}(t)
R˙(t)=ϕ(t)∧R(t)
反对称符号:
a
∧
=
A
=
[
0
−
a
3
a
2
a
3
0
−
a
1
−
a
2
a
1
0
]
,
A
∨
=
a
\boldsymbol{a}^{\wedge}=\boldsymbol{A}=\left[\begin{array}{ccc} 0 & -a_{3} & a_{2} \\ a_{3} & 0 & -a_{1} \\ -a_{2} & a_{1} & 0 \end{array}\right], \quad \boldsymbol{A}^{\vee}=\boldsymbol{a}
a∧=A=⎣⎡0a3−a2−a30a1a2−a10⎦⎤,A∨=a
单位元(
t
0
=
0
,
R
(
0
)
=
I
t_{0}=0, R(0)=I
t0=0,R(0)=I)附近进行泰勒展开:
R
(
t
)
≈
R
(
t
0
)
+
R
˙
(
t
0
)
(
t
−
t
0
)
=
I
+
ϕ
(
t
0
)
∧
(
t
)
.
\begin{aligned} \boldsymbol{R}(t) & \approx \boldsymbol{R}\left(t_{0}\right)+\dot{\boldsymbol{R}}\left(t_{0}\right)\left(t-t_{0}\right) \\ &=\boldsymbol{I}+{\boldsymbol{\phi}\left(t_{0}\right)^{\wedge}}(t) . \end{aligned}
R(t)≈R(t0)+R˙(t0)(t−t0)=I+ϕ(t0)∧(t).
ϕ
\phi
ϕ具有一阶导数性质,位于李群的正切空间(tangent space)中。
在
t
0
t_0
t0附近,假设
ϕ
\phi
ϕ不变,则有微分方程:
R
˙
(
t
)
=
ϕ
(
t
0
)
∧
R
(
t
)
=
ϕ
0
∧
R
(
t
)
\dot{\boldsymbol{R}}(t)=\phi\left(t_{0}\right)^{\wedge} \boldsymbol{R}(t)=\phi_{0}^{\wedge} \boldsymbol{R}(t)
R˙(t)=ϕ(t0)∧R(t)=ϕ0∧R(t)
根据初始条件
t
0
=
0
,
R
(
0
)
=
I
t_{0}=0, R(0)=I
t0=0,R(0)=I,求解微分方程:
R
(
t
)
=
exp
(
ϕ
0
∧
t
)
\boldsymbol{R}(t)=\exp \left(\phi_{0}^{\wedge} t\right)
R(t)=exp(ϕ0∧t)
总结:通过指数映射(Exponential map)将李代数映射到了李群中。
(3)李代数与李括号
已知李代数:
s
o
(
3
)
=
{
ϕ
∈
R
3
,
Φ
=
ϕ
∧
∈
R
3
×
3
}
\mathfrak{s o}(3)=\left\{\phi \in \mathbb{R}^{3}, \Phi=\phi^{\wedge} \in \mathbb{R}^{3 \times 3}\right\}
so(3)={ϕ∈R3,Φ=ϕ∧∈R3×3}
其中:
Φ
=
ϕ
∧
=
[
0
−
ϕ
3
ϕ
2
ϕ
3
0
−
ϕ
1
−
ϕ
2
ϕ
1
0
]
∈
R
3
×
3
\Phi=\phi^{\wedge}=\left[\begin{array}{ccc} 0 & -\phi_{3} & \phi_{2} \\ \phi_{3} & 0 & -\phi_{1} \\ -\phi_{2} & \phi_{1} & 0 \end{array}\right] \in \mathbb{R}^{3 \times 3}
Φ=ϕ∧=⎣⎡0ϕ3−ϕ2−ϕ30ϕ1ϕ2−ϕ10⎦⎤∈R3×3
李括号运算:
[
ϕ
1
,
ϕ
2
]
=
(
Φ
1
Φ
2
−
Φ
2
Φ
1
)
∨
\left[\phi_{1}, \phi_{2}\right]=\left(\Phi_{1} \Phi_{2}-\Phi_{2} \Phi_{1}\right)^{\vee}
[ϕ1,ϕ2]=(Φ1Φ2−Φ2Φ1)∨
2.指数映射和对数映射
李群既是一个群也是一个流形,既满足群的四个性质也满足流形的可微性质,还具有指数映射和对数映射的性质。
(1))指数映射的求解
前面已经求得,但是由于是矩阵,如何对矩阵指数运算?
还是泰勒展开。。。
exp
(
ϕ
∧
)
=
∑
n
=
0
∞
1
n
!
(
ϕ
∧
)
n
\exp \left(\phi^{\wedge}\right)=\sum_{n=0}^{\infty} \frac{1}{n !}\left({\left.\phi^{\wedge}\right)}^{n}\right.
exp(ϕ∧)=n=0∑∞n!1(ϕ∧)n
单位向量有如下性质:
a
∧
a
∧
=
a
a
T
−
I
,
a
∧
a
∧
a
∧
=
−
a
∧
\begin{array}{l} \boldsymbol{a}^{\wedge} {\boldsymbol{a}^{\wedge}=\boldsymbol{a a}^{T}-\boldsymbol{I}}, \\ \boldsymbol{a}^{\wedge} \boldsymbol{a}^{\wedge} \boldsymbol{a}^{\wedge}=-\boldsymbol{a}^{\wedge} \end{array}
a∧a∧=aaT−I,a∧a∧a∧=−a∧
令
ϕ
∧
=
θ
a
∧
\phi^{\wedge}=\theta{a}^{\wedge}
ϕ∧=θa∧,得到罗德里格斯公式:
exp
(
θ
a
∧
)
=
cos
θ
I
+
(
1
−
cos
θ
)
a
a
T
+
sin
θ
a
∧
\exp \left(\theta \boldsymbol{a}^{\wedge}\right)=\cos \theta \boldsymbol{I}+(1-\cos \theta) \boldsymbol{a} \boldsymbol{a}^{T}+\sin \theta \boldsymbol{a}^{\wedge}
exp(θa∧)=cosθI+(1−cosθ)aaT+sinθa∧
指数映射求解完成。
(2)对数映射的求解
给定旋转矩阵R,如何求
ϕ
\phi
ϕ呢?
ϕ
=
ln
(
R
)
∨
=
(
∑
n
=
0
∞
(
−
1
)
n
n
+
1
(
R
−
I
)
n
+
1
)
∨
\phi=\ln (\boldsymbol{R})^{\vee}=\left(\sum_{n=0}^{\infty} \frac{(-1)^{n}}{n+1}(\boldsymbol{R}-\boldsymbol{I})^{n+1}\right)^{\vee}
ϕ=ln(R)∨=(n=0∑∞n+1(−1)n(R−I)n+1)∨
这样求解比较复杂,一般按照下面公式求解:
θ
=
arccos
(
tr
(
R
)
−
1
2
)
\theta=\arccos \left(\frac{\operatorname{tr}(\boldsymbol{R})-1}{2}\right)
θ=arccos(2tr(R)−1)
对数映射求解完成。
3.总结
参考资料:
1.《视觉SLAM十四讲》
2.《A micro Lie theory for state estimation in robotics》