三、四元数以及陀螺仪角速度


前言

本节结来讨论四元数


一、从复数到四元数

众所周知,在复平面上旋转变换非常容易,那么有没有比复数系更加复杂的数系,理论上是没有,因为一旦我们对复数进行推广就必须牺牲乘法交换律。那么牺牲交换律过后我们能把复数扩张到哪种程度呢?
首先复数的一般形式为 a + b i a+bi a+bi,那么我们先来看能不能增加一个虚数单元呢?
假设复数扩张后我们得到数的更一般的形式 a + b i + c j a+bi+cj a+bi+cj,其中 a , b , c a,b,c a,b,c为实数, i , j i,j i,j是两个虚数单位,并且满足已知的复数乘法规则: i i = − 1 , j j = − 1 ii=-1,jj=-1 ii=1,jj=1
显然推广后在做乘法的时候会出现 i j ij ij乘积:我们假设 i j = a + b i + c j ij=a+bi+cj ij=a+bi+cj
那么就有 − j = i i j = i ( a + b i + c j ) = a i − b + c i j = a i − b + c ( a + b i + c j ) = c a − b + ( a + c b ) i + c 2 j -j=iij=i(a+bi+cj)=ai-b+cij=ai-b+c(a+bi+cj)=ca-b+(a+cb)i+c^2j j=iij=i(a+bi+cj)=aib+cij=aib+c(a+bi+cj)=cab+(a+cb)i+c2j,显然这个式子要成立,我们需要实数 c c c满足 c 2 = − 1 c^2=-1 c2=1,很遗憾我们看到“三元数”是不能存在的。
上面得到的教训是 i j ij ij不属于集合 a + b i + c j a+bi+cj a+bi+cj,于是我们令 i j = k ij=k ij=k,并把集合扩大成 a + b i + c j + d k a+bi+cj+dk a+bi+cj+dk,新的形式如果做乘法一定会出现诸如 i j , j k , k i , j i , k j , i k ij,jk,ki,ji,kj,ik ij,jk,ki,ji,kj,ik的形式,那么参照推导“三元数”的逻辑,可以令 j k = i , k i = j jk=i,ki=j jk=i,ki=j,那么还有 j i , k j , i k ji,kj,ik ji,kj,ik的乘积呢?
试一下: − j = i i j = i k -j=iij=ik j=iij=ik,因此有 k i = − i k ki=-ik ki=ik,我们看到为了使得逻辑自洽,我们只能牺牲乘法交换律了。
当然我们还要看看除法,实际上由于乘法不满足交换律,我们也只能像矩阵一样的给出逆的左乘和右乘了,而不能像复数那样法除数写在分数线下面了。沿着复数的足迹,老实计算一下发现:
( a + b i + c j + d k ) ( a − b i − c j − d k ) = a 2 + b 2 + c 2 + d 2 = ∣ a + b i + c j + d k ∣ 2 (a+bi+cj+dk)(a-bi-cj-dk)=a^2+b^2+c^2+d^2=|a+bi+cj+dk|^2 (a+bi+cj+dk)(abicjdk)=a2+b2+c2+d2=a+bi+cj+dk2
所以我们发现四元数的逆和共轭于复数简直是一模一样。
因此我们宣布,除了乘法交换律不满足以外,复数的最小扩张就是四元数了。

二、用矢量表示四元数

