一、Mahony姿态解算——坐标系变换

坐标系

在飞行器姿态解算中,通常以地球坐标系(E系)为绝对坐标系,以机体坐标系(B系)为相对坐标系,并通常设初始状态时E系和B系重合。

坐标系变换

我们将空间中某一向量从一个坐标系,通过坐标系变换,映射到另一个坐标系的过程,称做坐标系变换。假设有两个同原坐标系 A A A B B B,其中坐标系 B B B A A A Z Z Z轴旋转 90 ° 90° 90°得到。此时有一个位于坐标系A中的向量 a A = [ 1 0 0 ] a_{A}=\begin{bmatrix}1 \\ 0 \\ 0 \end{bmatrix} aA= 100 ,若我们要得到该向量在坐标系 B B B中的坐标值。由于两个坐标系的关系简单,因此可以很快得到 a B = [ 0 − 1 0 ] a_{B}=\begin{bmatrix}0 \\ -1 \\ 0 \end{bmatrix} aB= 010 。那么,就存在一个变换矩阵 C A B C_{A}^{B} CAB满足关系:
a B = C A B a A a_{B}=C_{A}^{B}a_{A} aB=CABaA
这个矩阵 C A B C_{A}^{B} CAB就称作从 A A A系到 B B B的变换矩阵。

基于欧拉角的坐标变换

欧拉角的坐标变换本质是,以绕地球坐标系三个坐标轴的单独旋转合成机体坐标系的复合旋转
设绕 Z Z Z轴旋转 α ° \alpha° α°,设绕 Y Y Y轴旋转 β ° \beta° β°,设绕 X X X轴旋转 γ ° \gamma° γ°
Z Z Z轴旋转为例子。
一、Mahony姿态解算——坐标系变换_第1张图片
图片引自《惯性导航》,作者秦永元,侵删
根据几何关系,可以得到
r x 2 = O A + A B + B C r x 2 = O D c o s α + B D s i n α + B F s i n α r x 2 = O D c o s α + D F s i n α r x 2 = r x 1 c o s α + r y 1 s i n α r_{x2}=OA+AB+BC \\ r_{x2}=ODcos\alpha+BDsin\alpha+BFsin\alpha \\ r_{x2}=ODcos\alpha+DFsin\alpha \\ r_{x2}=r_{x1}cos\alpha+r_{y1}sin\alpha \\ rx2=OA+AB+BCrx2=ODcosα+BDsinα+BFsinαrx2=ODcosα+DFsinαrx2=rx1cosα+ry1sinα
r y 2 = D E − D A r y 2 = D F c o s α − O D s i n α r y 2 = r y 1 c o s α − r x 1 s i n α r_{y2}=DE-DA \\ r_{y2}=DFcos\alpha-ODsin\alpha \\ r_{y2}=r_{y1}cos\alpha-r_{x1}sin\alpha ry2=DEDAry2=DFcosαODsinαry2=ry1cosαrx1sinα
以矩阵形式表达
[ r x 2 r y 2 ] = [ c o s α s i n α − s i n α c o s α ]   [ r x 1 r y 1 ] \begin{bmatrix} r_{x2} \\ r_{y2}\end{bmatrix}= \begin{bmatrix} cos\alpha & sin\alpha \\ -sin\alpha &cos\alpha\end{bmatrix}\ \begin{bmatrix} r_{x1} \\ r_{y1}\end{bmatrix} [rx2ry2]=[cosαsinαsinαcosα] [rx1ry1]
但是对于一个三维向量来说,绕 Z Z Z轴旋转并不改变他的 z z z坐标,因此完整的变换过程应该为
[ r x 2 r y 2 r z 2 ] = [ c o s α s i n α 0 − s i n α c o s α 0 0 0 1 ]   [ r x 1 r y 1 r z 1 ] \begin{bmatrix} r_{x2} \\ r_{y2}\\ r_{z2}\end{bmatrix}= \begin{bmatrix} cos\alpha & sin\alpha &0\\ -sin\alpha &cos\alpha &0 \\ 0 &0 &1\end{bmatrix}\ \begin{bmatrix} r_{x1} \\ r_{y1}\\r_{z1}\end{bmatrix} rx2ry2rz2 = cosαsinα0sinαcosα0001   rx1ry1rz1
因此,可以得到旋转 Z Z Z轴时的旋转矩阵为
r o t ( Z , α ) = [ c o s α s i n α 0 − s i n α c o s α 0 0 0 1 ] rot(Z,\alpha)= \begin{bmatrix} cos\alpha & sin\alpha &0\\ -sin\alpha &cos\alpha &0 \\ 0 &0 &1\end{bmatrix} rot(Z,α)= cosαsinα0sinαcosα0001
同理,可以推导得到绕 Y Y Y轴和 X X X轴的旋转矩阵
r o t ( Y , β ) = [ c o s β 0 − s i n β 0 1 0 s i n β 0 c o s β ] rot(Y,\beta)= \begin{bmatrix} cos\beta& 0&-sin\beta\\ 0 &1 &0 \\ sin\beta &0 &cos\beta\end{bmatrix} rot(Y,β)= cosβ0sinβ010sinβ0cosβ
r o t ( X , γ ) = [ 1 0 0 0 c o s γ s i n γ 0 − s i n γ c o s γ ] rot(X,\gamma)= \begin{bmatrix} 1 &0 &0\\ 0&cos\gamma& sin\gamma\\ 0 &-sin\gamma &cos\gamma\end{bmatrix} rot(X,γ)= 1000cosγsinγ0sinγcosγ
Z − Y − X Z-Y-X ZYX的顺序合成复合旋转,可以得到:
C E B = r o t ( X , γ ) r o t ( Y , β ) r o t ( Z , α ) = [ c o s β c o s α c o s β s i n α − s i n β s i n γ s i n β c o s α − s i n α c o s γ s i n α s i n β s i n γ + c o s γ c o s α s i n γ c o s β c o s α c o s γ s i n β + s i n γ s i n α s i n α c o s γ s i n β − s i n γ c o s α c o s γ c o s β ] C_{E}^{B}=rot(X,\gamma)rot(Y,\beta)rot(Z,\alpha)= \begin{bmatrix} cos\beta cos\alpha &cos\beta sin\alpha &-sin\beta\\ sin\gamma sin\beta cos\alpha -sin\alpha cos\gamma&sin\alpha sin\beta sin\gamma+cos\gamma cos\alpha & sin\gamma cos\beta\\ cos\alpha cos\gamma sin\beta+sin\gamma sin\alpha &sin\alpha cos\gamma sin\beta-sin\gamma cos\alpha &cos\gamma cos\beta \end{bmatrix} CEB=rot(X,γ)rot(Y,β)rot(Z,α)= cosβcosαsinγsinβcosαsinαcosγcosαcosγsinβ+sinγsinαcosβsinαsinαsinβsinγ+cosγcosαsinαcosγsinβsinγcosαsinβsinγcosβcosγcosβ
这里要稍微提一下,从单轴的旋转矩阵可以看出,每个矩阵都是正交矩阵,因此变换矩阵 C E B C_{E}^{B} CEB也是正交矩阵,即满足关系
( C E B ) T = ( C E B ) − = C B E (C_{E}^{B})^{T}=(C_{E}^{B})^{-}=C_{B}^{E} (CEB)T=(CEB)=CBE
即只要知道其中一个变换矩阵就可以实现双向变换过程。
但是由于欧拉法的变换是通过合成单独旋转得到的,就存在一个万向锁的问题(Gambal lock),有兴趣的可以自行查找资料,此处不作赘述。

