赞
踩
三维空间刚体的旋转主要有以下几种描述方法:
各种公式用了很久,结果越用越乱,花点时间整理了一下。本文主要是对这几种描述方法的特点及其相互转换中需要注意的地方做一个总结,各种描述方法的具体定义和转换的具体公式可以参考维基百科、SLAM十四讲第三章、惯性导航(第二版)第九章。
其实大部分内容在wiki中说得很清楚:Rotation matrix
把一次旋转分解成绕三根轴的三次转动,最常用的是Z-Y-X转序,如果定义的是先绕Z轴转动航向角yaw,再绕Y轴转动俯仰角pitch,再绕X轴转动横滚角roll,(注意这里的转动指的是坐标系的转动)得到三维向量
[
r
,
p
,
y
]
T
{[r,p,y]}^T
[r,p,y]T来描述旋转,那么Z-Y-X转序对应我们熟悉的rpy转序,即横滚-俯仰-航向的转序。这里的rpy和Z-Y-X顺序是反着的,至于这个rpy转序定义出来有什么用,不太理解。
注意rpy和Z-Y-X是对转动的独立表示,这两个没有什么实质的对应关系,或者说对应关系是人为定义的,要看你怎么定义自己的载体坐标系,从而去定义横滚、俯仰和航向角。
对于欧拉角的使用主要有两个要注意的地方:
旋转矩阵非常直接地定义了旋转的描述方法,这个描述是针对坐标的变换而非坐标系,也就是说它并不像欧拉角那样有非常直观的转角和转轴信息,而只是坐标变换的一种描述,由于旋转矩阵对矩阵乘法成群,而且构成的是特殊正交群SO(3),因此具有非常良好的运算性质,可以通过李群、李代数进行分析和求导。
由于我们用旋转矩阵描述的都是向量的旋转,如
r
n
=
C
b
n
r
b
r^n=C^n_br^b
rn=Cbnrb,这一点在将其与欧拉角和旋转向量进行转换时要特别注意。
直接地把旋转定义为绕某个向量旋转的角度,例如从n系到b系的旋转定义为绕着n系下的某个单位向量 u = [ l , m , n ] T u=[l,m,n]^T u=[l,m,n]T旋转角度 θ \theta θ,那么 θ u {\theta}u θu就定义了一个旋转向量。注意这个旋转定义的是坐标系的旋转,即转轴是在转动前的坐标系中。
用一种不带奇异性的四维向量来描述旋转。四元数的定义和旋转向量是有直接关系的,对应
θ
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)定义的旋转存在奇异性(死锁现象),所以需要扩展到四维。用转轴和转角来定义四元数是很自然的想法,但是将其表示为上面的形式是非常精妙的,为后续的四元数运算和转换到其他形式带来了非常大的方便。
C b n C_b^n Cbn可以由n系到b系变换的三个欧拉角连乘得到,因此这两种表示方法的转换根据欧拉角的定义不同有不同的表示,重点是搞清楚这里面存在一个转置关系。
从 θ u {\theta}u θu-R对应鼎鼎有名的罗德里格斯公式,wiki中有推导。逆向的变换也很简单。公式不复杂,重点是搞清楚坐标系的对应。例如旋转矩阵为 C b n C_b^n Cbn的话,对应的旋转向量是 u n u^n un,也就是说这个旋转向量是在n系中定义的,描述从n系到b系的旋转。
这个转换实际上是借助旋转向量和旋转矩阵的对应关系完成的。同样再以旋转矩阵为中介可以建立起欧拉角和四元数的对应关系。
详细的推导公式到处可查,这篇文章主要是总结一下一些容易混淆的地方,关键是区分开坐标系的旋转的描述和坐标变换的描述,这二者存在转置关系(说逆关系更合适,不过对于SO3这是一回事)。后续遇到有意思的细节再更新。如果理解有误欢迎指正。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。