由于四元数有3个虚分量,因此我们用向量形式来简化书写,并且可以使用向量的内积和叉乘来简化公式。
则两个四元数可以表示如下:
u 1 + v 1 u_1+\bm v_1 u1+v1
u 2 + v 2 u_2+\bm v_2 u2+v2
( u 1 + v 1 ) ( u 2 + v 2 ) = u 1 u 2 − v 1 ⋅ v 2 + u 1 v 2 + u 2 v 1 + v 1 × v 2 (u_1+\bm v_1)(u_2+\bm v_2)=u_1u_2-\bm v_1\cdot\bm v_2+u_1\bm v_2+u_2\bm v_1+\bm v_1\times\bm v_2 (u1+v1)(u2+v2)=u1u2v1v2+u1v2+u2v1+v1×v2
其中内积和叉乘使用一般的向量计算的规则。
棣莫弗公式的推广:
复数的旋转计算中棣莫弗公式非常好用,既然我们都用向量表示了四元数,那么可以可以推广一下棣莫弗公式用来做三维圆转呢?推广的时候注意一下虚部是三维的。
u + v = u 2 + v 2 ( u u 2 + v 2 + ∣ v ∣ u 2 + v 2 v ∣ v ∣ ) u+\bm v=\sqrt{u^2+\bm v^2}(\frac{u}{\sqrt{u^2+\bm v^2}}+\frac{|\bm v|}{\sqrt{u^2+\bm v^2}}\frac{\bm v}{|\bm v|}) u+v=u2+v2 (u2+v2 u+u2+v2 vvv)
如果记:
u u 2 + v 2 = c o s θ , ∣ v ∣ u 2 + v 2 = s i n θ , v ∣ v ∣ = n \begin{aligned} \frac{u}{\sqrt{u^2+\bm v^2}}=cos\theta,\frac{|\bm v|}{\sqrt{u^2+\bm v^2}}=sin\theta,\frac{\bm v}{|\bm v|}=\bm n \end{aligned} u2+v2 u=cosθ,u2+v2 v=sinθ,vv=n
则我们得到一个用模和 θ \theta θ表示的四元数
u + v = ∣ u + v ∣ ( c o s θ + n s i n θ ) u+\bm v=|u+\bm v|(cos\theta+\bm n sin\theta) u+v=u+v(cosθ+nsinθ)

三、用四元数对一个矢量进行旋转

