各种旋转方式总结

  本文总结了包括旋转矩阵、旋转向量、欧拉角、四元数在内的四种旋转方式及他们之间的转换关系。

  参考资料:

    http://mathworld.wolfram.com/RodriguesRotationFormula.html

    http://blog.csdn.net/scudz/article/details/8284666

    http://www.cnblogs.com/wqj1212/archive/2010/11/21/1883033.html


目录:

0、基本概念准备

一、旋转矩阵

二、旋转向量

三、欧拉角

四、四元数

五、相互关系

  5.1 旋转向量与旋转矩阵

  5.2 旋转矩阵与欧拉角

  5.3 四元数与旋转矩阵

  5.4 四元数与欧拉角


0、基本概念准备

    (若对以下概念很清楚此部分可跳过)

    笛卡尔坐标系:我们中学时就学过的平面直角坐标系又被称为笛卡尔直角坐标系。

    欧拉角:用来确定定点转动刚体位置的一组独立的角参量,用三个角度表示。

    旋转变换:欧式空间中,对刚体元素绕固定点或固定轴进行旋转,以获得变换后元素位置坐标。

    旋转矩阵:矩阵左乘某元素,可实现对其进行旋转变换的操作。具有正交特性。

    旋转向量:描述旋转变换的另一种方式,有些地方又叫旋转的轴角表示法,即向量的模值为旋转角弧度值,单位化后向量为选择轴。

    四元数:同样用作旋转变换的一种表示。旋转轴与旋转角分开写出。


    另外,滚转角,俯仰角,航向角(roll, pitch, yaw)这三个惯性导航中经常出现的姿态角,可以与我们这里的欧拉角统一起来看。Roll为围绕x轴旋转,pitch为围绕y轴旋转,yaw为围绕z轴旋转。

    需要注意的是我们这里讨论的所有坐标系均为右手坐标系。


一、旋转矩阵

  在视觉几何中,旋转矩阵是很重要的一个数学工具,此矩阵左乘某元素,可实现对其进行旋转的操作。 根据罗德里格旋转公式,过原点的旋转轴[x,y,z]旋转θ角的旋转矩阵为:


  二维情况下简单的推导如下:  (图片来自百度百科)

    此时旋转变换矩阵为:

   

    其中旋转中心为原点,逆时针旋转角 θ

    写成齐次形式就是:

    上图的变换表示为:R * X = X',齐次形式中,R(1,3) 和 R(2,3) 可表示旋转中心。
    若已知变换前后的点坐标,想反解出 R,默认旋转中心在原点时,由于二维情况下的 R 只有一个自由度,已知一对 X 和 X’ 即可求解出 R;否则,R(1,3) 和 R(2,3) 要看作变量,需要增加两个自由度,共需要两对点。

    三维情况下,刚体绕三个坐标轴旋转的旋转矩阵分别为(非齐次):

    最终,一次旋转的结果为,将这三个矩阵按照转动顺序,依次左乘。三维情况下旋转矩阵共有三个自由度,求解需要三对对应点。

    如果一次变换过程中不仅考虑旋转,还考虑平移,那么同二维情况,拿出齐次矩阵,加入三维坐标平移量即可。

    另外,旋转矩阵具有正交特性,即


二、旋转向量

    旋转向量有时又叫旋转的轴角表示,顾名思义就是用绕某轴旋转某角度的方式表示旋转。旋转向量的为物体旋转的欧拉角(弧度),旋转轴为将旋转向量单位化后的单位向量

    设旋转向量为 ,则旋转角为 ,旋转轴为

    这里旋转的方向定义为,延旋转轴向原点看,选转方向是逆时针则为正,顺时针则为负。



三、欧拉角

    用来唯一地确定定点转动刚体位置的三个一组独立角参量,由章动角θ、旋进角(即进动角)ψ和自转角j组成,上文已经说过了,与姿态角 roll、pitch、yaw,可统一看成刚体绕坐标轴的转动角度。
    后文会具体介绍与其他表达形式的关系。

四、四元数

    四元数是四维空间中的一个复数:w+xi+yj+zk,其中:
    可将四元数记为  或 四元数既不是标量,也不是矢量,由一个标量和三个矢量组合而成。
   
    更加清晰的定义形式为:

    上式表示刚体围绕某一过原点的旋转轴旋转θ角,而旋转轴为 ,这里注意四元数模值为1。
   
    用四元数表示旋转,过程如下
    首先,将待旋转的点 p 表示成四元数的形式(只是写成这个形式,模不一定满足为1这个条件):
    然后,通过四元数叉乘运算计算 p'(即旋转后的坐标位置):
    其中,关键的两步是四元数叉乘和四元数逆变换:
        四元数叉乘公式为:
 
        四元数的为:
    最后,根据公式求解即可。

五、相互关系

  5.1 旋转向量与旋转矩阵

    旋转向量与旋转矩阵可以通过罗德里格斯(Rodrigues)变换进行转换:

    设旋转向量为 ,则旋转角为 ,于是可将向量单位化 ,最终旋转向量到旋转矩阵的变换公式为:

    反变换公式为:


  5.2 旋转矩阵与欧拉角

    欧拉角到旋转矩阵变换公式上文已给出,反变换请看下文四元数部分。


  5.3 四元数与旋转矩阵

    设旋转矩阵为:

    则由旋转矩阵到四元数q的变换公式为:

        不过存在一些特殊情况,此时w等于或接近0,这时候对求解方式做调整:
        若r11最大,则:


 

        若r22最大,则:

        若r33最大,则:

    由四元输到旋转矩阵的变换公式,只需要将四元数表示法带入旋转矩阵公式即可:


  5.4 四元数与欧拉角

    使用四元数可以有效的解决因欧拉角旋转顺序的制约关系而有可能出现的不合理旋转现象(万向锁)。
    欧拉角转换为四元数:刚体按照Z-Y-X顺序依次旋转的欧拉角分别为ψ-θ-φ,则转换公式为:


    若坐标轴,即旋转顺序发生变换,则直接交换向量各行的值即可。

    四元数转为欧拉角:

    其中函数atan2(x,y)的作用是,当x的绝对值比y的绝对值大时使用atan(y/x),反之使用 atan(x/y)。


====================================

如有错误,欢迎指正;如果哪里写的不清楚,欢迎留言