惯性导航解算
一、惯性导航解算的目的
从IMU原始的角速度(陀螺仪采集)和加速度(加速度计采集)数据得到它的导航结果(位置、速度、姿态)。
1. 姿态描述
在导航定位领域,描述一个物体的姿态,常用的描述有欧拉角、旋转矩阵、四元数,这三个概念的理解难度逐渐递增。另外,还有一种表示方式,是旋转向量,它主要作为运算过程中的一个工具,而一般不用来对外作为姿态的描述输出
1.1 旋转矩阵
1) 内积
a . b = a T b = ∑ i = 1 3 = ∣ a ∣ ∣ b ∣ cos < a , b > a.b = a^Tb = \sum^3_{i = 1}=|a||b|\cos<a,b> a.b=aTb=i=1∑3=∣a∣∣b∣cos<a,b>
内积可以描述向量间的投影关系。
2) 外积
a × b = [ i j k a 1 a 2 a 3 b 1 b 2 b 3 ] = [ a 2 b 3 − a 3 b 2 a 2 b 1 − a 1 b 3 a 1 b 2 − a 2 b 1 ] = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] b = a ∧ b a\times{b}=\left[\begin{array}{ccc} i & j & k \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \end{array}\right]=\left[\begin{array}{c} a_2b_3-a_3b_2 \\ a_2b_1-a_1b_3 \\ a_1b_2-a_2b_1 \end{array}\right]=\left[\begin{array}{ccc} 0 & -a_3 & a_2 \\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 \end{array}\right]b=a^{\wedge}b a×b=⎣ ⎡ia1b1ja2b2ka3b3⎦ ⎤=⎣ ⎡a2b3−a3b2a2b1−a1b3a1b2−a2b1⎦ ⎤=⎣ ⎡0a3−a2−a30a1a2−a10⎦ ⎤b=a∧b
外积的方向垂直于这两个向量,大小为 ∣ a ∣ ∣ b ∣ s i n ⟨ a , b ⟩ |a| |b| sin ⟨a, b⟩ ∣a∣∣b∣sin⟨a,b⟩,是两个向量张成的四边形的有向面积。对于外积,我们引入了 ∧ ^\wedge ∧符号,把 a 写成一个矩阵。事实上是一个反对称矩阵,你可以将 ∧ ^{\wedge} ∧记成一个反对称符号。这样就把外积 a × b a × b a×b,写成了矩阵与向量的乘法 a ∧ b a^{\wedge}b a∧b,把它变成了线性运算。
3) 旋转矩阵定义
旋转矩阵是一个非常常见的姿态描述和计算手段了,因为它可以很方便地对坐标系中的矢量进行计算。
假设旋转前,载体系(b系)的单位正交基为 $\left(\mathbf{e}{1}, \mathbf{e}{2}, \mathbf{e}_{3}\right) $,旋转后对应的单位正交基为
(
e
1
′
,
e
2
′
,
e
3
′
)
\left(\mathbf{e}_{1}^{\prime}, \mathbf{e}_{2}^{\prime}, \mathbf{e}_{3}^{\prime}\right)
(e1′,e2′,e3′),在世界坐标系(w系,不随载体的旋转而旋转)下有向量
a
\mathbf{a}
a ,它在旋转前后两个坐标系中的坐标分别为
[
a
1
,
a
2
,
a
3
]
T
\left[a_{1}, a_{2}, a_{3}\right]^{\mathrm{T}}
[a1,a2,a3]T和
[
a
1
′
,
a
2
′
,
a
3
′
]
T
\left[a_{1}^{\prime}, a_{2}^{\prime}, a_{3}^{\prime}\right]^{\mathrm{T}}
[a1′,a2′,a3′]T ,那么有
[
e
1
,
e
2
,
e
3
]
[
a
1
a
2
a
3
]
=
[
e
1
′
,
e
2
′
,
e
3
′
]
[
a
1
′
a
2
′
a
3
′
]
\left[\mathbf{e}_{1}, \mathbf{e}_{2}, \mathbf{e}_{3}\right]\left[\begin{array}{l} a_{1} \\ a_{2} \\ a_{3} \end{array}\right]=\left[\mathbf{e}_{1}^{\prime}, \mathbf{e}_{2}^{\prime}, \mathbf{e}_{3}^{\prime}\right]\left[\begin{array}{c} a_{1}^{\prime} \\ a_{2}^{\prime} \\ a_{3}^{\prime} \end{array}\right]\\
[e1,e2,e3]⎣
⎡a1a2a3⎦
⎤=[e1′,e2′,e3′]⎣
⎡a1′a2′a3′⎦
⎤
由此可以得到
a
=
[
a
1
a
2
a
3
]
=
[
e
1
T
e
1
′
e
1
T
e
2
′
e
1
T
e
3
′
e
2
T
e
1
′
e
2
T
e
2
′
e
2
T
e
3
′
e
3
T
e
1
′
e
3
T
e
2
′
e
3
T
e
3
′
]
[
a
1
′
a
2
′
a
3
′
]
=
def
R
a
′
\boldsymbol{a}=\left[\begin{array}{l} a_{1} \\ a_{2} \\ a_{3} \end{array}\right]=\left[\begin{array}{lll} \mathbf{e}_{1}^{T} \mathbf{e}_{1}^{\prime} & \mathbf{e}_{1}^{T} \mathbf{e}_{2}^{\prime} & \mathbf{e}_{1}^{T} \mathbf{e}_{3}^{\prime} \\ \mathbf{e}_{2}^{T} \mathbf{e}_{1}^{\prime} & \mathbf{e}_{2}^{T} \mathbf{e}_{2}^{\prime} & \mathbf{e}_{2}^{T} \mathbf{e}_{3}^{\prime} \\ \mathbf{e}_{3}^{T} \mathbf{e}_{1}^{\prime} & \mathbf{e}_{3}^{T} \mathbf{e}_{2}^{\prime} & \mathbf{e}_{3}^{T} \mathbf{e}_{3}^{\prime} \end{array}\right]\left[\begin{array}{l} a_{1}^{\prime} \\ a_{2}^{\prime} \\ a_{3}^{\prime} \end{array}\right] \stackrel{\text { def }}{=} \boldsymbol{R a}^{\prime}\\
a=⎣
⎡a1a2a3⎦
⎤=⎣
⎡e1Te1′e2Te1′e3Te1′e1Te2′e2Te2′e3Te2′e1Te3′e2Te3′e3Te3′⎦
⎤⎣
⎡a1′a2′a3′⎦
⎤= def Ra′
其中
R
\mathbf{R}
R 就是旋转矩阵,带上坐标系下标,可以写为
R
w
b
\mathbf{R}_{wb}
Rwb,表示是b系到w系的旋转矩阵。
4) 旋转矩阵性质
旋转矩阵的主要特性是单位正交矩阵,即
R
−
1
=
R
T
\mathbf{R}^{-1} = \mathbf{R}^T\\
R−1=RT
5) 旋转矩阵的微分方程
假设世界坐标系(w系)中有一个固定不动的矢量
r
w
\boldsymbol{r}^{w}
rw ,它在载体坐标系(b系)下的表示为
r
b
\boldsymbol{r}^{b}
rb ,则有
r
w
=
R
w
b
r
b
\boldsymbol{r}^{w}=\boldsymbol{R}_{w b} \boldsymbol{r}^{b}\\
rw=Rwbrb
两边同时微分,得到
r
˙
w
=
R
w
b
r
˙
b
+
R
˙
w
b
r
b
\dot{\boldsymbol{r}}^{w}=\boldsymbol{R}_{w b} \dot{\boldsymbol{r}}^{b}+\dot{\boldsymbol{R}}_{w b} \boldsymbol{r}^{b}\\
r˙w=Rwbr˙b+R˙wbrb
由于
r
˙
w
=
0
\dot{\boldsymbol{r}}^{w}=\mathbf{0}
r˙w=0(固定矢量求导为零,
r
˙
b
=
−
ω
w
b
b
×
r
b
\dot{\boldsymbol{r}}^{b}=-\boldsymbol{\omega}_{w b}^{b} \times \boldsymbol{r}^{b}
r˙b=−ωwbb×rb (其中
ω
w
b
b
\boldsymbol{\omega}_{w b}^{b}
ωwbb 代表载体旋转角速度在b系下的表示,实际使用时,指的就是陀螺仪的角速度输出,且暂不考虑误差),因此有
0
=
R
w
b
(
−
ω
w
b
b
×
r
b
)
+
R
˙
w
b
r
b
\mathbf{0}=\boldsymbol{R}_{w b}\left(-\boldsymbol{\omega}_{w b}^{b} \times \boldsymbol{r}^{b}\right)+\dot{\boldsymbol{R}}_{w b} \boldsymbol{r}^{b}\\
0=Rwb(−ωwbb×rb)+R˙wbrb
移项可得
R
w
b
(
ω
w
b
b
×
r
b
)
=
R
˙
w
b
r
b
\boldsymbol{R}_{w b}\left(\boldsymbol{\omega}_{w b}^{b} \times \boldsymbol{r}^{b}\right)=\dot{\boldsymbol{R}}_{w b} \boldsymbol{r}^{b}\\
Rwb(ωwbb×rb)=R˙wbrb
即
R
w
b
(
ω
w
b
b
×
r
b
)
=
R
˙
w
b
r
b
\boldsymbol{R}_{w b}\left(\boldsymbol{\omega}_{w b}^{b} \times \boldsymbol{r}^{b}\right)=\dot{\boldsymbol{R}}_{w b} \boldsymbol{r}^{b}\\
Rwb(ωwbb×rb)=R˙wbrb
因此有
R
˙
w
b
=
R
w
b
[
ω
w
b
b
]
×
\dot{\boldsymbol{R}}_{w b}=\boldsymbol{R}_{w b}\left[\boldsymbol{\omega}_{w b}^{b}\right]_{\times}\\
R˙wb=Rwb[ωwbb]×
[ ω w b b ] × = [ 0 − w 3 w 2 w 3 0 − w 1 − w 2 w 1 0 ] \left[\boldsymbol{\omega}_{w b}^{b}\right]_{\times} = \left[\begin{array}{ccc} 0 & -w_3 & w_2 \\ w_3 & 0 & -w_1 \\ -w_2 & w_1 & 0 \end{array}\right] [ωwbb]×=⎣ ⎡0w3−w2−w30w1w2−w10⎦ ⎤
1.2 四元数
四元数是超复数,即“复数的复数”
若有复数
A
=
a
+
b
i
B
=
c
+
d
i
\mathbf{A} = a + b\mathbf{i} \\ \mathbf{B} = c + d\mathbf{i}
A=a+biB=c+di
则复数的复数为:
Q
=
A
+
B
j
=
(
a
+
b
i
)
+
(
c
+
d
i
)
j
=
a
+
b
i
+
c
j
+
d
i
j
\begin{aligned} \mathbf{Q} &= \mathbf{A+Bj} \\ &= (a+b\mathbf{i}) + (c+d\mathbf{i})\mathbf{j}\\ &=a+b\mathbf{i} + c\mathbf{j}+d\mathbf{i}\mathbf{j} \end{aligned}\\
Q=A+Bj=(a+bi)+(c+di)j=a+bi+cj+dij
在这里,另
k
=
i
j
\mathbf{k=ij}
k=ij,则有
Q
=
a
+
b
i
+
c
j
+
d
k
\begin{aligned} \mathbf{Q} = a+b\mathbf{i} + c\mathbf{j}+d\mathbf{k} \end{aligned}\\
Q=a+bi+cj+dk
因此,从
Q
=
A
+
B
j
\mathbf{Q=A+Bj}
Q=A+Bj可以看出,四元数可以理解为“复数的复数”。
一个四元数 q 拥有一个实部和三个虚部。这里把实部写在前面(也有地方把实部写在
后面)
q
=
q
w
+
q
v
=
q
w
+
q
x
i
+
q
y
j
+
q
z
k
\boldsymbol{q}=q_{w}+\boldsymbol{q}_{v}=q_{w}+q_{x} \boldsymbol{i}+q_{y} \boldsymbol{j}+q_{z} \boldsymbol{k}\\
q=qw+qv=qw+qxi+qyj+qzk
其中
q
w
q_{w}
qw是实部,
q
v
\mathbf{q}_v
qv是虚部。
其中 i, j, k 为四元数的三个虚部。这三个虚部满足关系式:
i
2
=
j
2
=
k
2
=
−
1
i
j
=
k
,
j
i
=
−
k
j
k
=
i
,
k
j
=
−
i
k
i
=
j
,
i
k
=
−
j
i^2=j^2=k^2=-1\\ ij = k, ji=-k\\ jk=i,kj=-i\\ ki=j,ik=-j
i2=j2=k2=−1ij=k,ji=−kjk=i,kj=−iki=j,ik=−j
1) 单位四元数
在姿态表示中,我们所用的四元数都是单位四元数,即
∣
∣
q
∣
∣
=
q
w
2
+
q
x
2
+
q
y
2
+
q
z
2
=
1
||\boldsymbol{q}||=\sqrt{q_w^2 + q_x^2 + q_y^2 + q_z^2} = 1 \\
∣∣q∣∣=qw2+qx2+qy2+qz2=1
2) 四元数加减法
四元数
p
,
q
p,q
p,q的加减运算为:
p
+
q
=
[
p
w
±
q
w
,
p
v
±
q
v
]
p+q = [p_w{\pm}q_w,p_v{\pm}q_v]
p+q=[pw±qw,pv±qv]
3) 共轭四元数与四元数的逆
共轭四元数指的是实部相同,虚部相反的四元数
q
∗
=
q
w
−
q
v
=
q
w
−
q
x
i
−
q
y
j
−
q
z
k
q
∗
q
=
1
\boldsymbol{q}^{*}=q_{w}-\boldsymbol{q}_{v}=q_{w}-q_{x} \boldsymbol{i}-q_{y} \boldsymbol{j}-q_{z} \boldsymbol{k}\\ \boldsymbol{q}^{*}\boldsymbol{q} = 1
q∗=qw−qv=qw−qxi−qyj−qzkq∗q=1
一个四元数的逆为:
q
−
1
=
q
∗
/
∥
q
∥
\boldsymbol{q}^{-1}=\boldsymbol{q}^{*}/\Vert\boldsymbol{q}\Vert\\
q−1=q∗/∥q∥
按此定义,四元数和自己的逆的乘积为实四元数的 1:
q
q
−
1
=
q
q
−
1
=
1
\boldsymbol{q}\boldsymbol{q}^{-1}=\boldsymbol{q}\boldsymbol{q}^{-1}=1\\
qq−1=qq−1=1
如果
q
q
q 为单位四元数,逆和共轭就是同一个量。同时,乘积的逆有和矩阵相似的性
质:
q
−
1
=
q
∗
(
q
a
q
b
)
−
1
=
q
b
−
1
q
a
−
1
\boldsymbol{q}^{-1}=\boldsymbol{q}^{*}\\ (\boldsymbol{q}_a\boldsymbol{q}_b)^{-1} = \boldsymbol{q}^{-1}_b\boldsymbol{q}^{-1}_a
q−1=q∗(qaqb)−1=qb−1qa−1
4) 四元数的旋转
假设一个空间三维点 p = [ x y z ] ∈ R 3 \boldsymbol{p} =\left[\begin{array}{c} x & y & z\end{array}\right] \in \mathbb{R}^3 p=[xyz]∈R3 ,以及一个由轴角 n , θ n, \theta n,θ 指定的旋转。三维点 p p p 经过旋转之后变成为 p ′ p' p′ 。如果使用矩阵描述,那么有 p ′ = R p p'= Rp p′=Rp。如果用四元数描述旋转,则如下:
首先,把三维空间点用一个虚四元数来描述:
p
=
[
0
x
y
z
]
=
[
0
v
]
\boldsymbol{p} =\left[\begin{array}{c}0 & x & y & z\end{array}\right] = \left[\begin{array}{c}0 &v\end{array}\right]
p=[0xyz]=[0v]
这相当于我们把四元数的三个虚部与空间中的三个轴相对应。然后 ,用四元数
q
q
q表示这个旋转:
q
=
[
cos
θ
2
n
sin
θ
2
]
\boldsymbol{q} =\left[\begin{array}{c}\cos{\frac{\theta}{2}} & n\sin{\frac{\theta}{2}}\end{array}\right]
q=[cos2θnsin2θ]
那么,旋转后的点
p
′
p^{\prime}
p′即可表示为这样的乘积:
p
′
=
q
⊗
p
⊗
q
∗
\boldsymbol{p}^{\prime}=\boldsymbol{q} \otimes \boldsymbol{p} \otimes \boldsymbol{q}^{*}\\
p′=q⊗p⊗q∗
4) 四元数乘法
乘法是把
p
p
p的每一项与
q
q
q 每项相乘,最后相加,虚部要虚部满足关系式进行整理,
可得:
p
=
p
w
+
p
x
i
+
p
y
j
+
p
z
k
q
=
q
w
+
q
x
i
+
q
y
j
+
q
z
k
p
⊗
q
=
p
w
q
w
−
p
x
q
x
−
p
y
q
y
−
p
z
q
z
+
(
p
w
q
x
+
p
x
q
w
+
p
y
q
z
−
p
z
q
y
)
i
+
(
p
q
q
y
+
p
y
q
w
+
p
z
q
x
−
p
x
q
z
)
j
+
(
p
w
q
z
+
p
z
q
w
+
p
x
q
y
−
p
y
q
x
)
k
p = p_w + p_xi+p_yj+p_zk\\q=q_w+q_xi+q_yj+q_zk\\ p{\otimes}q = p_wq_w - p_xq_x - p_yq_y - p_zq_z\\ +( p_wq_x +p_xq_w + p_y q_z - p_z q_y)i\\ +( p_qq_y + p_yq_w + p_zq_x - p_xq_z)j\\ +( p_wq_z + p_zq_w + p_xq_y - p_yq_x)k
p=pw+pxi+pyj+pzkq=qw+qxi+qyj+qzkp⊗q=pwqw−pxqx−pyqy−pzqz+(pwqx+pxqw+pyqz−pzqy)i+(pqqy+pyqw+pzqx−pxqz)j+(pwqz+pzqw+pxqy−pyqx)k
虽然稍为复杂,但形式上是整齐有序的。如果写成向量形式并利用内外积运算,该表
达会更加简洁:
p
⊗
q
=
[
p
w
q
w
−
p
v
T
q
v
p
w
q
v
+
q
w
p
v
+
p
v
×
q
v
]
\boldsymbol{p} \otimes \boldsymbol{q}=\left[\begin{array}{c} p_{w} q_{w}-\boldsymbol{p}_{v}^{\mathrm{T}} \boldsymbol{q}_{v} \\ p_{w} \boldsymbol{q}_{v}+q_{w} \boldsymbol{p}_{v}+\boldsymbol{p}_{v} \times \boldsymbol{q}_{v} \end{array}\right]\\
p⊗q=[pwqw−pvTqvpwqv+qwpv+pv×qv]
如果你把上面的式子展开,会发现四元数乘法可以表示成矩阵与向量相乘的形式
p
⊗
q
=
[
p
]
L
q
\boldsymbol{p} \otimes \boldsymbol{q}=[\boldsymbol{p}]_{L} \boldsymbol{q}\\
p⊗q=[p]Lq
其中
[
p
]
L
=
[
p
w
−
p
x
−
p
y
−
p
z
p
x
p
w
−
p
z
p
y
p
y
p
z
p
w
−
p
x
p
z
−
p
y
p
x
p
w
]
=
p
w
I
+
[
0
−
p
v
T
p
v
[
p
v
]
×
]
\begin{aligned} [\boldsymbol{p}]_{L} &=\left[\begin{array}{cccc} p_{w} & -p_{x} & -p_{y} & -p_{z} \\ p_{x} & p_{w} & -p_{z} & p_{y} \\ p_{y} & p_{z} & p_{w} & -p_{x} \\ p_{z} & -p_{y} & p_{x} & p_{w} \end{array}\right] \\ &=p_{w} \boldsymbol{I}+\left[\begin{array}{cc} 0 & -\boldsymbol{p}_{v}^{\mathrm{T}} \\ \boldsymbol{p}_{v} & {\left[\boldsymbol{p}_{v}\right]_{\times}} \end{array}\right] \end{aligned}\\
[p]L=⎣
⎡pwpxpypz−pxpwpz−py−py−pzpwpx−pzpy−pxpw⎦
⎤=pwI+[0pv−pvT[pv]×]
其中
[
⋅
]
×
[\cdot]_{\times}
[⋅]×表示向量的反对称矩阵。
四元数乘法也可以展开为
p
⊗
q
=
[
q
]
R
p
\boldsymbol{p} \otimes \boldsymbol{q}=[\boldsymbol{q}]_{R} \boldsymbol{p}\\
p⊗q=[q]Rp
其中
[
q
]
R
=
[
q
w
−
q
x
−
q
y
−
q
z
q
x
q
w
q
z
−
q
y
q
y
−
q
z
q
w
q
x
q
z
q
y
−
q
x
q
w
]
=
q
w
I
+
[
0
−
q
v
T
q
v
−
[
q
v
]
×
]
\begin{aligned} [\boldsymbol{q}]_{R} &=\left[\begin{array}{cccc} q_{w} & -q_{x} & -q_{y} & -q_{z} \\ q_{x} & q_{w} & q_{z} & -q_{y} \\ q_{y} & -q_{z} & q_{w} & q_{x} \\ q_{z} & q_{y} & -q_{x} & q_{w} \end{array}\right] \\ &=q_{w} \boldsymbol{I}+\left[\begin{array}{cc} 0 & -\boldsymbol{q}_{v}^{\mathrm{T}} \\ \boldsymbol{q}_{v} & -\left[\boldsymbol{q}_{v}\right]_{\times} \end{array}\right] \end{aligned}\\
[q]R=⎣
⎡qwqxqyqz−qxqw−qzqy−qyqzqw−qx−qz−qyqxqw⎦
⎤=qwI+[0qv−qvT−[qv]×]
因此可以得到
(
q
⊗
x
)
⊗
p
=
[
p
]
R
[
q
]
L
x
q
⊗
(
x
⊗
p
)
=
[
q
]
L
[
p
]
R
x
\begin{array}{l} (\mathbf{q} \otimes \mathbf{x}) \otimes \mathbf{p}=[\mathbf{p}]_{R}[\mathbf{q}]_{L} \mathbf{x} \\ \mathbf{q} \otimes(\mathbf{x} \otimes \mathbf{p})=[\mathbf{q}]_{L}[\mathbf{p}]_{R} \mathbf{x} \end{array}\\
(q⊗x)⊗p=[p]R[q]Lxq⊗(x⊗p)=[q]L[p]Rx
这是两个很重要的性质,后面的推导中会多次用到。
5) 四元数的微分方程
r
w
\boldsymbol{r}^{w}
rw 和
r
b
\boldsymbol{r}^{b}
rb两个矢量之间可以用四元数转换如下(这是转换的定义)
r
w
=
q
w
b
⊗
r
b
⊗
q
w
b
∗
\boldsymbol{r}^{w}=\boldsymbol{q}_{w b} \otimes \boldsymbol{r}^{b} \otimes \boldsymbol{q}_{w b}^{*}\\
rw=qwb⊗rb⊗qwb∗
re等式两边同时右乘
q
w
b
\boldsymbol{q}_{w b}
qwb ,可得
r
w
⊗
q
w
b
=
q
w
b
⊗
r
b
\boldsymbol{r}^{w} \otimes \boldsymbol{q}_{w b}=\boldsymbol{q}_{w b} \otimes \boldsymbol{r}^{b}\\
rw⊗qwb=qwb⊗rb
上式两边同时求微分,可得
r
˙
w
⊗
q
w
b
+
r
w
⊗
q
˙
w
b
=
q
˙
w
b
⊗
r
b
+
q
w
b
⊗
r
˙
b
\begin{aligned} \dot{\boldsymbol{r}}^{w} \otimes \boldsymbol{q}_{w b}+\boldsymbol{r}^{w} & \otimes \dot{\boldsymbol{q}}_{w b} =\dot{\boldsymbol{q}}_{w b} \otimes \boldsymbol{r}^{b}+\boldsymbol{q}_{w b} \otimes \dot{\boldsymbol{r}}^{b} \end{aligned}\\
r˙w⊗qwb+rw⊗q˙wb=q˙wb⊗rb+qwb⊗r˙b
由于(其中
×
\times
×代表向量叉乘 ,
⊗
\otimes
⊗代表两个四元数相乘)
r
˙
b
=
−
ω
w
b
b
×
r
b
=
−
ω
w
b
b
⊗
r
b
r
˙
w
=
0
\begin{array}{l} \dot{\boldsymbol{r}}^{b}=-\boldsymbol{\omega}_{w b}^{b} \times \boldsymbol{r}^{b}=-\boldsymbol{\omega}_{w b}^{b} \otimes \boldsymbol{r}^{b} \\ \dot{\boldsymbol{r}}^{w}=\mathbf{0} \end{array}\\
r˙b=−ωwbb×rb=−ωwbb⊗rbr˙w=0
则有
r
w
⊗
q
˙
w
b
=
(
q
w
b
⊗
r
b
⊗
q
w
b
∗
)
⊗
q
˙
w
b
=
q
˙
w
b
⊗
r
b
−
q
w
b
⊗
ω
w
b
b
⊗
r
b
\begin{aligned} & \boldsymbol{r}^{w} \otimes \dot{\boldsymbol{q}}_{w b} \\ =&\left(\boldsymbol{q}_{w b} \otimes \boldsymbol{r}^{b} \otimes \boldsymbol{q}_{w b}^{*}\right) \otimes \dot{\boldsymbol{q}}_{w b} \\ =& \dot{\boldsymbol{q}}_{w b} \otimes \boldsymbol{r}^{b}-\boldsymbol{q}_{w b} \otimes \boldsymbol{\omega}_{w b}^{b} \otimes \boldsymbol{r}^{b} \end{aligned}\\
==rw⊗q˙wb(qwb⊗rb⊗qwb∗)⊗q˙wbq˙wb⊗rb−qwb⊗ωwbb⊗rb
等式两边同时左乘
q
w
b
∗
\boldsymbol{q}_{w b}^{*}
qwb∗ ,可得
r
b
⊗
q
w
b
∗
⊗
q
˙
w
b
=
q
w
b
∗
⊗
q
˙
w
b
⊗
r
b
−
ω
w
b
b
⊗
r
b
\begin{aligned} \boldsymbol{r}^{b} \otimes \boldsymbol{q}_{w b}^{*} \otimes \dot{\boldsymbol{q}}_{w b} =\boldsymbol{q}_{w b}^{*} \otimes \dot{\boldsymbol{q}}_{w b} \otimes \boldsymbol{r}^{b}-\boldsymbol{\omega}_{w b}^{b} \otimes \boldsymbol{r}^{b} \end{aligned}\\
rb⊗qwb∗⊗q˙wb=qwb∗⊗q˙wb⊗rb−ωwbb⊗rb
移项可得
ω
w
b
b
⊗
r
b
=
(
q
w
b
∗
⊗
q
˙
w
b
)
⊗
r
b
−
r
b
⊗
(
q
w
b
∗
⊗
q
˙
w
b
)
\boldsymbol{\omega}_{w b}^{b} \otimes \boldsymbol{r}^{b}=\left(\boldsymbol{q}_{w b}^{*} \otimes \dot{\boldsymbol{q}}_{w b}\right) \otimes \boldsymbol{r}^{b}-\boldsymbol{r}^{b} \otimes\left(\boldsymbol{q}_{w b}^{*} \otimes \dot{\boldsymbol{q}}_{w b}\right)\\
ωwbb⊗rb=(qwb∗⊗q˙wb)⊗rb−rb⊗(qwb∗⊗q˙wb)
利用前面四元数相乘展开成矩阵与向量相乘的公式,将上式展开,可得
[
0
0
1
×
3
0
3
×
1
[
ω
w
b
b
]
×
]
[
0
r
b
]
=
[
0
0
1
×
3
0
3
×
1
2
[
(
q
w
b
∗
⊗
q
˙
w
b
)
v
]
×
]
[
0
r
b
]
\left[\begin{array}{cc} 0 & \mathbf{0}_{1 \times 3} \\ \mathbf{0}_{3 \times 1} & {\left[\boldsymbol{\omega}_{w b}^{b}\right]_{\times}} \end{array}\right]\left[\begin{array}{l} 0 \\ \boldsymbol{r}^{b} \end{array}\right]=\left[\begin{array}{cc} 0 & \mathbf{0}_{1 \times 3} \\ \mathbf{0}_{3 \times 1} & 2\left[\left(\boldsymbol{q}_{w b}^{*} \otimes \dot{\boldsymbol{q}}_{w b}\right)_{v}\right]_{\times} \end{array}\right]\left[\begin{array}{c} 0 \\ \boldsymbol{r}^{b} \end{array}\right]\\
[003×101×3[ωwbb]×][0rb]=[003×101×32[(qwb∗⊗q˙wb)v]×][0rb]
因此有
(
q
w
b
∗
⊗
q
˙
w
b
)
v
=
1
2
ω
w
b
b
\left(\boldsymbol{q}_{w b}^{*} \otimes \dot{\boldsymbol{q}}_{w b}\right)_{v}=\frac{1}{2} \boldsymbol{\omega}_{w b}^{b}\\
(qwb∗⊗q˙wb)v=21ωwbb
以上只是把虚部求解出来了,实部还得搞一搞,如下
根据四元数与旋转矢量的关系,有
q
w
b
∗
=
[
cos
ϕ
2
−
u
sin
ϕ
2
]
\boldsymbol{q}_{w b}^{*}=\left[\begin{array}{c} \cos \frac{\phi}{2} \\ -\boldsymbol{u} \sin \frac{\phi}{2} \end{array}\right]\\
qwb∗=[cos2ϕ−usin2ϕ]
q ˙ w b = [ − ϕ ˙ 2 sin ϕ 2 u ˙ sin ϕ 2 + u ϕ 2 cos ϕ 2 ] \dot{\boldsymbol{q}}_{w b}=\left[\begin{array}{c} -\frac{\dot{\phi}}{2} \sin \frac{\phi}{2} \\ \dot{\boldsymbol{u}} \sin \frac{\phi}{2}+\boldsymbol{u} \frac{\phi}{2} \cos \frac{\phi}{2} \end{array}\right]\\ q˙wb=[−2ϕ˙sin2ϕu˙sin2ϕ+u2ϕcos2ϕ]
因此有
q
w
b
∗
⊗
q
˙
w
b
=
[
cos
ϕ
2
−
u
sin
ϕ
2
]
⊗
[
−
ϕ
˙
2
sin
ϕ
2
u
˙
sin
ϕ
2
+
u
ϕ
2
cos
ϕ
2
]
=
[
−
ϕ
˙
2
sin
ϕ
2
cos
ϕ
2
+
(
u
sin
ϕ
2
)
T
(
u
˙
sin
ϕ
2
+
u
Φ
˙
2
cos
ϕ
2
)
cos
ϕ
˙
2
(
u
˙
sin
ϕ
2
+
u
ϕ
˙
2
cos
ϕ
2
)
+
u
sin
ϕ
2
⋅
ϕ
˙
2
sin
ϕ
2
−
(
u
sin
ϕ
2
)
×
(
u
˙
sin
ϕ
2
+
u
ϕ
˙
2
cos
ϕ
2
)
]
=
[
0
u
cos
ϕ
2
sin
ϕ
2
+
u
ϕ
˙
2
−
u
sin
ϕ
2
×
u
˙
sin
ϕ
2
]
\begin{aligned} \boldsymbol{q}_{w b}^{*} \otimes \dot{\boldsymbol{q}}_{w b} &=\left[\begin{array}{c} \cos \frac{\phi}{2} \\ -\boldsymbol{u} \sin \frac{\phi}{2} \end{array}\right] \otimes\left[\begin{array}{c} -\frac{\dot{\phi}}{2} \sin \frac{\phi}{2} \\ \dot{\boldsymbol{u}} \sin \frac{\phi}{2}+\boldsymbol{u} \frac{\phi}{2} \cos \frac{\phi}{2} \end{array}\right] \\ &=\left[\begin{array}{c} -\frac{\dot{\phi}}{2} \sin \frac{\phi}{2} \cos \frac{\phi}{2}+\left(\boldsymbol{u} \sin \frac{\phi}{2}\right)^{\mathrm{T}}\left(\dot{\boldsymbol{u}} \sin \frac{\phi}{2}+\boldsymbol{u} \frac{\dot{\Phi}}{2} \cos \frac{\phi}{2}\right) \\ \cos \frac{\dot{\phi}}{2}\left(\dot{\boldsymbol{u}} \sin \frac{\phi}{2}+\boldsymbol{u} \frac{\dot{\phi}}{2} \cos \frac{\phi}{2}\right)+\boldsymbol{u} \sin \frac{\phi}{2} \cdot \frac{\dot{\phi}}{2} \sin \frac{\phi}{2}-\left(\boldsymbol{u} \sin \frac{\phi}{2}\right) \times\left(\dot{\boldsymbol{u}} \sin \frac{\phi}{2}+\boldsymbol{u} \frac{\dot{\phi}}{2} \cos \frac{\phi}{2}\right) \end{array}\right] \\ &=\left[\begin{array}{c} 0 \\ \boldsymbol{u} \cos \frac{\phi}{2} \sin \frac{\phi}{2}+\boldsymbol{u} \frac{\dot{\phi}}{2}-\boldsymbol{u} \sin \frac{\phi}{2} \times \dot{\boldsymbol{u}} \sin \frac{\phi}{2} \end{array}\right] \end{aligned}\\
qwb∗⊗q˙wb=[cos2ϕ−usin2ϕ]⊗[−2ϕ˙sin2ϕu˙sin2ϕ+u2ϕcos2ϕ]=⎣
⎡−2ϕ˙sin2ϕcos2ϕ+(usin2ϕ)T(u˙sin2ϕ+u2Φ˙cos2ϕ)cos2ϕ˙(u˙sin2ϕ+u2ϕ˙cos2ϕ)+usin2ϕ⋅2ϕ˙sin2ϕ−(usin2ϕ)×(u˙sin2ϕ+u2ϕ˙cos2ϕ)⎦
⎤=[0ucos2ϕsin2ϕ+u2ϕ˙−usin2ϕ×u˙sin2ϕ]
可以看出实部为0。
那么最终就可以得到
q
w
b
∗
⊗
q
˙
w
b
=
1
2
[
0
ω
w
b
b
]
\boldsymbol{q}_{w b}^{*} \otimes \dot{\boldsymbol{q}}_{w b}=\frac{1}{2}\left[\begin{array}{c} 0 \\ \boldsymbol{\omega}_{w b}^{b} \end{array}\right]\\
qwb∗⊗q˙wb=21[0ωwbb]
即
q
˙
w
b
=
q
w
b
⊗
1
2
[
0
ω
w
b
b
]
\dot{\boldsymbol{q}}_{w b}=\boldsymbol{q}_{w b} \otimes \frac{1}{2}\left[\begin{array}{c} 0 \\ \boldsymbol{\omega}_{w b}^{b} \end{array}\right]\\
q˙wb=qwb⊗21[0ωwbb]
1.3 旋转向量
旋转向量,从物理意义上比较好理解,借用欧拉角的定义,它表示物体绕坐标轴分别按三个欧拉角旋转三次,就可以得到它现在所处的姿态。而旋转向量的定义是,物体绕空间某一个轴旋转一次,就可以达到现在的姿态。二者的区别在于,欧拉角的旋转是绕xyz这样的直角坐标轴的,而旋转向量所绕的轴可能朝向空间任意一个方向,这个轴取决于载体的姿态。
等效旋转矢量可以用向量
ϕ
\boldsymbol{\phi}
ϕ ,并用 单位向量
u
\boldsymbol{u}
u表示它的朝向,
ϕ
\phi
ϕ 表示它的大小,因此有
ϕ
=
ϕ
u
\boldsymbol{\phi} = \phi \boldsymbol{u}\\
ϕ=ϕu
等效旋转矢量的指数形式,是推导中重要的推导过程,因此先在这里给出
exp
(
ϕ
∧
)
=
exp
(
ϕ
u
∧
)
=
∑
n
=
0
∞
1
n
!
(
ϕ
u
∧
)
n
\exp \left(\boldsymbol{\phi}^{\wedge}\right)=\exp \left(\phi \boldsymbol{u}^{\wedge}\right)=\sum_{n=0}^{\infty} \frac{1}{n !}\left(\phi \boldsymbol{u}^{\wedge}\right)^{n}\\
exp(ϕ∧)=exp(ϕu∧)=n=0∑∞n!1(ϕu∧)n
由于带着无穷项,因此需要化简才能用。由于反对称矩阵具有如下性质
(
ϕ
∧
)
i
=
{
(
−
1
)
(
i
−
1
)
/
2
ϕ
i
−
1
(
ϕ
∧
)
i
=
1
,
3
,
5
,
⋯
(
−
1
)
(
i
−
2
)
/
2
ϕ
i
−
2
(
ϕ
∧
)
2
i
=
2
,
4
,
6
,
⋯
\left(\boldsymbol{\phi}^{\wedge}\right)^{i}=\left\{\begin{array}{ll} (-1)^{(i-1) / 2} \phi^{i-1}\left(\boldsymbol{\phi}^{\wedge}\right) & i=1,3,5, \cdots \\ (-1)^{(i-2) / 2} \phi^{i-2}\left(\boldsymbol{\phi}^{\wedge}\right)^{2} & i=2,4,6, \cdots \end{array}\right.\\
(ϕ∧)i={(−1)(i−1)/2ϕi−1(ϕ∧)(−1)(i−2)/2ϕi−2(ϕ∧)2i=1,3,5,⋯i=2,4,6,⋯
因此,指数形式可以化简为
exp
(
ϕ
∧
)
=
I
+
ϕ
(
u
∧
)
+
1
2
!
ϕ
2
(
u
∧
)
2
+
1
3
!
ϕ
3
(
u
∧
)
3
+
1
4
!
ϕ
4
(
u
∧
)
4
+
⋯
=
I
+
ϕ
(
u
∧
)
+
1
2
!
ϕ
2
(
u
∧
)
2
−
1
3
!
ϕ
3
(
u
∧
)
−
1
4
!
ϕ
4
(
u
∧
)
2
+
⋯
=
I
+
(
u
∧
)
2
+
(
ϕ
−
1
3
!
ϕ
3
+
1
5
!
ϕ
5
−
⋯
)
⏟
sin
ϕ
(
u
∧
)
−
(
1
−
1
2
!
ϕ
2
+
1
4
!
ϕ
4
−
⋯
)
⏟
cos
ϕ
(
u
∧
)
2
=
I
+
sin
ϕ
(
u
∧
)
+
(
1
−
cos
ϕ
)
(
u
∧
)
2
=
I
+
sin
ϕ
ϕ
(
ϕ
∧
)
+
(
1
−
cos
ϕ
)
ϕ
2
(
ϕ
∧
)
2
\begin{aligned} \exp \left(\boldsymbol{\phi}^{\wedge}\right) &=I+\phi\left(\boldsymbol{u}^{\wedge}\right)+\frac{1}{2 !} \phi^{2}\left(\boldsymbol{u}^{\wedge}\right)^{2}+\frac{1}{3 !} \phi^{3}\left(\boldsymbol{u}^{\wedge}\right)^{3}+\frac{1}{4 !} \phi^{4}\left(\boldsymbol{u}^{\wedge}\right)^{4}+\cdots \\ &=I+\phi\left(\boldsymbol{u}^{\wedge}\right)+\frac{1}{2 !} \phi^{2}\left(\boldsymbol{u}^{\wedge}\right)^{2}-\frac{1}{3 !} \phi^{3}\left(\boldsymbol{u}^{\wedge}\right)-\frac{1}{4 !} \phi^{4}\left(\boldsymbol{u}^{\wedge}\right)^{2}+\cdots \\ &=I+\left(\boldsymbol{u}^{\wedge}\right)^{2}+\underbrace{\left(\phi-\frac{1}{3 !} \phi^{3}+\frac{1}{5 !} \phi^{5}-\cdots\right)}_{\sin \phi}\left(\boldsymbol{u}^{\wedge}\right)-\underbrace{\left(1-\frac{1}{2 !} \phi^{2}+\frac{1}{4 !} \phi^{4}-\cdots\right)}_{\cos \phi}\left(\boldsymbol{u}^{\wedge}\right)^{2} \\ &=I+\sin \phi\left(\boldsymbol{u}^{\wedge}\right)+(1-\cos \phi)\left(\boldsymbol{u}^{\wedge}\right)^{2} \\ &=I+\frac{\sin \phi}{\phi}\left(\boldsymbol{\phi}^{\wedge}\right)+\frac{(1-\cos \phi)}{\phi^{2}}\left(\boldsymbol{\phi}^{\wedge}\right)^{2} \end{aligned}\\
exp(ϕ∧)=I+ϕ(u∧)+2!1ϕ2(u∧)2+3!1ϕ3(u∧)3+4!1ϕ4(u∧)4+⋯=I+ϕ(u∧)+2!1ϕ2(u∧)2−3!1ϕ3(u∧)−4!1ϕ4(u∧)2+⋯=I+(u∧)2+sinϕ
(ϕ−3!1ϕ3+5!1ϕ5−⋯)(u∧)−cosϕ
(1−2!1ϕ2+4!1ϕ4−⋯)(u∧)2=I+sinϕ(u∧)+(1−cosϕ)(u∧)2=I+ϕsinϕ(ϕ∧)+ϕ2(1−cosϕ)(ϕ∧)2
最后一项是罗德里格斯公式。
1)旋转向量微分方程
旋转向量微分方程的推导就显得更加复杂,这里就借用严恭敏老师《惯性导航与组合导航算法》中的一个中间结论吧,直接给出旋转矢量微分方程的完整形式
ϕ
˙
=
ω
w
b
b
+
1
2
ϕ
×
ω
w
b
b
+
1
ϕ
2
(
1
−
ϕ
2
cot
ϕ
2
)
(
ϕ
×
)
2
ω
w
b
b
\dot{\boldsymbol{\phi}}=\boldsymbol{\omega}_{w b}^{b}+\frac{1}{2} \boldsymbol{\phi} \times \boldsymbol{\omega}_{w b}^{b}+\frac{1}{\phi^{2}}\left(1-\frac{\phi}{2} \cot \frac{\phi}{2}\right)(\boldsymbol{\phi} \times)^{2} \boldsymbol{\omega}_{w b}^{b}\\
ϕ˙=ωwbb+21ϕ×ωwbb+ϕ21(1−2ϕcot2ϕ)(ϕ×)2ωwbb
如果你愿意把它泰勒展开,那么去除高阶项会得到如下简化形式
ϕ
˙
=
ω
w
b
b
+
1
2
ϕ
×
ω
w
b
b
\dot{\boldsymbol{\phi}}=\boldsymbol{\omega}_{w b}^{b}+\frac{1}{2} \boldsymbol{\phi} \times \boldsymbol{\omega}_{w b}^{b}\\
ϕ˙=ωwbb+21ϕ×ωwbb
这就是前面看到的结果啦。
1.4 各种表示方式之间的转换
既然各种方式之间是等价的,且实际使用中,各种形式都有可能出现,那么理清它们之间的转换关系就是必要的这里就只能给出结论。
1)欧拉角与旋转矩阵
按照机器人前(x)-左(y)-上(z)的坐标系定义,并令横滚角为
α
\mathbf{\alpha}
α 、俯仰角为
β
\mathbf{\beta}
β 、航向角为
γ
\mathbf{\gamma}
γ ,假设旋转矩阵是按照z-y-x的顺序旋转得来,那么旋转矩阵可以表示为
R
w
b
=
(
R
x
(
α
)
R
y
(
−
β
)
R
z
(
γ
)
)
T
\boldsymbol{R}_{w b}=\left(\boldsymbol{R}_{x}(\alpha) \boldsymbol{R}_{y}(-\beta) \boldsymbol{R}_{z}(\gamma)\right)^{T}\\
Rwb=(Rx(α)Ry(−β)Rz(γ))T
其中
R
x
(
α
)
=
[
1
0
0
0
cos
(
α
)
sin
(
α
)
0
−
sin
(
α
)
cos
(
α
)
]
\boldsymbol{R}_{x}(\alpha)=\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos (\alpha) & \sin (\alpha) \\ 0 & -\sin (\alpha) & \cos (\alpha) \end{array}\right] \\
Rx(α)=⎣
⎡1000cos(α)−sin(α)0sin(α)cos(α)⎦
⎤
R
y
(
−
β
)
=
[
cos
(
β
)
0
sin
(
β
)
0
1
0
−
sin
(
β
)
0
cos
(
β
)
]
\boldsymbol{R}_{y}(-\beta)=\left[\begin{array}{ccc} \cos (\beta) & 0 & \sin (\beta) \\ 0 & 1 & 0 \\ -\sin (\beta) & 0 & \cos (\beta) \end{array}\right] \\
Ry(−β)=⎣
⎡cos(β)0−sin(β)010sin(β)0cos(β)⎦
⎤
R
z
(
γ
)
=
[
cos
(
γ
)
sin
(
γ
)
0
−
sin
(
γ
)
cos
(
γ
)
0
0
0
1
]
\quad \boldsymbol{R}_{z}(\gamma)=\left[\begin{array}{ccc} \cos (\gamma) & \sin (\gamma) & 0 \\ -\sin (\gamma) & \cos (\gamma) & 0 \\ 0 & 0 & 1 \end{array}\right]\\
Rz(γ)=⎣
⎡cos(γ)−sin(γ)0sin(γ)cos(γ)0001⎦
⎤
也可以直接写出结果形式
R
w
b
=
[
c
β
c
γ
−
s
α
s
β
c
γ
−
c
α
s
γ
s
α
s
γ
−
c
α
s
β
c
γ
c
β
s
γ
c
α
c
γ
−
s
α
s
β
s
γ
−
c
α
s
β
s
γ
−
s
α
c
γ
s
β
s
α
c
β
coc
β
]
\boldsymbol{R}_{w b}=\left[\begin{array}{ccc} c \beta c \gamma & -s \alpha s \beta c \gamma-c \alpha s \gamma & s \alpha s \gamma-c \alpha s \beta c \gamma \\ c \beta s \gamma & c \alpha c \gamma-s \alpha s \beta s \gamma & -c \alpha s \beta s \gamma-s \alpha c \gamma \\ s \beta & s \alpha c \beta & \operatorname{coc} \beta \end{array}\right]\\
Rwb=⎣
⎡cβcγcβsγsβ−sαsβcγ−cαsγcαcγ−sαsβsγsαcβsαsγ−cαsβcγ−cαsβsγ−sαcγcocβ⎦
⎤
其中
s
∙
=
sin
(
∙
)
c
∙
=
cos
(
∙
)
s \bullet=\sin (\bullet) \quad c \bullet=\cos (\bullet)
s∙=sin(∙)c∙=cos(∙)
因此,观察该矩阵,可以得出由旋转矩阵得到欧拉角的方式
α
=
arctan
2
(
R
w
b
(
3
,
2
)
,
R
w
b
(
3
,
3
)
)
β
=
arcsin
(
R
w
b
(
3
,
1
)
)
γ
=
arctan
2
(
R
w
b
(
2
,
1
)
,
R
w
b
(
1
,
1
)
)
\begin{array}{l} \alpha=\arctan 2\left(\boldsymbol{R}_{w b}(3,2), \boldsymbol{R}_{w b}(3,3)\right) \\ \beta=\arcsin \left(\boldsymbol{R}_{w b}(3,1)\right) \\ \gamma=\arctan 2\left(\boldsymbol{R}_{w b}(2,1), \boldsymbol{R}_{w b}(1,1)\right) \end{array}\\
α=arctan2(Rwb(3,2),Rwb(3,3))β=arcsin(Rwb(3,1))γ=arctan2(Rwb(2,1),Rwb(1,1))
2) 四元数与旋转矩阵
由四元数转旋转矩阵的公式为
R
u
b
=
[
q
u
2
+
q
x
2
−
q
y
2
−
q
z
2
2
(
q
x
q
y
−
q
w
q
z
)
2
(
q
x
q
z
+
q
w
q
y
)
2
(
q
x
q
y
+
q
w
q
z
)
q
w
2
−
q
x
2
+
q
y
2
−
q
z
2
2
(
q
y
q
z
−
q
w
q
x
)
2
(
q
x
q
z
−
q
w
q
y
)
2
(
q
y
q
z
+
q
w
q
x
)
q
w
2
−
q
x
2
−
q
y
2
+
q
z
2
]
\boldsymbol{R}_{u b}=\left[\begin{array}{ccc} q_{u}^{2}+q_{x}^{2}-q_{y}^{2}-q_{z}^{2} & 2\left(q_{x} q_{y}-q_{w} q_{z}\right) & 2\left(q_{x} q_{z}+q_{w} q_{y}\right) \\ 2\left(q_{x} q_{y}+q_{w} q_{z}\right) & q_{w}^{2}-q_{x}^{2}+q_{y}^{2}-q_{z}^{2} & 2\left(q_{y} q_{z}-q_{w} q_{x}\right) \\ 2\left(q_{x} q_{z}-q_{w} q_{y}\right) & 2\left(q_{y} q_{z}+q_{w} q_{x}\right) & q_{w}^{2}-q_{x}^{2}-q_{y}^{2}+q_{z}^{2} \end{array}\right]\\
Rub=⎣
⎡qu2+qx2−qy2−qz22(qxqy+qwqz)2(qxqz−qwqy)2(qxqy−qwqz)qw2−qx2+qy2−qz22(qyqz+qwqx)2(qxqz+qwqy)2(qyqz−qwqx)qw2−qx2−qy2+qz2⎦
⎤
由旋转矩阵转四元数的公式为
q
u
=
1
+
R
w
b
(
1
,
1
)
+
R
w
b
(
2.2
)
+
R
w
b
(
3.3
)
2
q
x
=
R
w
b
(
3
,
2
)
−
R
w
b
(
2
,
3
)
4
q
w
q
y
=
R
u
b
(
1
,
3
)
−
R
w
b
(
3
,
1
)
4
q
w
q
z
=
R
w
b
(
2
,
1
)
−
R
w
b
(
1
,
2
)
4
q
w
\begin{array}{l} q_{u}=\frac{\sqrt{1+R_{w b}(1,1)+R_{w b}(2.2)+R_{w b}(3.3)}}{2} \\ q_{x}=\frac{R_{w b}(3,2)-R_{w b}(2,3)}{4 q_{w}} \\ q_{y}=\frac{R_{u b}(1,3)-R_{w b}(3,1)}{4 q_{w}} \\ q_{z}=\frac{R_{w b}(2,1)-R_{w b}(1,2)}{4 q_{w}} \end{array}\\
qu=21+Rwb(1,1)+Rwb(2.2)+Rwb(3.3)qx=4qwRwb(3,2)−Rwb(2,3)qy=4qwRub(1,3)−Rwb(3,1)qz=4qwRwb(2,1)−Rwb(1,2)
不过需要注意的是,此处需要满足
q
w
≠
0
,
1
+
R
w
b
(
1
,
1
)
+
R
w
b
(
2
,
2
)
+
R
w
b
(
3
,
3
)
>
0
q_{w} \neq 0,1+R_{w b}(1,1)+R_{w b}(2,2)+R_{w b}(3,3)>0\\
qw=0,1+Rwb(1,1)+Rwb(2,2)+Rwb(3,3)>0
3) 旋转矩阵与旋转向量
由旋转向量得到旋转矩阵的公式为
R
w
b
=
I
+
sin
ϕ
ϕ
(
ϕ
∧
)
+
1
−
cos
ϕ
ϕ
2
(
ϕ
∧
)
2
\boldsymbol{R}_{w b}=I+\frac{\sin \phi}{\phi}\left(\boldsymbol{\phi}^{\wedge}\right)+\frac{1-\cos \phi}{\phi^{2}}\left(\boldsymbol{\phi}^{\wedge}\right)^{2}\\
Rwb=I+ϕsinϕ(ϕ∧)+ϕ21−cosϕ(ϕ∧)2
可以发现,这跟旋转向量的指数形式是一样的,这就是传说中的罗德里格斯公式。
由旋转矩阵得到旋转向量的公式为
ϕ
=
arccos
tr
(
R
w
b
)
−
1
2
u
=
(
R
w
b
−
(
R
w
b
)
T
)
∨
2
sin
ϕ
\begin{array}{l} \phi=\arccos \frac{\operatorname{tr}\left(\boldsymbol{R}_{w b}\right)-1}{2} \\ \boldsymbol{u}=\frac{\left(\boldsymbol{R}_{w b}-\left(\boldsymbol{R}_{w b}\right)^{T}\right)^{\vee}}{2 \sin \phi} \end{array}\\
ϕ=arccos2tr(Rwb)−1u=2sinϕ(Rwb−(Rwb)T)∨
4) 四元数与旋转向量
由旋转向量计算四元数的公式为
q
=
cos
ϕ
2
+
sin
ϕ
2
ϕ
ϕ
\boldsymbol{q}=\cos \frac{\phi}{2}+\frac{\sin \frac{\phi}{2}}{\phi} \boldsymbol{\phi}\\
q=cos2ϕ+ϕsin2ϕϕ
由旋转向量计算四元数的公式为
ϕ
=
2
arctan
(
∥
q
v
∥
,
q
w
)
u
=
q
v
/
∥
q
v
∥
\begin{array}{c} \phi=2 \arctan \left(\left\|\boldsymbol{q}_{v}\right\|, q_{w}\right) \\ \boldsymbol{u}=\boldsymbol{q}_{v} /\left\|\boldsymbol{q}_{v}\right\| \end{array}\\
ϕ=2arctan(∥qv∥,qw)u=qv/∥qv∥
这两个公式里,有一个很有意思的问题,就是第一个公式里面有两处除以2,第二个公式里有一处乘以2,这个2怎么来的呢?
我们知道,在旋转矩阵表示法中,一个向量在两个坐标系之间转换的公式为
a
′
=
R
a
\boldsymbol{a}^{\prime}=\boldsymbol{R} \boldsymbol{a}\\
a′=Ra
而四元数则不这么简单,它为
a
′
=
q
⊗
a
⊗
q
∗
\boldsymbol{a}^{\prime}=\boldsymbol{q} \otimes \boldsymbol{a} \otimes \boldsymbol{q}^{*}\\
a′=q⊗a⊗q∗
这个也可以从一个比较奇特的角度来解释,大家看一下,一个四元数和一个矢量相乘(其实乘的是矢量对应的纯虚四元数,即实部为0,虚步三个值对应这个三维矢量),得到的是什么?已经忘记的可以往上翻去看一下四元数乘法。结论是乘出来的一个东西,实部不为0,这就尴尬了,一个三维矢量,乘出来变成了一个四维的东西(一个实部和三个虚部),为了解决这个问题,就写成了上面的形式,左乘一个,右乘一个,实际就是对应两次旋转,自然每次就只旋转一半,即每一个四元数对应的角度只是想要的旋转角度的一半,这样改变之后,惊奇地发现,实部永远为0,等于三维矢量先是被第一个四元数给旋转到四维空间,又被第二个四元数给拉回到三维空间了,完美!