简单起见用一个实部为 0 0 0的四元数 A A A来表示某个空间向量,该向量绕单位矢量 n \bm n n旋转 θ \theta θ角可以用下面的式子计算:
( c o s θ 2 + n s i n θ 2 ) A ( c o s θ 2 − n s i n θ 2 ) = ( c o s θ 2 A − n ⋅ A s i n θ 2 + n × A s i n θ 2 ) ( c o s θ 2 − n s i n θ 2 ) = c o s 2 θ 2 A − n ⋅ A s i n θ 2 c o s θ 2 + n × A s i n θ 2 c o s θ 2 + c o s θ 2 s i n θ 2 ( A ⋅ n − A × n ) + s i n 2 θ 2 ( n ⋅ A ) n + s i n 2 θ 2 [ ( n × A ) ⋅ n − ( n × A ) × n ] = c o s 2 θ 2 A + 2 c o s θ 2 s i n θ 2 n × A + s i n 2 θ 2 ( n ⋅ A ) n + s i n 2 θ 2 n × ( n × A ) = cos ⁡ 2 θ 2 A + 2 c o s θ 2 s i n θ 2 n × A + s i n 2 θ 2 ( n ⋅ A ) n + s i n 2 θ 2 [ ( n ⋅ A ) n − A ] = ( c o s 2 θ 2 − s i n 2 θ 2 ) A + 2 c o s θ 2 s i n θ 2 n × A + ( n ⋅ A ) n − ( c o s 2 θ 2 − s i n 2 θ 2 ) ( n ⋅ A ) n = ( n ⋅ A ) n + [ A − ( n ⋅ A ) n ] c o s θ + n × A s i n θ \begin{aligned} &\left(cos\frac\theta2+\bm n sin\frac\theta2\right)\bm A\left(cos\frac\theta2-\bm n sin\frac\theta2\right)\\ =&\left(cos\frac\theta2\bm A-\bm n\cdot\bm A sin\frac\theta2+\bm n\times\bm A sin\frac\theta2\right)\left(cos\frac\theta2-\bm n sin\frac\theta2\right)\\ =&cos^2\frac\theta2\bm A-\bm n\cdot\bm A sin\frac\theta2cos\frac\theta2+\bm n\times\bm A sin\frac\theta2cos\frac\theta2\\ &+cos\frac\theta2sin\frac\theta2(\bm A\cdot\bm n-\bm A\times\bm n)+sin^2\frac\theta2(\bm n\cdot\bm A)\bm n+sin^2\frac\theta2[(\bm n\times\bm A)\cdot\bm n-(\bm n\times\bm A)\times\bm n]\\ =&cos^2\frac\theta2\bm A+2cos\frac\theta2sin\frac\theta2\bm n\times\bm A+sin^2\frac\theta2(\bm n\cdot\bm A)\bm n+sin^2\frac\theta2\bm n\times(\bm n\times\bm A)\\ =&\cos^2\frac\theta2\bm A+2cos\frac\theta2sin\frac\theta2\bm n\times\bm A+sin^2\frac\theta2(\bm n\cdot\bm A)\bm n+sin^2\frac\theta2[(\bm n\cdot\bm A)\bm n-\bm A]\\ =&\left(cos^2\frac\theta2-sin^2\frac\theta2\right)\bm A+2cos\frac\theta2sin\frac\theta2\bm n\times\bm A+(\bm n\cdot\bm A)\bm n-\left(cos^2\frac\theta2-sin^2\frac\theta2\right)(\bm n\cdot\bm A)\bm n\\ =&(\bm n\cdot\bm A)\bm n+[\bm A-(\bm n\cdot\bm A)\bm n]cos\theta+\bm n\times\bm Asin\theta \end{aligned} ======(cos2θ+nsin2θ)A(cos2θnsin2θ)(cos2θAnAsin2θ+n×Asin2θ)(cos2θnsin2θ)cos22θAnAsin2θcos2θ+n×Asin2θcos2θ+cos2θsin2θ(AnA×n)+sin22θ(nA)n+sin22θ[(n×A)n(n×A)×n]cos22θA+2cos2θsin2θn×A+sin22θ(nA)n+sin22θn×(n×A)cos22θA+2cos2θsin2θn×A+sin22θ(nA)n+sin22θ[(nA)nA](cos22θsin22θ)A+2cos2θsin2θn×A+(nA)n(cos22θsin22θ)(nA)n(nA)n+[A(nA)n]cosθ+n×Asinθ

四、旋转公式的几何意义

我们考察矢量 A \bm A A,绕单位矢量 n \bm n n,按右螺旋法则转动 θ \theta θ角度的变换。
首先 A \bm A A在旋转轴上分量 ( n ⋅ A ) n (\bm n\cdot\bm A)\bm n (nA)n,不会随转动改变
A \bm A A在旋转轴垂直的平面上的投影 A − ( n ⋅ A ) n \bm A-(\bm n\cdot\bm A)\bm n A(nA)n一定会随着转动而变换
我们来看我们来考察一下这个平面:
我们令 A − ( n ⋅ A ) n \bm A-(\bm n\cdot\bm A)\bm n A(nA)n方向为平面的x轴方向,则 n × [ A − ( n ⋅ A ) n ] = n × A \bm n\times[\bm A-(\bm n\cdot\bm A)\bm n]=\bm n\times\bm A n×[A(nA)n]=n×A相当于平面的y轴方向。
由于 A − ( n ⋅ A ) n \bm A-(\bm n\cdot\bm A)\bm n A(nA)n垂直于 n \bm n n垂直,因此恰好有 ∣ n × [ A − ( n ⋅ A ) n ] ∣ = ∣ A − ( A ⋅ n ) n ∣ |\bm n\times[\bm A-(\bm n\cdot\bm A)\bm n]|=|\bm A-(\bm A \cdot \bm n)\bm n| n×[A(nA)n]=A(An)n
因此把 A − ( n ⋅ A ) n \bm A-(\bm n\cdot\bm A)\bm n A(nA)n旋转 θ \theta θ角后,就是: [ A − ( n ⋅ A ) n ] c o s θ + n × A s i n θ [\bm A-(\bm n\cdot\bm A)\bm n]cos\theta+\bm n\times\bm Asin\theta [A(nA)n]cosθ+n×Asinθ
因此旋转过后完整的矢量表示为:
( n ⋅ A ) n + [ A − ( n ⋅ A ) n ] c o s θ + n × A s i n θ (\bm n\cdot\bm A)\bm n+[\bm A-(\bm n\cdot\bm A)\bm n]cos\theta+\bm n\times\bm Asin\theta (nA)n+[A(nA)n]cosθ+n×Asinθ
可以看到第三节的公式确实代表一个绕单位矢量 n \bm n n的旋转。

