旋转矩阵 轴角 欧拉角 四元数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/JDWell/article/details/82974508

引言

我们日常生活的空间是三维的,因此我们生来就习惯于空间的运动。三维空间由三个轴组成,所以一个空间点的位置可以由3个坐标指定。不过,我们现在要考虑刚体,它不光有位置,还有自身的姿态。以下,就是对刚体姿态的相关学习的笔记。


旋转矩阵

表示坐标系`O-x'y'z'`中的向量坐标变换为同一向量在坐标系`O-xyz`中的坐标的变换矩阵(transformation matrix)。

  • 旋转矩阵属于特殊正交群(special orthonormal group);正交矩阵,每一列为单位矩阵,行列式为1。
  • 描述了两个坐标系之间的相对指向。
  • 表示了同一点在不同坐标系下(原点相同,即只有转动,没用平动)的坐标之间的坐标变换。 - 是将向量在同一坐标系下进行旋转的算子。 

缺点:旋转矩阵表示三个自由度就需要9个量,因此这种表示方式太冗余。


轴/角(Axis-Angle)

描述一个坐标系沿某一条直线旋转一定的角度,即与另一个坐标系重合。

其实轴-角对与欧拉角(个人认为)是有一定的关系的。因为欧拉角说的是分别(注意:是分别)绕(以世界坐标系为参考坐标系的)三个轴旋转一定的角度。其实这三次的旋转可以最终转换到一次变换。即:最终可表示为:绕某一旋转轴旋转一定角度的变换。(意思就是说:那三次变换我们最终可以计算出旋转轴以及绕该旋转轴旋转的角度量)。

缺点:轴-角对表示法:插值不平滑,可能会有跳跃。(文档上说,欧拉角同样存在这个问题)
优点:可解决欧拉角的万向锁问题。


欧拉角

欧拉角指的是:以世界坐标系为参考坐标系(一定记住是世界坐标系),使用x,y,z三个值来分别表示绕(世界的)x轴、y轴、z轴旋转的角度量值。其取值是在[0, 360]间。一般用roll, pitch, yaw来表示这些分量的旋转值。因为是以世界坐标系为参考坐标系,因此每一次的旋转都不会影响到后续的旋转转轴。即:它无法表示任意轴的旋转。
  1) 优点:
    理解起来很直观。
  2) 缺点:
    会有万向锁问题。

  欧拉角相关视频讲解链接:https://www.bilibili.com/video/av8387812/


四元数定义:q = w + xi + yj + zk

  注意:
    1) 四元数可以归一化,并且只有归一化的四元数才用来描述旋转
    2) 四元数与轴-角对很像。因为四元数描述的也是一个旋转轴与一个绕着该旋转轴旋转的量值(即:角度或弧度)。但四元数与轴-角对不等价。它们的关系如下:
      假如:轴-角对的值如下:
      轴为:n
      角为:theta
      则,对应的四元数中的w、x、y、z的值分别为:
      w = cos(theta / 2)
      x = nx * sin(theta / 2)  // nx 是轴 n 的 x 分量
      y = ny * sin(theta / 2)  // ny 是轴 n 的 y 分量
      z = nz * sin(theta / 2)  // nz 是轴 n 的 z 分量

    3) 四元数的乘法意义:
    Q = Q1 * Q2表示的是:Q先做Q2的旋转,再做Q1的旋转的结果,而且多个四元数的旋转也是要以合并的。
    4) 四元数做一次乘法需要16次乘法和加法,而3x3矩阵需要27次。所以有多次旋转操作时,使用四元数计算效率更高些。
    5) 四元数的插值过度平滑。最常用的是线性插值。

    四元数相关的视频讲解:https://www.bilibili.com/video/av3741034/


参考资料:[书].视觉SLAM十四讲

参考文章:https://blog.csdn.net/xuehuafeiwu123/article/details/74942989(旋转矩阵、欧拉角、四元数、轴/角之间的转换)

                  http://www.cppblog.com/Tongy0/archive/2012/09/10/190126.html(旋转矩阵、欧拉角、四元数、轴/角之间的比较)

猜你喜欢

转载自blog.csdn.net/JDWell/article/details/82974508