姿态(Orientation)

物体姿态

物体在三维空间中的姿态、旋转,用旋转矩阵、欧拉角、四元素来表示。

旋转矩阵

旋转矩阵定义

旋转矩阵(英语:Rotation matrix)是在乘以一个向量的时候有改变向量的方向但不改变大小的效果并保持了手性的矩阵。(手性:左/右手坐标系)

  • 二维旋转矩阵表达式:
    这里写图片描述
  • 三维旋转矩阵表达式:
    这里写图片描述

旋转矩阵优缺点

优点:旋转轴任意选择。
缺点:占用的内存空间大,计算量也大。

欧拉角

用来确定物体姿态,由章动角a、旋进角(即进动角)b和自转角r组成,如:(a,r,b)。

欧拉角定义

  • 静态定义
    对于在三维空间里的一个参考系,任何坐标系的取向,都可以用三个欧拉角来表现。参考系又称为实验室参考系,是静止不动的。而坐标系则固定于刚体,随着刚体的旋转而旋转。
    参阅下图。设定xyz-轴为参考系的参考轴。称xy-平面与XY-平面的相交为交点线,用英文字母(N)代表。zxz顺规的欧拉角可以静态地这样定义:
    • a 是x-轴与交点线的夹角,
    • b是z-轴与Z-轴的夹角,
    • r是交点线与X-轴的夹角。
      姿态(Orientation)_第1张图片
  • 动态定义
    我们也可以给予欧拉角两种不同的动态定义。一种是绕着固定于刚体的坐标轴的三个旋转的复合;另外一种是绕着实验室参考轴的三个旋转的复合。用动态的定义,我们能更了解,欧拉角在物理上的含义与应用。特别注意,以下的描述, XYZ坐标轴是旋转的刚体坐标轴;而xyz坐标轴是静止不动的实验室参考轴。
    A)绕着XYZ坐标轴旋转:最初,两个坐标系统xyz与XYZ的坐标轴都是重叠著的。开始先绕着Z-轴旋转\alpha ,角值。然后,绕着X-轴旋转\beta,角值。最后,绕着Z-轴作角值\gamma,的旋转。
    B)绕着xyz坐标轴旋转:最初,两个坐标系统xyz与XYZ的坐标轴都是重叠著的。开始先绕着z-轴旋转\gamma,角值。然后,绕着x-轴旋转\beta,角值。最后,绕着z-轴作角值\alpha ,的旋转。

欧拉角公式

  • 欧拉角转为旋转矩阵
    这里写图片描述
  • 欧拉角转化为四元素
    这里写图片描述

欧拉角优缺点

优点:直观、容易理解,可以表示超过180度角度的旋转。
缺点:存在万向锁(Gimbal Lock)的问题,关于万向锁这里有个视频说的很清楚。

四元素

四元素是一个高阶复数。(听起来就比较难理解,这里推荐一个链接,从容易理解的角度介绍四元素,其中2/3维平面的旋转解释的很清楚)。

四元素定义

a + bi + cj + dk

四元素公式

  • 四元素转化为欧拉角
    姿态(Orientation)_第2张图片
  • 四元素转化为旋转矩阵
    这里写图片描述

四元素优缺点

优点:不存在Gimbal Lock的问题
缺点:不容易理解,且单个四元素无法表示超过180度的旋转。

总结

目前最理想的表示姿态的方式是四元素,下面是Oculars对传感器的文章有提到:因为欧拉角存在Gimbal lock的问题,所以不使用欧拉角,而使用四元素来表示姿态

Now turn to the problem of tracking a human head, which has three rotational degrees of freedom. The orientation of a 3D rigid body is often described by yaw, pitch, and roll angles. They are convenient for making figures like the one on the left, but later cause a lot of trouble due to numerical singularities (see gimbal lock) and a huge variety of alternative, incompatible definitions (see Euler angles–pronounced by Americans as “oiler angles”). We therefore use quaternions internally for representing orientation.

参考链接:

  • wikipedia
  • unity官方文档
  • understanding-quaternions

你可能感兴趣的:(旋转矩阵,欧拉角,orientatio,四元素,VR)