五、四元数表示旋转

前面已经验证了,四元数确实可以表示一个旋转,因此我们干脆把一个四元数
q = c o s θ 2 + n s i n θ 2 \begin{aligned} \bm q = cos\frac\theta2+\bm n sin\frac\theta2 \end{aligned} q=cos2θ+nsin2θ
看成一个旋转变换变换。当然具体作用到某个实际矢量时采用 q A q − 1 \bm q\bm A \bm q^{-1} qAq1的方式进行。
有一个非常经典的一般方法比较难解决,但四元数可以秒杀的问题:
对任意一个矢量,我们先让它绕 n 1 \bm n_1 n1转动角度 θ 1 \theta_1 θ1,然后让它绕 n 2 \bm n_2 n2转动角度 θ 2 \theta_2 θ2,总的转动效果可以看成绕 n 3 \bm n_3 n3转动角度 θ 3 \theta_3 θ3,这个总效果怎么求?
四元数给出的方案非常简洁:
c o s θ 3 2 + n 3 s i n θ 3 2 = ( c o s θ 2 2 + n 2 s i n θ 2 2 ) ( c o s θ 1 2 + n 1 s i n θ 1 2 ) cos\frac{\theta_3}2+\bm n_3 sin\frac{\theta_3}2=\left(cos\frac{\theta_2}2+\bm n_2 sin\frac{\theta_2}2\right)\left(cos\frac{\theta_1}2+\bm n_1 sin\frac{\theta_1}2\right) cos2θ3+n3sin2θ3=(cos2θ2+n2sin2θ2)(cos2θ1+n1sin2θ1)
简记为: q 3 = q 2 q 1 \bm q_3 = \bm q_2 \bm q_1 q3=q2q1
落实到一个具体的矢量 A \bm A A的旋转效果就是这样的: q 3 A q 3 − 1 = q 2 q 1 A q 1 − 1 q 2 − 1 \bm q_3\bm A \bm q_3^{-1}=\bm q_2\bm q_1\bm A \bm q_1^{-1}\bm q_2^{-1} q3Aq31=q2q1Aq11q21
今后我们将专注于旋转变换的观念,不再讨论对某个具体矢量的变换。

六、四元数的微分方程