基于四元数的坐标变换

关于四元数想更直观系统了解的可以参考这个视频

对比欧拉角的坐标变换,四元数的坐标变换将整个坐标系的复合旋转,直接看作是坐标系绕某一过原点的轴旋转得到的结果。而这种旋转可以用一个单位四元数来描述,即
Q = c o s θ 2 + ( l i ⃗ + m j ⃗ + n k ⃗ ) s i n θ 2 Q=cos\frac{\theta}{2}+(l\vec{i}+m\vec{j }+n\vec{k})sin\frac{\theta}{2} Q=cos2θ+(li +mj +nk )sin2θ
其中 i ⃗ \vec{i} i j ⃗ \vec{j} j k ⃗ \vec{k} k 是地球坐标系的基向量,并且满足关系 l 2 + m 2 + n 2 = 1 l^{2} + m^{2}+n^{2}=1 l2+m2+n2=1 θ \theta θ是坐标系绕该轴所旋转的角度。
u ⃗ = [ l m n ] \vec{u}=\begin{bmatrix} l\\m\\n\end{bmatrix} u = lmn
一、Mahony姿态解算——坐标系变换_第2张图片
图片引自《惯性导航》,作者秦永元,侵删
向量 r ⃗ \vec{r} r 在机体坐标系中相对静止,但随着机体坐标系的旋转,其旋转后的向量会在地球坐标系中发生变化。我们把变化后的向量定义为 r ⃗ ′ \vec{r}^{'} r 。通过图中的几何关系可以得到。
O O ′ = ( r ⃗ ⋅ u ⃗ ) u ⃗ O ′ A = r ⃗ − ( r ⃗ ⋅ u ⃗ ) u ⃗ O ′ B = u ⃗ × O ′ A = u ⃗ × ( r ⃗ − ( r ⃗ ⋅ u ⃗ ) u ⃗ ) = u ⃗ × r ⃗ − u ⃗ × ( r ⃗ ⋅ u ⃗ ) u ⃗ = u ⃗ × r ⃗ O ′ A ′ = O ′ A c o s θ + O ′ B s i n θ = ( r ⃗ − ( r ⃗ ⋅ u ⃗ ) u ⃗ ) c o s θ + ( u ⃗ × r ⃗ ) s i n θ = r ⃗ c o s θ − ( r ⃗ ⋅ u ⃗ ) u ⃗ c o s θ + ( u ⃗ × r ⃗ ) s i n θ O A ′ = O O ′ + O ′ A ′ = ( r ⃗ ⋅ u ⃗ ) u ⃗ + r ⃗ c o s θ − ( r ⃗ ⋅ u ⃗ ) u ⃗ c o s θ + ( u ⃗ × r ⃗ ) s i n θ = ( 1 − c o s θ ) ( r ⃗ ⋅ u ⃗ ) u ⃗ + r ⃗ c o s θ + ( u ⃗ × r ⃗ ) s i n θ OO^{'}= (\vec{r}\cdot \vec{u})\vec{u} \\ O^{'}A=\vec{r}-(\vec{r}\cdot \vec{u})\vec{u} \\ O^{'}B=\vec{u}\times O^{'}A=\vec{u} \times (\vec{r}-(\vec{r}\cdot \vec{u})\vec{u})=\vec{u} \times \vec{r}-\vec{u}\times(\vec{r}\cdot \vec{u})\vec{u}=\vec{u} \times \vec{r} \\ O^{'}A^{'}=O^{'}Acos\theta+O^{'}Bsin\theta=(\vec{r}-(\vec{r}\cdot \vec{u})\vec{u})cos\theta+(\vec{u} \times \vec{r} )sin\theta \\ =\vec{r}cos\theta-(\vec{r}\cdot \vec{u})\vec{u}cos\theta+(\vec{u} \times \vec{r} )sin\theta \\ OA^{'}=OO^{'}+O^{'}A^{'}=(\vec{r}\cdot \vec{u})\vec{u}+\vec{r}cos\theta-(\vec{r}\cdot \vec{u})\vec{u}cos\theta+(\vec{u} \times \vec{r} )sin\theta \\ =(1-cos\theta)(\vec{r}\cdot \vec{u})\vec{u}+\vec{r}cos\theta+(\vec{u} \times \vec{r} )sin\theta OO=(r u )u OA=r (r u )u OB=u ×OA=u ×(r (r u )u )=u ×r u ×(r u )u =u ×r OA=OAcosθ+OBsinθ=(r (r u )u )cosθ+(u ×r )sinθ=r cosθ(r u )u cosθ+(u ×r )sinθOA=OO+OA=(r u )u +r cosθ(r u )u cosθ+(u ×r )sinθ=(1cosθ)(r u )u +r cosθ+(u ×r )sinθ
又对于向量的叉乘公式,有矢量三重积
a × ( b × c ) = ( a ⋅ c ) b − ( a ⋅ b ) c a\times( b\times c)=(a\cdot c)b-(a\cdot b)c a×(b×c)=(ac)b(ab)c

简单证明一下
b b b c c c叉乘得到垂直于 b c bc bc平面的向量,因此当 a a a和该向量进行叉乘时,得到的向量肯定位于 b c bc bc平面,就满足关系
a × ( b × c ) = m b + n c a\times (b\times c)=mb+nc a×(b×c)=mb+nc
其中 m m m n n n为常数。又向量 a a a和向量 m b + n c mb+nc mb+nc垂直,则满足关系
a ⋅ ( m b + c n ) = m a b + n a c = 0 a\cdot(mb+cn)=mab+nac=0 a(mb+cn)=mab+nac=0
为了使等式成立,可以得到
m = a c , n = − a b m=ac,n=-ab m=ac,n=ab
得证,此证明方法也称为流氓证法\doge

则令 c = r ⃗ c=\vec{r} c=r a = b = u ⃗ a=b=\vec{u} a=b=u ,可以得到
u ⃗ × ( u ⃗ × r ⃗ ) = ( u ⃗ ⋅ r ⃗ ) u ⃗ − ( u ⃗ ⋅ u ⃗ ) r ⃗ = ( u ⃗ ⋅ r ⃗ ) u ⃗ − r ⃗ \vec{u}\times(\vec{u}\times\vec{r})=(\vec{u}\cdot \vec{r})\vec{u}-(\vec{u}\cdot\vec{u})\vec{r}=(\vec{u}\cdot \vec{r})\vec{u}-\vec{r} u ×(u ×r )=(u r )u (u u )r =(u r )u r
则可以得到
( u ⃗ ⋅ r ⃗ ) u ⃗ = u ⃗ × ( u ⃗ × r ⃗ ) + r ⃗ (\vec{u}\cdot \vec{r})\vec{u}=\vec{u}\times(\vec{u}\times\vec{r})+\vec{r} (u r )u =u ×(u ×r )+r
则进一步推导得到
O A ′ = ( 1 − c o s θ ) ( r ⃗ ⋅ u ⃗ ) u ⃗ + r ⃗ c o s θ + ( u ⃗ × r ⃗ ) s i n θ = ( 1 − c o s θ ) ( u ⃗ × ( u ⃗ × r ⃗ ) + r ⃗ ) + r ⃗ c o s θ + ( u ⃗ × r ⃗ ) s i n θ = ( 1 − c o s θ ) ( u ⃗ × ( u ⃗ × r ⃗ ) ) + r ⃗ + ( u ⃗ × r ⃗ ) s i n θ OA^{'}=(1-cos\theta)(\vec{r}\cdot \vec{u})\vec{u}+\vec{r}cos\theta+(\vec{u} \times \vec{r} )sin\theta \\ =(1-cos\theta)(\vec{u}\times(\vec{u}\times\vec{r})+\vec{r})+\vec{r}cos\theta+(\vec{u} \times \vec{r} )sin\theta \\ = (1-cos\theta)(\vec{u}\times(\vec{u}\times\vec{r}))+\vec{r}+(\vec{u} \times \vec{r} )sin\theta OA=(1cosθ)(r u )u +r cosθ+(u ×r )sinθ=(1cosθ)(u ×(u ×r )+r )+r cosθ+(u ×r )sinθ=(1cosθ)(u ×(u ×r ))+r +(u ×r )sinθ

这里要插一个补充的内容
对于叉乘来说,假设有两个任意向量 A ⃗ = [ a 1 a 2 a 3 ] \vec{A}=\begin{bmatrix} a1 \\ a2 \\ a3 \end{bmatrix} A = a1a2a3 B ⃗ = [ b 1 b 2 b 3 ] \vec{B}=\begin{bmatrix} b1 \\ b2 \\ b3 \end{bmatrix} B = b1b2b3 。 那么两个向量的叉乘可以写成
A ⃗ × B ⃗ = ∣ i ⃗ a 1 b 1 j ⃗ a 2 b 2 k ⃗ a 3 b 3 ∣ = [ a 2 b 3 − b 2 a 3 a 3 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 1 b 2 b 3 ] = C ⋅ B ⃗ \vec{A}\times\vec{B}=\begin{vmatrix} \vec{i}&a1 & b1\\ \vec{j}& a2 & b2\\ \vec{k}& a3 &b3 \end{vmatrix}=\begin{bmatrix} a2b3-b2a3\\a3b1-a1b3\\a1b2-a2b 1\end{bmatrix} =\begin{bmatrix} 0&-a3&a2\\a3&0&-a1\\-a2&a1&0\end{bmatrix}\begin{bmatrix} b1 \\ b2 \\ b3 \end{bmatrix}=C\cdot\vec{B} A ×B = i j k a1a2a3b1b2b3 = a2b3b2a3a3b1a1b3a1b2a2b1 = 0a3a2a30a1a2a10 b1b2b3 =CB
所以可以把叉乘理解为对叉乘右侧的一次坐标变换。

u ⃗ × X ⃗ = C ⋅ X ⃗ \vec{u}\times\vec{X}=C\cdot\vec{X} u ×X =CX ,其中 u ⃗ \vec{u} u X ⃗ = [ x 1 x 2 x 3 ] \vec{X}=\begin{bmatrix}x1\\x2\\x3\end{bmatrix} X = x1x2x3 为任意向量, C C C为等效矩阵。
[ l m n ] × [ x 1 x 2 x 3 ] = [ − n x 2 + m x 3 n x 1 − l x 3 − m x 1 + l x 2 ] = [ 0 − n m n 0 − l − m l 0 ] [ x 1 x 2 x 3 ] \begin{bmatrix}l\\m\\n\end{bmatrix}\times\begin{bmatrix}x1\\x2\\x3\end{bmatrix}=\begin{bmatrix}-nx2+mx3\\nx1-lx3\\-mx1+lx2\end{bmatrix}=\begin{bmatrix}0&-n&m\\n&0&-l\\-m&l&0\end{bmatrix}\begin{bmatrix}x1\\x2\\x3\end{bmatrix} lmn × x1x2x3 = nx2+mx3nx1lx3mx1+lx2 = 0nmn0lml0 x1x2x3
C = [ 0 − n m n 0 − l − m l 0 ] C=\begin{bmatrix}0&-n&m\\n&0&-l\\-m&l&0\end{bmatrix} C= 0nmn0lml0
那么可以继续推导得到
O A ′ = r ⃗ ′ = ( 1 − c o s θ ) C ⋅ ( C ⋅ r ⃗ ) + r ⃗ + C ⋅ r ⃗ s i n θ = ( 1 − c o s θ ) C 2 ⋅ r ⃗ + r ⃗ + C s i n θ ⋅ r ⃗ OA^{'}=\vec{r}^{'}=(1-cos\theta)C\cdot (C\cdot\vec{r})+\vec{r}+C\cdot\vec{r}sin\theta=(1-cos\theta) C^{2}\cdot\vec{r}+\vec{r}+Csin\theta\cdot\vec{r} OA=r =(1cosθ)C(Cr )+r +Cr sinθ=(1cosθ)C2r +r +Csinθr
整理得到
r ⃗ ′ = ( I + ( 1 − c o s θ ) C 2 + C s i n θ ) r ⃗ \vec{r}^{'}=(I+(1-cos\theta)C^{2}+Csin\theta)\vec{r} r =(I+(1cosθ)C2+Csinθ)r
利用三角函数的半角公式和倍角公式可以得到
1 − c o s θ = 2 s i n 2 θ 2 s i n θ = 2 s i n θ 2 c o s θ 2 1-cos\theta =2sin^{2}\frac{\theta}{2} \\ sin\theta =2sin\frac{\theta}{2}cos\frac{\theta}{2} 1cosθ=2sin22θsinθ=2sin2θcos2θ
代入后可以得到
r ⃗ ′ = ( I + 2 s i n 2 θ 2 C 2 + 2 s i n θ 2 c o s θ 2 C ) r ⃗ \vec{r}^{'}=(I+2sin^{2}\frac{\theta}{2}C^{2}+ 2sin\frac{\theta}{2}cos\frac{\theta}{2}C)\vec{r} r =(I+2sin22θC2+2sin2θcos2θC)r

写到这里发现忽略了一个点的描述。
在一开始的时候我们提到,初始时刻未发生旋转时,我们假设机体坐标系和地球坐标系重合,因此空间中的任意向量无论在机体坐标系还是地球坐标系都是相同的坐标。因此,可以把向量 r ⃗ \vec{r} r 看作是初始时刻的向量, r ⃗ ′ \vec{r}^{'} r 是旋转后映射在地球坐标系的新坐标值(因为向量是在机体坐标系中固定静止的)。也就是说, r ⃗ \vec{r} r 既是初始时刻向量在地球坐标系的坐标,也是向量在机体坐标系从始至终的坐标。那么可以上面的变换可以理解为
r ⃗ ′ = D r ⃗ = D r ⃗ B r ⃗ E = D B E ⋅ r ⃗ B \vec{r}^{'} = D \vec{r}=D \vec{r}^{B} \\ \vec{r}^{E} = D_{B}^{E} \cdot\vec{r}^{B} r =Dr =Dr Br E=DBEr B
包括上面提到的欧拉角的坐标变换也是基于这个前提进行的。可以回头看思考以下。

那么从机体坐标系到地球坐标系的变换矩阵 D B E D_{B}^{E} DBE表达式为
D B E = [ 1 0 0 0 1 0 0 0 1 ] + 2 s i n 2 θ 2 [ 0 − n m n 0 − l − m l 0 ] [ 0 − n m n 0 − l − m l 0 ] + 2 s i n θ 2 c o s θ 2 [ 0 − n m n 0 − l − m l 0 ] = [ 1 0 0 0 1 0 0 0 1 ] + 2 s i n 2 θ 2 [ − n 2 − m 2 l m l n l m − n 2 − l 2 m n l n m n − m 2 − l 2 ] + 2 s i n θ 2 c o s θ 2 [ 0 − n m n 0 − l − m l 0 ] = [ 1 − 2 s i n 2 θ 2 n 2 − 2 s i n 2 θ 2 m 2 2 s i n 2 θ 2 l m − 2 s i n θ 2 c o s θ 2 n 2 s i n 2 θ 2 l n + 2 s i n θ 2 c o s θ 2 m 2 s i n 2 θ 2 l m + 2 s i n θ 2 c o s θ 2 n 1 − 2 s i n 2 θ 2 n 2 − 2 s i n 2 θ 2 l 2 2 s i n 2 θ 2 m n − 2 s i n θ 2 c o s θ 2 l 2 s i n 2 θ 2 l n − 2 s i n θ 2 c o s θ 2 m 2 s i n 2 θ 2 m n + 2 s i n θ 2 c o s θ 2 l 1 − 2 s i n 2 θ 2 m 2 − 2 s i n 2 θ 2 l 2 ] D_{B}^{E}=\begin{bmatrix}1&0&0\\0&1&0\\0&0&1\end{bmatrix}+2sin^{2}\frac{\theta}{2}\begin{bmatrix}0&-n&m\\n&0&-l\\-m&l&0\end{bmatrix}\begin{bmatrix}0&-n&m\\n&0&-l\\-m&l&0\end{bmatrix}+2sin\frac{\theta}{2}cos\frac{\theta}{2}\begin{bmatrix}0&-n&m\\n&0&-l\\-m&l&0\end{bmatrix} \\ =\begin{bmatrix}1&0&0\\0&1&0\\0&0&1\end{bmatrix}+2sin^{2}\frac{\theta}{2}\begin{bmatrix}-n^{2}-m^{2}&lm&ln\\lm&-n^{2}-l^{2}&mn\\ln&mn&-m^{2}-l^{2}\end{bmatrix}+2sin\frac{\theta}{2}cos\frac{\theta}{2}\begin{bmatrix}0&-n&m\\n&0&-l\\-m&l&0\end{bmatrix}\\ =\begin{bmatrix}1-2sin^{2}\frac{\theta}{2}n^{2}-2sin^{2}\frac{\theta}{2}m^{2} &2sin^{2}\frac{\theta}{2}lm-2sin\frac{\theta}{2}cos\frac{\theta}{2}n &2sin^{2}\frac{\theta}{2}ln+2sin\frac{\theta}{2}cos\frac{\theta}{2}m \\2sin^{2}\frac{\theta}{2}lm+2sin\frac{\theta}{2}cos\frac{\theta}{2}n &1-2sin^{2}\frac{\theta}{2}n^{2}-2sin^{2}\frac{\theta}{2}l^{2} &2sin^{2}\frac{\theta}{2}mn-2sin\frac{\theta}{2}cos\frac{\theta}{2}l \\2sin^{2}\frac{\theta}{2}ln-2sin\frac{\theta}{2}cos\frac{\theta}{2}m &2sin^{2}\frac{\theta}{2}mn+2sin\frac{\theta}{2}cos\frac{\theta}{2}l &1-2sin^{2}\frac{\theta}{2}m^{2}-2sin^{2}\frac{\theta}{2}l^{2} \end{bmatrix} DBE= 100010001 +2sin22θ 0nmn0lml0 0nmn0lml0 +2sin2θcos2θ 0nmn0lml0 = 100010001 +2sin22θ n2m2lmlnlmn2l2mnlnmnm2l2 +2sin2θcos2θ 0nmn0lml0 = 12sin22θn22sin22θm22sin22θlm+2sin2θcos2θn2sin22θln2sin2θcos2θm2sin22θlm2sin2θcos2θn12sin22θn22sin22θl22sin22θmn+2sin2θcos2θl2sin22θln+2sin2θcos2θm2sin22θmn2sin2θcos2θl12sin22θm22sin22θl2

可把我累成狗了

接下来这一步就要回到我们一开始提到的单位四元数的表达形式了
Q = c o s θ 2 + ( l i ⃗ + m j ⃗ + n k ⃗ ) s i n θ 2 Q=cos\frac{\theta}{2}+(l\vec{i}+m\vec{j }+n\vec{k})sin\frac{\theta}{2} Q=cos2θ+(li +mj +nk )sin2θ
q 0 = c o s θ 2 q_{0}=cos\frac{\theta}{2} q0=cos2θ q 1 = l s i n θ 2 q_{1}=lsin\frac{\theta}{2} q1=lsin2θ q 2 = m s i n θ 2 q_{2}=msin\frac{\theta}{2} q2=msin2θ q 3 = n s i n θ 2 q_{3}=nsin\frac{\theta}{2} q3=nsin2θ,则四元数可以写成
Q = q 0 + q 1 i ⃗ + q 2 j ⃗ + q 3 k ⃗ Q=q_{0}+q_{1}\vec{i}+q_{2}\vec{j}+q_{3}\vec{k} Q=q0+q1i +q2j +q3k
并且坐标转换矩阵可以写成
D B E = [ 1 − 2 s i n 2 θ 2 n 2 − 2 s i n 2 θ 2 m 2 2 s i n 2 θ 2 l m − 2 s i n θ 2 c o s θ 2 n 2 s i n 2 θ 2 l n + 2 s i n θ 2 c o s θ 2 m 2 s i n 2 θ 2 l m + 2 s i n θ 2 c o s θ 2 n 1 − 2 s i n 2 θ 2 n 2 − 2 s i n 2 θ 2 l 2 2 s i n 2 θ 2 m n − 2 s i n θ 2 c o s θ 2 l 2 s i n 2 θ 2 l n − 2 s i n θ 2 c o s θ 2 m 2 s i n 2 θ 2 m n + 2 s i n θ 2 c o s θ 2 l 1 − 2 s i n 2 θ 2 m 2 − 2 s i n 2 θ 2 l 2 ] = [ 1 − 2 q 3 2 − 2 q 2 2 2 q 1 q 2 − 2 q 0 q 3 2 q 1 q 3 + 2 q 0 q 2 2 q 1 q 2 + 2 q 0 q 3 1 − 2 q 3 2 − 2 q 1 2 2 q 2 q 3 − 2 q 0 q 1 2 q 1 q 3 − 2 q 0 q 2 2 q 2 q 3 + 2 q 0 q 1 1 − 2 q 2 2 − 2 q 1 2 ] D_{B}^{E} =\begin{bmatrix}1-2sin^{2}\frac{\theta}{2}n^{2}-2sin^{2}\frac{\theta}{2}m^{2} &2sin^{2}\frac{\theta}{2}lm-2sin\frac{\theta}{2}cos\frac{\theta}{2}n &2sin^{2}\frac{\theta}{2}ln+2sin\frac{\theta}{2}cos\frac{\theta}{2}m \\2sin^{2}\frac{\theta}{2}lm+2sin\frac{\theta}{2}cos\frac{\theta}{2}n &1-2sin^{2}\frac{\theta}{2}n^{2}-2sin^{2}\frac{\theta}{2}l^{2} &2sin^{2}\frac{\theta}{2}mn-2sin\frac{\theta}{2}cos\frac{\theta}{2}l \\2sin^{2}\frac{\theta}{2}ln-2sin\frac{\theta}{2}cos\frac{\theta}{2}m &2sin^{2}\frac{\theta}{2}mn+2sin\frac{\theta}{2}cos\frac{\theta}{2}l &1-2sin^{2}\frac{\theta}{2}m^{2}-2sin^{2}\frac{\theta}{2}l^{2} \end{bmatrix} \\ =\begin{bmatrix}1-2q_{3}^2-2q_{2}^2 &2q_{1}q_{2}-2q_{0}q_{3} &2q_{1}q_{3}+2q_{0}q_{2} \\2q_{1}q_{2}+2q_{0}q_{3} &1-2q_{3}^2-2q_{1}^2 &2q_{2}q_{3}-2q_{0}q_{1} \\2q_{1}q_{3}-2q_{0}q_{2} &2q_{2}q_{3}+2q_{0}q_{1} &1-2q_{2}^2-2q_{1}^2 \end{bmatrix} DBE= 12sin22θn22sin22θm22sin22θlm+2sin2θcos2θn2sin22θln2sin2θcos2θm2sin22θlm2sin2θcos2θn12sin22θn22sin22θl22sin22θmn+2sin2θcos2θl2sin22θln+2sin2θcos2θm2sin22θmn2sin2θcos2θl12sin22θm22sin22θl2 = 12q322q222q1q2+2q0q32q1q32q0q22q1q22q0q312q322q122q2q3+2q0q12q1q3+2q0q22q2q32q0q112q222q12
又该四元数是单位四元数,即满足 q 0 2 + q 1 2 + q 2 2 + q 3 2 = 1 q_{0}^{2}+q_{1}^{2}+q_{2}^{2}+q_{3}^{2}=1 q02+q12+q22+q32=1
可以简化得到
D B E = [ q 0 2 + q 1 2 − q 3 2 − q 2 2 2 q 1 q 2 − 2 q 0 q 3 2 q 1 q 3 + 2 q 0 q 2 2 q 1 q 2 + 2 q 0 q 3 q 0 2 + q 2 2 − q 1 2 − q 3 2 2 q 2 q 3 − 2 q 0 q 1 2 q 1 q 3 − 2 q 0 q 2 2 q 2 q 3 + 2 q 0 q 1 q 0 2 + q 3 2 − q 1 2 − q 2 2 ] D_{B}^{E} =\begin{bmatrix}q_{0}^2+q_{1}^2-q_{3}^2-q_{2}^2 &2q_{1}q_{2}-2q_{0}q_{3} &2q_{1}q_{3}+2q_{0}q_{2} \\2q_{1}q_{2}+2q_{0}q_{3} &q_{0}^2+q_{2}^2-q_{1}^2-q_{3}^2 &2q_{2}q_{3}-2q_{0}q_{1} \\2q_{1}q_{3}-2q_{0}q_{2} &2q_{2}q_{3}+2q_{0}q_{1} &q_{0}^2+q_{3}^2-q_{1}^2-q_{2}^2 \end{bmatrix} DBE= q02+q12q32q222q1q2+2q0q32q1q32q0q22q1q22q0q3q02+q22q12q322q2q3+2q0q12q1q3+2q0q22q2q32q0q1q02+q32q12q22
同样,这个变换矩阵是正交矩阵,性质与欧拉角得到的变换矩阵的完全一致。
那么就可以得到欧拉角和四元数的关系。
{ 2 q 1 q 3 − 2 q 0 q 2 = − sin ⁡ β 2 q 0 q 1 + 2 q 2 q 3 = sin ⁡ γ cos ⁡ β q 0 2 − q 1 2 − q 2 2 + q 3 2 = cos ⁡ γ cos ⁡ β q 0 2 + q 1 2 − q 2 2 − q 3 2 = cos ⁡ α cos ⁡ β 2 q 0 q 3 + 2 q 1 q 2 = cos ⁡ β sin ⁡ α \left\{\begin{array}{l} 2 q_{1} q_{3}-2 q_{0} q_{2}=-\sin \beta \\ 2 q_{0} q_{1}+2 q_{2} q_{3}=\sin \gamma \cos \beta \\ q_{0}^{2}-q_{1}^{2}-q_{2}^{2}+q_{3}^{2}=\cos \gamma \cos \beta \\ q_{0}^{2}+q_{1}^{2}-q_{2}^{2}-q_{3}^{2}=\cos \alpha \cos \beta \\ 2 q_{0} q_{3}+2 q_{1} q_{2}=\cos \beta \sin \alpha \end{array}\right. 2q1q32q0q2=sinβ2q0q1+2q2q3=sinγcosβq02q12q22+q32=cosγcosβq02+q12q22q32=cosαcosβ2q0q3+2q1q2=cosβsinα
{ β = arcsin ⁡ ( 2 q 1 q 3 − 2 q 0 q 2 ) γ = arctan ⁡ ( 2 q 0 q 1 + 2 q 2 q 3 q 0 2 − q 1 2 − q 2 2 + q 3 2 ) α = arctan ⁡ ( 2 q 0 q 3 + 2 q 1 q 2 q 0 2 + q 1 2 − q 2 2 − q 3 2 ) \left\{\begin{array}{l} \beta=\arcsin \left(2 q_{1} q_{3}-2 q_{0} q_{2}\right) \\ \gamma=\arctan \left(\frac{2 q_{0} q_{1}+2 q_{2} q_{3}}{q_{0}^{2}-q_{1}^{2}-q_{2}^{2}+q_{3}^{2}}\right) \\ \alpha=\arctan \left(\frac{2 q_{0} q_{3}+2 q_{1} q_{2}}{q_{0}^{2}+q_{1}^{2}-q_{2}^{2}-q_{3}^{2}}\right) \end{array}\right. β=arcsin(2q1q32q0q2)γ=arctan(q02q12q22+q322q0q1+2q2q3)α=arctan(q02+q12q22q322q0q3+2q1q2)
太累了不把过程详细列出来了,自行请便吧。

到这里,不知道在看的过程中有没有思考过这样一个问题,为什么我旋转角度是 θ \theta θ,但是四元数里的角度却是 θ 2 \frac{\theta}{2} 2θ,这个问题我在新接触的时候也疑惑过。现在从结论上来看,半角是为了方便计算后面的变换矩阵进行妥协的结果吧(纯粹个人马后炮结论)。那如果四元数变成半角是否会影响到结果以及如何实现的问题,事实上从推导过程可以看出,变换矩阵是基于旋转 θ \theta θ得到的几何关系推导得到的,因此不管四元数中是否为半角,都将不影响其结论的正确性,影响的仅仅是在实际开发过程中计算四元数四个参数的过程。这个作为后续的内容继续补充。

你可能感兴趣的:(算法,线性代数,矩阵,线性代数,算法,几何学)