空间旋转----欧拉角与四元数

欧拉角:将刚体绕某一轴的一次旋转,分解为依次分别绕X、Y、Z轴的三次旋转。这三个轴分别旋转的转动角度,就是一组三个欧拉角。

具体旋转步骤:

  • 饶世界坐标系的z轴旋转α°
  • 饶物体坐标系的x轴旋转β°
  • 饶物体坐标系的z轴旋转γ°

欧拉角的坐标系:

  • y-x-z
  • heading-pitch-bank(世界坐标系)
  • yaw-pitch-row(物体坐标系)

万向锁:一旦选择±90°作为pitch角,就会导致第一次旋转和第三次旋转等价,整个旋转表示系统被限制在只能绕竖直轴(y轴)旋转,丢失了一个表示维度

万向锁的原因:由于欧拉角的三个轴向有y嵌套x嵌套z的关系,也就是如果x(pitch)轴旋转90°以后,其实是带动z(row)轴也旋转了90°,让xz轴重合并垂直于y轴,于是如果y轴旋转只能带动xz轴竖直旋转,与z轴旋转仅带动他本身效果一致,从而丢失了一个维度的自由度。

欧拉角万向节死锁

关于欧拉角万向锁一直搞不明白万向锁为啥会形成

四元数:

  • 四元数被定义为表示3D空间旋转的一种方式,它由一个x、y、z组成的三维向量v和一个标量w组成
  • 如: q = (v,w)四元数的形态有些类似于轴角的表示方式,但与轴角的含义完全不同
  • p = (v,w) = (sin(α/2)n, cos(α/2)) α为旋转角度,n 为旋转轴的单位向量。

四元数的优势:

  • 解决万向节死锁
  • 仅需4个浮点数,相比矩阵更轻量
  • 无论求逆、串联等操作,相比矩阵更高效

四元数的计算:

  • 相乘:
    • q3 = q1 * q2
    • 两个四元数相乘得到一个新的四元数
    • 代表两个旋转量的叠加,相当于旋转
    • 注意:旋转相对的坐标系是物体自身坐标系
  • 乘向量:
    • v2 = q1 * v1
    • 四元数乘向量返回一个新向量
    • 可以将指定向量旋转对应四元数的旋转量,相当于旋转向量
    • 注意:四元数必须在前