四元数 q \bm q q的时间变化率:
d q d t = − s i n θ 2 d θ 2 d t + n c o s θ 2 d θ 2 d t + s i n θ 2 d n d t \begin{aligned} \frac{d\bm q}{dt} = -sin\frac\theta2\frac{d\theta}{2dt}+\bm n cos\frac\theta2\frac{d\theta}{2dt}+sin\frac\theta2\frac{d\bm n}{dt} \end{aligned} dtdq=sin2θ2dtdθ+ncos2θ2dtdθ+sin2θdtdn
可以看到右边的第三项不好处理,四元数描述的是绕单位向量 n \bm n n以角速度 d θ / d t d\theta/dt dθ/dt的转动,显然 n \bm n n代表了转动角速度的方向,但是在一般情况下角速度的方向 n \bm n n也是随着时间变化的,因此一般来说 d n / d t d\bm n/dt dn/dt并不是 0 \bm 0 0,也可以说要还要考虑角加速度的影响。
但是这里为了简化问题,我们忽略角加速度,并且我们也没有传感器直接测量角加速度,我们只能通过陀螺仪测量角速度。因此我们考虑 d n / d t = 0 d\bm n/dt=\bm0 dn/dt=0,这样问题就得到一定程度的简化:
d q d t = − s i n θ 2 d θ 2 d t + n c o s θ 2 d θ 2 d t = 1 2 d θ d t n ( c o s θ 2 + n s i n θ 2 ) = 1 2 d θ d t n q \begin{aligned} \frac{d\bm q}{dt} = -sin\frac\theta2\frac{d\theta}{2dt}+\bm n cos\frac\theta2\frac{d\theta}{2dt}=\frac12\frac{d\theta}{dt}\bm n\left(cos\frac\theta2+\bm nsin\frac\theta2\right)=\frac12\frac{d\theta}{dt}\bm n\bm q \end{aligned} dtdq=sin2θ2dtdθ+ncos2θ2dtdθ=21dtdθn(cos2θ+nsin2θ)=21dtdθnq
这里需要澄清一下这里的转动是相对于地面坐标系讲过的,但是飞行器上的陀螺仪测量到的角速度 ω = ( ω x , ω y , ω z ) T \bm \omega=(\omega_x,\omega_y,\omega_z)^T ω=(ωx,ωy,ωz)T是相对于飞行器坐标的,因此我们要想办法把飞行器坐标系中的角速度转化成地面坐标系的角速度。
我们这样思考: q \bm q q代表了地面坐标系通过旋转转换到飞行器坐标系的变换,那么飞行器坐标系中的任意向量也可以通过 q \bm q q变换成地面坐标系中的向量。
这其实是旋转的被动观点和主动观点的关系,一个容易记忆的例子就是考虑飞行器坐标系相对于地面坐标系绕 z z z轴旋转了一个角度,此时观察随坐标系转动的一个是矢量很容易看出来。
因此我们有:
d θ d t n = q ω q − 1 \begin{aligned} \frac{d\theta}{dt}\bm n=\bm q \bm \omega \bm q^{-1} \end{aligned} dtdθn=qωq1
所以:
d q d t = 1 2 d θ d t n q = 1 2 q ω q − 1 q = 1 2 q ω \begin{aligned} \frac{d\bm q}{dt} = \frac12\frac{d\theta}{dt}\bm n\bm q=\frac12\bm q \bm \omega \bm q^{-1}\bm q=\frac12\bm q \bm \omega \end{aligned} dtdq=21dtdθnq=21qωq1q=21qω
我们希望的到矩阵表达式,为此我们先看一下任意两个四元数之间的乘法如何用矩阵表示,设有两个四元数,分别表示为:
p = [ p 0 p 1 p 2 p 3 ] q = [ q 0 q 1 q 2 q 3 ] \begin{aligned} &\bm p=\left[\begin{matrix} p_0\\p_1\\p_2\\p_3 \end{matrix}\right] &\bm q=\left[\begin{matrix} q_0\\q_1\\q_2\\q_3 \end{matrix}\right] \end{aligned} p= p0p1p2p3 q= q0q1q2q3
很容易验证,四元数乘法可以表示成:
q p = [ q 0 − q 1 − q 2 − q 3 q 1 q 0 − q 3 q 2 q 2 q 3 q 0 − q 1 q 3 − q 2 q 1 q 0 ] [ p 0 p 1 p 2 p 3 ] \begin{aligned} &\bm q\bm p=\left[\begin{matrix} q_0&-q_1&-q_2&-q_3\\ q_1&q_0&-q_3&q_2\\ q_2&q_3&q_0&-q_1\\ q_3&-q_2&q_1&q_0 \end{matrix}\right] \left[\begin{matrix} p_0\\p_1\\p_2\\p_3 \end{matrix}\right] \end{aligned} qp= q0q1q2q3q1q0q3q2q2q3q0q1q3q2q1q0 p0p1p2p3
由于: ω = [ 0 ω x ω y ω z ] \begin{aligned} &\bm \omega=\left[\begin{matrix} 0\\\omega_x\\\omega_y\\\omega_z \end{matrix}\right] \end{aligned} ω= 0ωxωyωz

