5.欧拉角和四元数


  • 欧拉角

    • 欧拉角 是将旋转分解成三个相互垂直的分量,分别操作。三个分量分别是 heading、pitch、bank(指的是惯性到物体坐标系)。还有一种常用的名字 roll、pitch、yaw,与heading、pitch、bank顺序相反(物体到惯性坐标系),
    • 先后次序不重要
    • 欧拉角 优缺点
      • 优点
        • 使用容易
        • 简洁的表达式
        • 任意三个数都合法
      • 缺点
        • 给定方位的表达式不唯一(360周期倍结果一致,数值不同。pitch135度 等价于heading 180,pitch45, 再bank 180),著名 万向锁(至今没有简单的解决方案)
        • 两个角度间的插值困难()
    • 限制 heading和bank在(-180, +180)之间, pitch 在(-90, 90)
  • 四元数

  • 各种方法比较

    任务/性质 矩阵 欧拉角 四元数
    在坐标系间旋转点 不能(需要转换到矩阵) 不能(需要转换到矩阵)
    连接或增量旋转 能,比四元数慢,还需要小心矩阵蠕变的情况 不能 能,比矩阵快
    插值 不能 能,遭遇万向锁和其他问题 Slerp 提供平滑插值
    难易程度
    储存 9个数 3个数 4个数
    变换唯一性 唯一 不唯一,多种或者无数种 不唯一,有两种,他们相互为负
    可能导致非法 矩阵蠕变 合法 可能出现误差累计,从而产生非法四元数
  • 各种方法之间的转换

    • 欧拉角到矩阵

      H、P、B分别为heading、pitch、bank的旋转矩阵,他们分别绕 y,x,z左手法则旋转。设 heading、pitch、bank 旋转角分量分别是 h、p、b则 旋转矩阵为 反向操作,

  • 欧拉角——> 矩阵

    • 惯性——>物体

    \[ H = R_y(-h)= \begin{bmatrix} \cos(-h)& 0& -\sin(-h)\\ 0& 1& 0\\ \sin(-h)& 0& \cos(-h) \end{bmatrix}= \begin{bmatrix} \cos(h)& 0& \sin(h)\\ 0& 1& 0\\ -\sin(h)& 0& \cos(h) \end{bmatrix} \]

    \[ P = R_x(-p)= \begin{bmatrix} 1& 0& 0\\ 0& \cos(-p)& \sin(-p)\\ 0&-\sin(-p)& \cos(-p) \end{bmatrix}= \begin{bmatrix} 0& 1& 0\\ 0&\cos(p)& -\sin(p)\\ 0& \sin(p)& \cos(p) \end{bmatrix} \]

    \[ B = R_z(-b)= \begin{bmatrix} \cos(-b)& \sin(-b)&0\\ -\sin(-b)& \cos(-b)&0\\ 0& 0& 1 \end{bmatrix}= \begin{bmatrix} \cos(b)& -\sin(b)&0\\ \sin(b)& \cos(b)&0\\ 0& 0& 1 \end{bmatrix} \]

    \[ M_{惯性\rightarrow物体} = HPB =\begin{bmatrix} \cos(h)& 0& \sin(h)\\ 0& 1& 0\\ -\sin(h)& 0& \cos(h) \end{bmatrix}\begin{bmatrix} 0& 1& 0\\ 0&\cos(p)& -\sin(p)\\ 0& \sin(p)& \cos(p) \end{bmatrix}\begin{bmatrix} \cos(b)& -\sin(b)&0\\ \sin(b)& \cos(b)&0\\ 0& 0& 1 \end{bmatrix} \]

    \[ =\begin{bmatrix} \cos(h)\cos(b) + \sin(h)\sin(p)\sin(b)& -\cos(h)\sin(b) + \sin(h)\sin(p)\sin(b)& \sin(h)\cos(p)\\ \sin(b)\cos(p) & \cos(b)\sin(p) & -\sin(p)\\ \sin(h)\cos(b) + \cos(h)\sin(p)\sin(b)& \sin(b)\sin(h) + \cos(h)\cos(p)\cos(b)& \cos(h)\cos(p)\\ \end{bmatrix} \]

    • 物体——>惯性

    • 矩阵 ——> 欧拉角

    • 四元数 ——> 矩阵

    • 矩阵 ——> 四元数

    • 欧拉角 ——> 四元数

    • 四元数 ——> 欧拉角

    • 代码实现 EulerAngles、Quaternion、RotationMatrix、Matrix4x3

      • todo

文章作者: lyg
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 lyg !
  目录