旋转矩阵、轴角、欧拉角、四元数的转换关系

匿名 (未验证) 提交于 2019-12-03 00:30:01

其他参考:

https://blog.csdn.net/candycat1992/article/details/41254799

http://www.cnblogs.com/yiyezhai/p/3176725.html


主要介绍了在计算机视觉中关于3D变换矩阵的数学方法。

  1. 旋转矩阵是一种3×3的正交矩阵,

    这里R为3D的旋转矩阵,同样的,t为3D的平移矢量。
    由于3D旋转都可以归结成按照某个单位向量n进行大小为θ的旋转。所以,已知某个旋转时,可以推导出对应的旋转矩阵。该过程由罗德里格斯公式表明,由于过程比较复杂,我们在此不作赘述,只给出转换的结果: 

    这里 公式虽然较为复杂,但实际写成程序后,只需知道旋转方向和角度后即可完成计算。另一件有趣的事是,如果用

    表示与n对应的一个反对称矩阵,那么有:
    (李代数会对后面的指数形式做出解释)
    根据此式,我们也可以从任意给定的旋转矩阵,求出对应的转轴与转角。关于转角θ,我们对上式两边求矩阵的迹,可得:

    可得
    关于转轴n,由于旋转轴上的向量在旋转后不发生改变,说明

    因此,只要求此方程的解向量即可。这也说明n是R特征值为1的一个特征向量。
    总之,读者应当明白在3D时,旋转和平移仍可用转移矩阵T来描述,其结构也与2D类似。而T4×4构成了三维欧氏变换群SE(3)。注意到T虽然有16个变量,但真正的自由度只有6个,其中3个旋转,3个位移。
    欧拉角是一种广为使用的姿态描述方式,以直观见长。在最常用的欧拉角表达方式中,我们把旋转分解成沿三个轴转动的量:滚转角-俯仰角-偏航角(roll-pitch-yaw)

  2. 四元数
    相比欧拉角,四元数(Quaternion)则是一种紧凑、易于迭代、又不会出现奇异值的表示方法。它在程序中广为使用,例如ROS和几个著名的SLAM公开数据集、g2o等程序都使用四元数记录机器人的姿态。
    四元数仅是3D姿态的一种表达方式,我们用一个单位四元数表达原本用旋转矩阵表示的三维旋转。这样做一个直接的好处是省空间。一个旋转阵有9个分量,但只有三个自由度。那么,能不能用三个数来描述呢?可以是可以的,但不可避免会出现奇异的情况,欧拉角就是一个例子。而四元数,比三维向量多了一个分量,从而可以无奇异地表示各种姿态。
    四元数是Hamilton找到的一种扩展的复数。一个四元数拥有一个实部和三个虚部(故事上说他原先找了很久带两个虚部的,结果怎么也找不到,最后豁然开朗找到了三虚部的四元数):

    其中i,j,k为四元数的三个虚部。这三个虚部满足关系式:

    由于它的这种特殊表示形式,有时人们也用一个标量和一个向量来表达四元数:

    这里,标量s称为四元数的实部,而向量v称为它的虚部。如果一个四元数虚部为0,称之为实四元数。反之,若它的实部为0,称之为虚四元数。该定义和复数是相似的。
    四元数可以表示三维空间中任意一个旋转。与旋转矩阵中类似,我们仍假设某个旋转是绕单位向量 进行了角度为θ的旋转,那么这个旋转的四元数形式为:

    事实上,这还是一个模长为1的四元数,称为单位四元数。反之,我们亦可通过任意一个长度为1的四元数,计算对应旋转轴与夹角:



    四元数和通常复数一样,可以进行一系列的运算。常见的有四则运算、内积、求逆、共轭、求指数/对数等等。表示姿态时,它还可以进行插值。
    3D空间也可以用单位四元数表示旋转。假设一个空间三维点v=[x,y,z]∈R3 ,以及一个由旋转轴和夹角n,θ指定的旋转,首先,我们把三维空间点用一个虚四元数来描述:

    然后,参照旋转角的四元数表示,用另一个四元数q表示这个旋转:

    那么,旋转后的点p′p′即可表示为这样的乘积:

    可以验证,计算结果的实部为,故计算结果为纯虚四元数。其虚部的三个分量表示旋转后3D点的坐标。
    由于任意单位四元数都可表示为一个3D旋转,即SO(3)中的元素,我们可以找到一个旋转矩阵与之对应。最简单的方式是由四元数q解出旋转角θ和旋转轴n,但那样要计算一个arccos函数,代价较大。实际上这个计算是可以通过一定的计算技巧绕过的。为省略篇幅,我们直接给出四元数到旋转矩阵的转换方式。
    设四元数q=q0+q1i+q2j+q3k,对应的旋转矩阵R为:

    反之,由旋转矩阵到四元数的转换如下。假设矩阵为R={mij},i,j∈[1,2,3],其对应的四元数q由下式给出:

  3. 其他几种变换
    1). 相似变换比欧氏变换多了一个自由度,7个自由度,它允许物体进行自由地缩放。

      注意到旋转部分多了一个缩放因子s,它在x,y,z三个坐标上形成均匀的缩放。类似的,相似变换的乘法也构成群,称为Sim(3)。由于含有缩放,相似变换不再保持图形的面积不变。
    2). 仿射变换的矩阵形式如下:

      与欧氏变换不同的是,仿射变换只要求A是一个可逆矩阵,而不必是正交矩阵。在仿射变换下,直线的夹角会发生改变,但平行性质不变。这即是说,仿射变换把平行四边形变为平行四边形。有12个自由度。平行行和体积比不变。
    3). 射影变换是最一般的变换,它的矩阵形式为:

      它左上角为可逆矩阵A,右上为平移t,左下缩放aT。由于采用齐坐标,当v≠0时,我们可以对整个矩阵除以v得到一个右下角为1的矩阵; 否则,则得到右下角为0的矩阵。因此,这个矩阵在2D中一共有8个自由度,而在3D中一共有15个自由度,是现在提到的变换中最为一般的。接触平面的相交和相切

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!