四轴飞行玩具的姿态解算的原理3. 点乘与叉乘;四元数

在讲四元数之前,先讲下向量的点乘和叉乘。

我们先假设有两个向量 :

  a = [Xa Ya Za]   b=[Xb Yb Zb]

一 . 点乘(·):

  点乘又叫内积,他是两个向量的各项乘积之和,其值为一个标量。用数学式可以表示为:

    C= ∑a(i)*b(i)   (i= 1~3);

  或者

    C= a · b  = Xa*Xb + Ya*Yb+ Za*Zb

  又或者

     C = a·b = |a||b|·cos(θ); (θ为ab的夹角)

  又或者

    四轴飞行玩具的姿态解算的原理3. 点乘与叉乘;四元数

  显然这就是最简单的1*N型矩阵乘法。

  几何意义:

  点乘能计算出矢量(向量)之间的夹角。这是由于:

  C = a·b = |a||b|·cos(θ); (θ为ab的夹角)

  所以

  θ  = arccos{ C / (|a||b| } 

二 .叉乘(x):

  叉乘的数学定义如下:

  1. 行列式表示法

  四轴飞行玩具的姿态解算的原理3. 点乘与叉乘;四元数

  = (Ya·Zb - Za·Yb)i - (Xa·Zb - Za·Xb)j + (Xa·Yb - Ya·Xb)k;

  jk=i; ki = j ; ij = k ; 

  kj=-i ; ik = -j ; ji = -k;

  ii = jj = kk = 0 ;

 

  2 .复数表示法:

  如果把a,b 看成超复数:a = (Xa i  + Ya j + Za k)  ,  b= (Xb i + Yb j + Zb k)   

  C =  (Xa i  + Ya j + Za k) · (Xb i + Yb j + Zb k

    =   (XaXb) ii + (XaYb) ij + (XaZb) ik 

    + (YaXb)ji + (YaYb)jj + (YaZb)jk

    + (ZaXb)ki + (ZaYb)kj +(ZaZb)kk

   = (YaZb -ZaYb)i + (ZaXb - XaZb)j + (XaYb-YaXb)k  (带入j i k 的乘法关系) 

  

  3. 矩阵表示法

  显然,叉乘的结果也可看成一个向量:

  四轴飞行玩具的姿态解算的原理3. 点乘与叉乘;四元数

 

  几何意义:

    设向量a.b在一个平面 A 上

    C = a x b ,则新向量 c 垂直于平面A 

    如下图所示:

      四轴飞行玩具的姿态解算的原理3. 点乘与叉乘;四元数

     a·b 可以计算出向量ab 之间的夹角

     axb 可以计算出向量ab构成的平面的朝向

 三 何为四元数

  四元数,是19世纪,由汉密尔顿发明的一种数学工具。我们可以用它来描述三维空间里物体的转动和变换。

  汉密尔顿最初是希望找到一种乘法法则,使其在三维向量运算时满足如下条件:

  1. 运算结果也是三维向量

  2.存在元运算,使得所有向量乘以元等于他自身 Q x I= Q;

  3.有逆运算,并且逆运算与原乘积为元 Q x Q^-1 = I

  4.结合律有效

  点乘/内积(·)不满足1 。 叉乘、外积不满足3。

  后来,哈密尔顿发现,虽然这样的运算在三维向量间无法实现,但在四元数运算间却可以满足要求

  设一个四元向量:

  Q = q0+q1 i + q2 j +q3 k

  其中i,j,k是三个虚部,他们的关系如下:

  i^2 = j^2 = k^2 = 0 ;

  ij= k ; ki=j ; jk = k ;

  kj= -i ; ik =-j; ji= -k;

  显然,两个四元数相乘,就符合我们之前说到的叉乘的运算关系。

  四元数为何可以满足1-4个条件,证明的过程,请有数学能力的小伙伴们去查阅资料。我这里就单纯的认为这个结论是正确的就行了。

  那么,当两个四元数相乘时,在几何上代表什么意义呢?

  可以有两种解释:

  1. Qa x Qb : 对 Qa 进行了Qb程度的左旋转(在4维空间上)

  2. Qa x Qb : 对Qb进行了Qa程度的右旋转(在4维空间上)

   任何四维空间的旋转,都可以唯一的拆分为一个坐旋转和一个右旋转。

  既 Q= qL(左旋转) X P X qR(右旋转)

四 . 四元数与三维空间

  前面介绍了四元数,以及四元数的乘法(空间旋转)。那么,四元数是如何应用到三维空间的呢。

       哈密尔顿定义了纯四元数 Q纯 =  {0 ,Wx , Wy, Wz }

  显然,纯四元数就是实部为0 的特殊四元数。

  并且发现并论证了一个定理: 

   Q纯 = q · P纯  ·  q^-1  ; 

  这意味着: 一个纯四元数(P纯),被(q)叉乘 ,再叉乘(q^-1),, 其结果依然是纯四元数Q; (q可以不是纯四元数)

  从几何上说,就是: 一个三维空间向量(纯四元数), 经过一次四维空间左旋转(四元数q) ,再做一次四维空间右旋转(四元数 q^-1),其结果依然是个三维空间向量(纯四元数)

  这就是四元数在三维空间运用的基础定理!

   用于描述旋转的四元数q,可以写为如下形式:

  q      = {cos(θ/2)  , sin(θ/2) Vx , sin(θ/2) Vy, sin(θ/2) Vz}

  q^-1 ={cos(θ/2)  , -sin(θ/2) Vx , -sin(θ/2) Vy, -sin(θ/2) Vz}

  它的几何意义是:

  P纯代表的向量,在三维坐标x,y,z(可以理解为i, j, k) 中绕向量V={Vx,Vy,Vz},按照右手定律,转动了θ度,得到了向量Q纯

  四轴飞行玩具的姿态解算的原理3. 点乘与叉乘;四元数

 

  欧拉角描述的旋转,是用三次旋转依次组合而成。

  而四元数描述的旋转,是绕某一个向量,旋转θ度而形成。

 

五 . 用矩阵描述旋转Q

  之前已经知道:

    Q= q·A·(q^-1)

  设其中:

    q = {q1 , q2 ,q3 ,q4 }  

  则经过计算可得:

    四轴飞行玩具的姿态解算的原理3. 点乘与叉乘;四元数

 

  

 

  

  

 

上一篇:glibc 知:通用调试技术


下一篇:c语言数组复制