当前位置:   article > 正文

三维空间的旋转表示方法和相互转换关系总结_三维空间中的旋转变换

三维空间中的旋转变换


前言

三维空间刚体的旋转主要有以下几种描述方法:

  • 欧拉角
  • 四元数
  • 旋转矩阵
  • 旋转向量

各种公式用了很久,结果越用越乱,花点时间整理了一下。本文主要是对这几种描述方法的特点及其相互转换中需要注意的地方做一个总结,各种描述方法的具体定义和转换的具体公式可以参考维基百科、SLAM十四讲第三章、惯性导航(第二版)第九章。
其实大部分内容在wiki中说得很清楚:Rotation matrix


一、各种表示方法的特点

1.欧拉角

把一次旋转分解成绕三根轴的三次转动,最常用的是Z-Y-X转序,如果定义的是先绕Z轴转动航向角yaw,再绕Y轴转动俯仰角pitch,再绕X轴转动横滚角roll,(注意这里的转动指的是坐标系的转动)得到三维向量 [ r , p , y ] T {[r,p,y]}^T [rpy]T来描述旋转,那么Z-Y-X转序对应我们熟悉的rpy转序,即横滚-俯仰-航向的转序。这里的rpy和Z-Y-X顺序是反着的,至于这个rpy转序定义出来有什么用,不太理解。
注意rpy和Z-Y-X是对转动的独立表示,这两个没有什么实质的对应关系,或者说对应关系是人为定义的,要看你怎么定义自己的载体坐标系,从而去定义横滚、俯仰和航向角。
对于欧拉角的使用主要有两个要注意的地方:

  • 这里的旋转矩阵是一个右乘的关系,我的理解是因为这三次旋转描述的是坐标系的变换 T 03 T_{03} T03,向量的旋转是左乘的话,坐标系的旋转应该是个右乘关系。就是说 C b n C^n_b Cbn描述了b系下的向量转换到n系对应的旋转矩阵,但对应坐标系的旋转,其实描述的是n系是如何旋转到与b系重合的,在这个意义上是一个n系到b系的旋转。那么对坐标系而言,转序是Z-Y-X,就是说先转动的是绕着Z轴,再绕新的Y轴,最后绕新的X轴。而对于空间中的某个向量而言,向量是要从b系变换到n系,是左乘的rpy顺序,即 R ( y ) ∗ R ( p ) ∗ R ( r ) R(y) * R(p) * R(r) R(y)R(p)R(r)
  • 绕y轴的欧拉角旋转矩阵符号是特殊的,这是因为x-z-y是个左手系,而x-y-z(对应绕z轴的旋转)和y-z-x(对应绕x轴的旋转)都是右手系

2.旋转矩阵

旋转矩阵非常直接地定义了旋转的描述方法,这个描述是针对坐标的变换而非坐标系,也就是说它并不像欧拉角那样有非常直观的转角和转轴信息,而只是坐标变换的一种描述,由于旋转矩阵对矩阵乘法成群,而且构成的是特殊正交群SO(3),因此具有非常良好的运算性质,可以通过李群、李代数进行分析和求导。
由于我们用旋转矩阵描述的都是向量的旋转,如 r n = C b n r b r^n=C^n_br^b rn=Cbnrb,这一点在将其与欧拉角和旋转向量进行转换时要特别注意。

3.旋转向量

直接地把旋转定义为绕某个向量旋转的角度,例如从n系到b系的旋转定义为绕着n系下的某个单位向量 u = [ l , m , n ] T u=[l,m,n]^T u=[l,m,n]T旋转角度 θ \theta θ,那么 θ u {\theta}u θu就定义了一个旋转向量。注意这个旋转定义的是坐标系的旋转,即转轴是在转动前的坐标系中。

4.四元数

用一种不带奇异性的四维向量来描述旋转。四元数的定义和旋转向量是有直接关系的,对应 θ u \theta u θu的四元数可以表示为
Q = c o s θ 2 + u s i n θ 2 Q=cos{\frac{\theta}{2}}+usin{\frac{\theta}{2}} Q=cos2θ+usin2θ
其实四元数的设定方法是非常有意思的,旋转是有三个自由度,但是我们靠一个三维的向量(比如前面提到的rpy)定义的旋转存在奇异性(死锁现象),所以需要扩展到四维。用转轴和转角来定义四元数是很自然的想法,但是将其表示为上面的形式是非常精妙的,为后续的四元数运算和转换到其他形式带来了非常大的方便。

  • 四元数的标量部分可以作为第一维也可以作为最后一维,作为最后一维的话有利于四元数微分方程的表示,可以得到比较简洁的形式。
  • 另外有一个特别的地方是,四元数的扰动可以用角度扰动非常简单地描述出来,在一些视觉定位算法中(如MSCKF中)用到了这个转换。下面的博客里有详细推导,其实很简单。
    https://www.cnblogs.com/ilekoaiq/p/9266036.html

二、各种表示方法的相互转换

1.欧拉角-旋转矩阵

C b n C_b^n Cbn可以由n系到b系变换的三个欧拉角连乘得到,因此这两种表示方法的转换根据欧拉角的定义不同有不同的表示,重点是搞清楚这里面存在一个转置关系。

2.旋转矩阵-旋转向量

θ u {\theta}u θu-R对应鼎鼎有名的罗德里格斯公式,wiki中有推导。逆向的变换也很简单。公式不复杂,重点是搞清楚坐标系的对应。例如旋转矩阵为 C b n C_b^n Cbn的话,对应的旋转向量是 u n u^n un,也就是说这个旋转向量是在n系中定义的,描述从n系到b系的旋转。

  • 对应小扰动的情况下,这里也有一个精巧的表达(我可能是大脑宕机,这个地方卡了好久),其实就是罗德里格斯公式取小角度 θ ~ \widetilde{\theta} θ 时,利用sin θ ~ \widetilde{\theta} θ = θ ~ \widetilde{\theta} θ ,cos θ ~ \widetilde{\theta} θ =1得到
    R = I − θ ~ [ x ] R=I-{\widetilde{\theta}}_{[x]} R=Iθ [x]
    θ ~ [ x ] {\widetilde{\theta}}_{[x]} θ [x]表示由向量转换的反对称矩阵(latex公式格式好难整。。)

3.四元数-旋转矩阵

这个转换实际上是借助旋转向量和旋转矩阵的对应关系完成的。同样再以旋转矩阵为中介可以建立起欧拉角和四元数的对应关系。

总结

详细的推导公式到处可查,这篇文章主要是总结一下一些容易混淆的地方,关键是区分开坐标系的旋转的描述和坐标变换的描述,这二者存在转置关系(说逆关系更合适,不过对于SO3这是一回事)。后续遇到有意思的细节再更新。如果理解有误欢迎指正。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/86811
推荐阅读
相关标签
  

闽ICP备14008679号