所以我们有第一种表现形式:
d q d t = 1 2 q ω = 1 2 [ q 0 − q 1 − q 2 − q 3 q 1 q 0 − q 3 q 2 q 2 q 3 q 0 − q 1 q 3 − q 2 q 1 q 0 ] [ 0 ω x ω y ω z ] \begin{aligned} \frac{d\bm q}{dt} = \frac12\bm q \bm \omega=\frac12\left[\begin{matrix} q_0&-q_1&-q_2&-q_3\\ q_1&q_0&-q_3&q_2\\ q_2&q_3&q_0&-q_1\\ q_3&-q_2&q_1&q_0 \end{matrix}\right] \left[\begin{matrix} 0\\ \omega_x\\ \omega_y\\ \omega_z \end{matrix}\right] \end{aligned} dtdq=21qω=21 q0q1q2q3q1q0q3q2q2q3q0q1q3q2q1q0 0ωxωyωz
这样一种形式显然不是很方便,我们想把 ω \bm\omega ω写在前面,怎么办呢?
我们回顾第二小节:
( u 1 + v 1 ) ( u 2 + v 2 ) = u 1 u 2 − v 1 ⋅ v 2 + u 1 v 2 + u 2 v 1 + v 1 × v 2 (u_1+\bm v_1)(u_2+\bm v_2)=u_1u_2-\bm v_1\cdot\bm v_2+u_1\bm v_2+u_2\bm v_1+\bm v_1\times\bm v_2 (u1+v1)(u2+v2)=u1u2v1v2+u1v2+u2v1+v1×v2
如果交换相乘的次序,不同的地方在于 v 1 × v 2 \bm v_1\times\bm v_2 v1×v2 v 2 × v 1 \bm v_2\times\bm v_1 v2×v1而已,反映在矩阵上实际上就是:
q p = [ p 0 − p 1 − p 2 − p 3 p 1 p 0 p 3 − p 2 p 2 − p 3 p 0 p 1 p 3 p 2 − p 1 p 0 ] [ q 0 q 1 q 2 q 3 ] \begin{aligned} &\bm q\bm p=\left[\begin{matrix} p_0&-p_1&-p_2&-p_3\\ p_1&p_0&p_3&-p_2\\ p_2&-p_3&p_0&p_1\\ p_3&p_2&-p_1&p_0 \end{matrix}\right] \left[\begin{matrix} q_0\\q_1\\q_2\\q_3 \end{matrix}\right] \end{aligned} qp= p0p1p2p3p1p0p3p2p2p3p0p1p3p2p1p0 q0q1q2q3
所以我们得到了常用形式:
d q d t = 1 2 q ω = 1 2 [ 0 − ω x − ω y − ω z ω x 0 ω z − ω y ω y − ω z 0 ω x ω z ω y − ω x 0 ] [ q 0 q 1 q 2 q 3 ] \begin{aligned} \frac{d\bm q}{dt} = \frac12\bm q \bm \omega=\frac12\left[\begin{matrix} 0&-\omega_x&-\omega_y&-\omega_z\\ \omega_x&0&\omega_z&-\omega_y\\ \omega_y&-\omega_z&0&\omega_x\\ \omega_z&\omega_y&-\omega_x&0 \end{matrix}\right] \left[\begin{matrix} q_0\\q_1\\q_2\\q_3 \end{matrix}\right] \end{aligned} dtdq=21qω=21 0ωxωyωzωx0ωzωyωyωz0ωxωzωyωx0 q0q1q2q3


总结

本文说明了四元数的来历,讲述了四元数和旋转的关系,今后就可以使用四元数表示飞行器坐标相对于地面的转动关系,最后得到基于飞行器坐标系中的陀螺仪测得的角速度的四元数的微分方程,通过这个微分方程,我们可以用测量到的角速度来先验推演飞行器相对于地面的转动关系。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值