学习惯导这么久,还是没有形成自己的体系,应该说还是没有入门(手动尴尬)。所以在此对看过的内容进行解释,加深印象。本文的内容针对秦永元老师《惯性导航(第二版)》中“9.2.2 四元数与姿态阵间的关系”进行备忘。
一、前提
如图所示(为了便于理解,我把原图擦去了一部分),假定有刚体金刚圈AB,坐标系R,注意这个坐标系不与金刚圈固联(无论金刚圈怎么转,我坐标系坚决不动,相当于这是一个导航坐标系)。当看到这个图,你肯定不知道坐标系R在哪了。没关系,这都不重要,可以这么认为,坐标系就假定是以O为原点的右手系(O隐藏的很深,仔细看)。
金刚圈跟坐标系R介绍完了,就该谈一谈其中的元素了。请看下面这个被我蹂躏得比较轻的图。连接OO’(O’为圆心)得矢量
O
O
′
⃗
\vec{OO'}
OO′,连接O’A得矢量
O
’
A
⃗
\vec{O’A}
O’A,连接O’B得矢量
O
′
B
⃗
\vec{O'B}
O′B(
O
′
A
⃗
\vec{O'A}
O′A垂直于
O
′
B
⃗
\vec{O'B}
O′B),连接OA得矢量
O
A
⃗
\vec{OA}
OA记为
r
⃗
\vec{r}
r。把这些元素定义好了,金刚圈就开始绕
O
O
′
⃗
\vec{OO'}
OO′转动,转动方向沿短弧沿短弧
A
→
沿
短
弧
B
A\xrightarrow{沿短弧}B
A沿短弧B。
圆圈的转动还是要作一下说明,如下图所示(这个图没有遭到我的毒手)。在
O
O
⃗
\vec{OO}
OO上取单位矢量
u
⃗
\vec{u}
u,该矢量可以等效成刚体的旋转轴。
O
′
A
⃗
\vec{O'A}
O′A旋转角度
θ
\theta
θ得到
O
′
A
′
⃗
\vec{O'A'}
O′A′,连接OA’得到
O
A
′
⃗
\vec{OA'}
OA′记为
r
⃗
′
\vec{r}'
r′。
到此为止,把旋转的关系理清楚了。下面请看四元数与姿态阵关系的推导过程。
二、推导
推导的过程其实就是分析转动前后的矢量 r ⃗ \vec{r} r与 r ⃗ ′ \vec{r}' r′的关系。
根据前面的描述,首先可以得到:
O
O
′
⃗
=
(
r
⃗
⋅
u
⃗
)
u
⃗
\vec{OO'}=(\vec{r}·\vec{u})\vec{u}
OO′=(r⋅u)u
为什么呢?因为:
O O ′ ⃗ = ( ∣ r ⃗ ∣ ⋅ ∣ u ⃗ ∣ ⋅ c o s < r ⃗ , u ⃗ > ) u ⃗ = ∣ O O ′ ⃗ ∣ ⋅ u ⃗ = O O ′ ⃗ \vec{OO'} =(|\vec{r}|·|\vec{u}|·cos<\vec{r},\vec{u}>)\vec{u} \\ =|\vec{OO'}|·\vec{u}=\vec{OO'} \\ OO′=(∣r∣⋅∣u∣⋅cos<r,u>)u=∣OO′∣⋅u=OO′
那么可求:
O
′
A
⃗
=
r
⃗
−
O
O
′
⃗
=
r
⃗
−
(
r
⃗
⋅
u
⃗
)
u
⃗
\vec{O'A}=\vec{r}-\vec{OO'}=\vec{r}-(\vec{r}·\vec{u})\vec{u}
O′A=r−OO′=r−(r⋅u)u
O ′ B ⃗ = u ⃗ × O ′ A ⃗ = u ⃗ × r ⃗ − u ⃗ × ( r ⃗ ⋅ u ⃗ ) u ⃗ = u ⃗ × r ⃗ − ( r ⃗ ⋅ u ⃗ ) u ⃗ × u ⃗ = u ⃗ × r ⃗ \vec{O'B} =\vec{u}×\vec{O'A}\\ =\vec{u}×\vec{r}-\vec{u}×(\vec{r}·\vec{u})\vec{u}\\ =\vec{u}×\vec{r}-(\vec{r}·\vec{u})\vec{u}×\vec{u}\\ =\vec{u}×\vec{r} O′B=u×O′A=u×r−u×(r⋅u)u=u×r−(r⋅u)u×u=u×r
这一步,点乘是一个实数,所以会有 u ⃗ × u ⃗ \vec{u}×\vec{u} u×u,而 u ⃗ × u ⃗ = 0 \vec{u}×\vec{u}=0 u×u=0。
说到这里又要再加一个图了,如下图,这个图的意思不用我多说了吧。
通过这个图求
O
′
A
′
⃗
\vec{O'A'}
O′A′:
O
′
A
′
⃗
=
O
′
A
⃗
c
o
s
θ
+
O
′
B
⃗
s
i
n
θ
=
r
⃗
c
o
s
θ
−
(
r
⃗
⋅
u
⃗
)
u
⃗
c
o
s
θ
+
u
⃗
×
r
⃗
s
i
n
θ
\vec{O'A'} =\vec{O'A}cos\theta+\vec{O'B}sin\theta\\ =\vec{r}cos\theta-(\vec{r}·\vec{u})\vec{u}cos\theta+\vec{u}×\vec{r}sin\theta
O′A′=O′Acosθ+O′Bsinθ=rcosθ−(r⋅u)ucosθ+u×rsinθ
这样,
r
⃗
′
\vec{r}'
r′就可以求得:
r
⃗
′
=
O
O
′
⃗
+
O
′
A
′
⃗
=
r
⃗
c
o
s
θ
+
(
1
−
c
o
s
θ
)
(
r
⃗
⋅
u
⃗
)
u
⃗
+
u
⃗
×
r
⃗
s
i
n
θ
\vec{r}' =\vec{OO'}+\vec{O'A'}\\ =\vec{r}cos\theta+(1-cos\theta)(\vec{r}·\vec{u})\vec{u}+\vec{u}×\vec{r}sin\theta
r′=OO′+O′A′=rcosθ+(1−cosθ)(r⋅u)u+u×rsinθ
另外有这样一个公式,在推导的过程中需要用到(公式来源:向量积-拉格朗日公式):
a ⃗ × ( b ⃗ × c ⃗ ) = b ⃗ ( a ⃗ ⋅ c ⃗ ) − c ⃗ ( a ⃗ ⋅ b ⃗ ) \vec{a}×(\vec{b}×\vec{c})=\vec{b}(\vec{a}·\vec{c})-\vec{c}(\vec{a}·\vec{b}) a×(b×c)=b(a⋅c)−c(a⋅b)
我们知道向量的点乘满足交换律,所以可以写成:
a ⃗ × ( b ⃗ × c ⃗ ) = b ⃗ ( a ⃗ ⋅ c ⃗ ) − ( a ⃗ ⋅ b ⃗ ) c ⃗ \vec{a}×(\vec{b}×\vec{c})=\vec{b}(\vec{a}·\vec{c})-(\vec{a}·\vec{b})\vec{c} a×(b×c)=b(a⋅c)−(a⋅b)c
这时候令 a ⃗ = b ⃗ = u ⃗ \vec{a}=\vec{b}=\vec{u} a=b=u, c ⃗ = r ⃗ \vec{c}=\vec{r} c=r,可得:
u ⃗ × ( u ⃗ × r ⃗ ) = u ⃗ ( u ⃗ ⋅ r ⃗ ) − ( u ⃗ ⋅ u ⃗ ) r ⃗ \vec{u}×(\vec{u}×\vec{r})=\vec{u}(\vec{u}·\vec{r})-(\vec{u}·\vec{u})\vec{r} u×(u×r)=u(u⋅r)−(u⋅u)r
现在就跟书上的对照起来啦。接下来还有 u ⃗ ⋅ u ⃗ = 1 \vec{u}·\vec{u}=1 u⋅u=1,所以上式可表示为:
u ⃗ × ( u ⃗ × r ⃗ ) = u ⃗ ( u ⃗ ⋅ r ⃗ ) − r ⃗ = ( r ⃗ ⋅ u ⃗ ) u ⃗ − r ⃗ \vec{u}×(\vec{u}×\vec{r}) =\vec{u}(\vec{u}·\vec{r})-\vec{r}\\ =(\vec{r}·\vec{u})\vec{u}-\vec{r} u×(u×r)=u(u⋅r)−r=(r⋅u)u−r
所以可以得到:
( r ⃗ ⋅ u ⃗ ) u ⃗ = r ⃗ + u ⃗ × ( u ⃗ × r ⃗ ) (\vec{r}·\vec{u})\vec{u}=\vec{r}+\vec{u}×(\vec{u}×\vec{r}) (r⋅u)u=r+u×(u×r)
够详细了吧,我这颗心那,就怕以后看不懂!!
所以可以得到:
r
⃗
′
=
O
O
′
⃗
+
O
′
A
′
⃗
=
r
⃗
c
o
s
θ
+
(
1
−
c
o
s
θ
)
(
r
⃗
⋅
u
⃗
)
u
⃗
+
u
⃗
×
r
⃗
s
i
n
θ
=
r
⃗
c
o
s
θ
+
(
1
−
c
o
s
θ
)
[
r
⃗
+
u
⃗
×
(
u
⃗
×
r
⃗
)
]
+
u
⃗
×
r
⃗
s
i
n
θ
=
r
⃗
+
u
⃗
×
r
⃗
s
i
n
θ
+
(
1
−
c
o
s
θ
)
u
⃗
×
(
u
⃗
×
r
⃗
)
\vec{r}' =\vec{OO'}+\vec{O'A'} =\vec{r}cos\theta+(1-cos\theta)(\vec{r}·\vec{u})\vec{u}+\vec{u}×\vec{r}sin\theta\\ =\vec{r}cos\theta+(1-cos\theta)[\vec{r}+\vec{u}×(\vec{u}×\vec{r})]+\vec{u}×\vec{r}sin\theta\\ =\vec{r}+\vec{u}×\vec{r}sin\theta+(1-cos\theta)\vec{u}×(\vec{u}×\vec{r})
r′=OO′+O′A′=rcosθ+(1−cosθ)(r⋅u)u+u×rsinθ=rcosθ+(1−cosθ)[r+u×(u×r)]+u×rsinθ=r+u×rsinθ+(1−cosθ)u×(u×r)
下面就是将
r
⃗
′
\vec{r}'
r′向R系内投影,表示为:
r
⃗
′
R
=
r
⃗
R
+
(
u
⃗
×
r
⃗
)
R
s
i
n
θ
+
(
1
−
c
o
s
θ
)
[
u
⃗
×
(
u
⃗
×
r
⃗
)
]
R
\vec{r}'^R =\vec{r}^R+(\vec{u}×\vec{r})^Rsin\theta+(1-cos\theta)[\vec{u}×(\vec{u}×\vec{r})]^R
r′R=rR+(u×r)Rsinθ+(1−cosθ)[u×(u×r)]R
记
r
⃗
′
R
=
[
r
x
′
r
y
′
r
z
′
]
,
r
⃗
R
=
[
r
x
r
y
r
z
]
,
u
⃗
R
=
[
l
m
n
]
\vec{r}'^R= \left[ \begin{matrix} r'_x \\ r'_y \\ r'_z \\ \end{matrix} \right] , \space\space\space\space \vec{r}^R= \left[ \begin{matrix} r_x \\ r_y \\ r_z \\ \end{matrix} \right] , \space\space\space\space \vec{u}^R= \left[ \begin{matrix} l\\ m\\ n\\ \end{matrix} \right]
r′R=⎣⎡rx′ry′rz′⎦⎤, rR=⎣⎡rxryrz⎦⎤, uR=⎣⎡lmn⎦⎤
看到这肯定又不懂了。其实就是将转动后得到的 O A ′ ⃗ \vec{OA'} OA′投影到原来的R系中,然后在R系内将投影的向量用坐标表示出来了。
此时根据叉乘表达式可以得到:
(
u
⃗
×
r
⃗
)
R
=
[
0
−
n
m
n
0
−
l
−
m
l
0
]
[
r
⃗
x
r
⃗
y
r
⃗
z
]
(\vec{u}×\vec{r})^R= \left[ \begin{matrix} 0 & -n & m\\ n & 0 & -l\\ -m & l & 0\\ \end{matrix} \right] \left[ \begin{matrix} \vec{r}_x\\ \vec{r}_y\\ \vec{r}_z\\ \end{matrix} \right]
(u×r)R=⎣⎡0n−m−n0lm−l0⎦⎤⎣⎡rxryrz⎦⎤
记
(1)
U
=
[
0
−
n
m
n
0
−
l
−
m
l
0
]
U= \left[ \begin{matrix} 0 & -n & m\\ n & 0 & -l\\ -m & l & 0 \end{matrix} \right] \tag 1
U=⎣⎡0n−m−n0lm−l0⎦⎤(1)
这又是什么鬼?不要慌,下面来拓展反对称阵。
设
a ⃗ = [ a 1 a 2 a 3 ] , b ⃗ = [ b 1 b 2 b 3 ] \vec{a}= \left[ \begin{matrix} a_1\\ a_2\\ a_3\\ \end{matrix} \right] , \space\space\space \vec{b}= \left[ \begin{matrix} b_1\\ b_2\\ b_3\\ \end{matrix} \right] a=⎣⎡a1a2a3⎦⎤, b=⎣⎡b1b2b3⎦⎤
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 3 b 1 − a 1 b 3 a 1 b 2 − a 2 b 1 ] \vec{a}×\vec{b}= \left| \begin{matrix} \vec{i} & \vec{j} & \vec{k}\\ a_1 & a_2 & a_3\\ b_1 & b_2 & b_3\\ \end{matrix} \right| = \left[ \begin{matrix} a_2b_3-a_3b_2\\ a_3b_1-a_1b_3 \\ a_1b_2-a_2b_1 \\ \end{matrix} \right] a×b=∣∣∣∣∣∣ia1b1ja2b2ka3b3∣∣∣∣∣∣=⎣⎡a2b3−a3b2a3b1−a1b3a1b2−a2b1⎦⎤
而
[ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] [ b 1 b 2 b 3 ] = [ a 2 b 3 − a 3 b 2 a 3 b 1 − a 1 b 3 a 1 b 2 − a 2 b 1 ] \left[ \begin{matrix} 0 & -a_3 & a_2\\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 \\ \end{matrix} \right] \left[ \begin{matrix} b_1\\ b_2 \\ b_3 \\ \end{matrix} \right] =\left[ \begin{matrix} a_2b_3-a_3b_2\\ a_3b_1-a_1b_3 \\ a_1b_2-a_2b_1 \\ \end{matrix} \right] ⎣⎡0a3−a2−a30a1a2−a10⎦⎤⎣⎡b1b2b3⎦⎤=⎣⎡a2b3−a3b2a3b1−a1b3a1b2−a2b1⎦⎤
则记
( a × ) = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] , a ⃗ × b ⃗ = ( a × ) b ⃗ (a×)=\left[\begin{matrix} 0 & -a_3 & a_2\\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 \\ \end{matrix} \right] , \space\space\space \vec{a}×\vec{b}=(a×)\vec{b} (a×)=⎣⎡0a3−a2−a30a1a2−a10⎦⎤, a×b=(a×)b
因此可以继续往下推导:
(
u
⃗
×
r
⃗
)
R
=
U
r
⃗
R
,
[
u
⃗
×
(
u
⃗
×
r
⃗
)
]
R
=
U
⋅
U
r
⃗
R
(\vec{u}×\vec{r})^R=U\vec{r}^R , \space\space\space [\vec{u}×(\vec{u}×\vec{r})]^R=U·U\vec{r}^R
(u×r)R=UrR, [u×(u×r)]R=U⋅UrR
所以:
(2)
r
⃗
′
R
=
r
⃗
R
+
(
u
⃗
×
r
⃗
)
R
s
i
n
θ
+
(
1
−
c
o
s
θ
)
[
u
⃗
×
(
u
⃗
×
r
⃗
)
]
R
=
r
⃗
R
+
U
r
⃗
R
s
i
n
θ
+
(
1
−
c
o
s
θ
)
U
⋅
U
r
⃗
R
=
(
I
+
2
U
s
i
n
θ
2
c
o
s
θ
2
+
2
s
i
n
2
θ
2
U
⋅
U
)
r
⃗
R
\vec{r}'^R =\vec{r}^R+(\vec{u}×\vec{r})^Rsin\theta+(1-cos\theta)[\vec{u}×(\vec{u}×\vec{r})]^R\\ =\vec{r}^R+U\vec{r}^Rsin\theta+(1-cos\theta)U·U\vec{r}^R\\ =(I+2Usin\frac{\theta}{2}cos\frac{\theta}{2}+2sin^2\frac{\theta}{2}U·U)\vec{r}^R \tag 2
r′R=rR+(u×r)Rsinθ+(1−cosθ)[u×(u×r)]R=rR+UrRsinθ+(1−cosθ)U⋅UrR=(I+2Usin2θcos2θ+2sin22θU⋅U)rR(2)
令:
(3)
D
=
I
+
2
U
s
i
n
θ
2
c
o
s
θ
2
+
2
s
i
n
2
θ
2
U
⋅
U
D=I+2Usin\frac{\theta}{2}cos\frac{\theta}{2}+2sin^2\frac{\theta}{2}U·U \tag 3
D=I+2Usin2θcos2θ+2sin22θU⋅U(3)
那么
(4)
r
⃗
′
R
=
D
r
⃗
R
\vec{r}'^R =D\vec{r}^R \tag 4
r′R=DrR(4)
之后的关系递推比较简单,假定刚体的固联坐标系为
b
0
b_0
b0,刚体未转动时,刚体固联坐标系与参考坐标系R重合,就是对向量
r
⃗
\vec{r}
r(注意,这是刚体没有转动的向量)而言,在两个坐标系中的矢量是相等的:
r
⃗
R
=
r
⃗
b
0
\vec{r}^R=\vec{r}^{b_0}
rR=rb0
在刚体转动后,因为向量
r
⃗
\vec{r}
r与坐标系
b
0
b_0
b0都随着刚体一起转动,转动结束后得到向量
r
⃗
\vec{r}
r和坐标系b。向量
r
⃗
′
\vec{r}'
r′可以说相对于坐标系b没动:
r
⃗
b
0
=
r
⃗
’
b
\vec{r}^{b_0}=\vec{r}’^b
rb0=r’b
所以:
r
⃗
R
=
r
⃗
’
b
\vec{r}^{R}=\vec{r}’^b
rR=r’b
带入(4)可得:
r
⃗
′
R
=
D
r
⃗
′
b
\vec{r}'^R =D\vec{r}'^b
r′R=Dr′b
那么b系到R系的旋转矩阵即为D:
C
b
R
=
D
=
I
+
2
U
s
i
n
θ
2
c
o
s
θ
2
+
2
s
i
n
2
θ
2
U
⋅
U
C^R_b=D=I+2Usin\frac{\theta}{2}cos\frac{\theta}{2}+2sin^2\frac{\theta}{2}U·U
CbR=D=I+2Usin2θcos2θ+2sin22θU⋅U
后面的展开用四元数表示就不再赘述,但在此列出:
定义:
q
0
=
c
o
s
θ
2
q
1
=
l
s
i
n
θ
2
q
2
=
m
s
i
n
θ
2
q
3
=
n
s
i
n
θ
2
q_0=cos\frac{\theta}{2}\\ q_1=lsin\frac{\theta}{2}\\ q_2=msin\frac{\theta}{2}\\ q_3=nsin\frac{\theta}{2}\\
q0=cos2θq1=lsin2θq2=msin2θq3=nsin2θ
有:
C
b
R
=
[
q
0
2
+
q
1
2
−
q
2
2
−
q
3
2
2
(
q
1
q
2
−
q
0
q
3
)
2
(
q
1
q
3
+
q
0
q
2
)
2
(
q
1
q
2
+
q
0
q
3
)
q
0
2
−
q
1
2
+
q
2
2
−
q
3
2
2
(
q
2
q
3
−
q
0
q
1
)
2
(
q
1
q
3
−
q
0
q
2
)
2
(
q
2
q
3
+
q
0
q
1
)
q
0
2
−
q
1
2
−
q
2
2
+
q
3
2
]
C^R_b= \left[ \begin{matrix} q_0^2+q_1^2-q_2^2-q_3^2 & 2(q_1q_2-q_0q_3) & 2(q_1q_3+q_0q_2)\\ 2(q_1q_2+q_0q_3) & q_0^2-q_1^2+q_2^2-q_3^2 & 2(q_2q_3-q_0q_1)\\ 2(q_1q_3-q_0q_2) & 2(q_2q_3+q_0q_1) & q_0^2-q_1^2-q_2^2+q_3^2\\ \end{matrix} \right]
CbR=⎣⎡q02+q12−q22−q322(q1q2+q0q3)2(q1q3−q0q2)2(q1q2−q0q3)q02−q12+q22−q322(q2q3+q0q1)2(q1q3+q0q2)2(q2q3−q0q1)q02−q12−q22+q32⎦⎤
###资源:
秦永元-惯性导航-资源汇总页中下载
学术不需要积分!