姿态角(欧拉角)
姿态角即RPY(roll, pitch,yaw)又叫欧拉角,是由三个角组成的。
俯仰角(pitch)
翻滚角(roll)
偏航角(yaw)
其中最直观的就是其绕刚体自身的X、Y、Z三个轴分别旋转的角度,这就是欧拉角(Euler Angle)表示方法。
需要注意的是,欧拉角的表示方式里,yaw、pitch、roll的顺序对旋转的结果是有影响的。
给定一组欧拉角角度值,比如yaw=45度,pitch=30度,roll=60度,按照yaw-pitch-roll的顺序旋转和按照yaw-roll-pitch的顺序旋转,最终刚体的朝向是不同的!
另外需要注意,在欧拉角中,三个旋转轴一般是随着刚体一起运动的。
欧拉角的表示方式比较直观,但是有几个缺点:
(1) 欧拉角的表示方式不唯一。给定某个起始朝向和目标朝向,即使给定yaw、pitch、roll的顺序,也可以通过不同的yaw/pitch/roll的角度组合来表示所需的旋转。比如,同样的yaw-pitch-roll顺序,(0,90,0)和(90,90,90)会将刚体转到相同的位置。这其实主要是由于万向锁(Gimbal Lock)引起的,关于万向锁的解释,有条件的同学看看Youtube的视频或许会比较直观。
(2) 欧拉角的插值比较难。
(3) 计算旋转变换时,一般需要转换成旋转矩阵,这时候需要计算很多sin, cos,计算量较大。
方向余弦矩阵(DCM)和旋转矩阵(RM)
在计算坐标变换时,旋转更方便的表示形式是旋转矩阵(Rotation Matrix)。
三维空间的旋转矩阵可以表示成3x3的矩阵,将欧拉角转换为旋转矩阵的计算方式如下,
假设欧拉角yaw、pitch、roll的角度为alpha, beta, gamma,则旋转矩阵可以计算如下:
其中
这里也可以看出,如果yaw、pitch、roll的顺序有改变,矩阵相乘的顺序需要作出相应改变,所得的旋转矩阵结果也会有所改变。
而最主要的是万向节锁(Gimbal lock)的问题,详情见youtub上有很多演示视频(例如Gimbal Lock Explained in 30 Seconds)。
这里文字解释一下,一个旋转万向节如下:
最终间的旋转轴代表偏航角,第二层的旋转代表俯仰角,最外面的旋转轴代表翻滚角。
万向节锁的问题是,当锁死其中一个自由度的时候,其中两个自由度会重叠,例如锁死俯仰和翻滚的轴的时候(即最外面的两层),翻滚和偏航角的旋转轴会重叠(即表示的是同一个自由度)。
也就是说这个Gimble lock(万向锁)是由旋转顺序中的第二个旋转轴产生的,即XYZ旋转顺序,Y轴会产生万向锁。当我们知道有一个轴经常会旋转到90度时,那就不要让这个轴成为第二个旋转的轴。
详情见(Gimbal Lock Explained in 30 Seconds,为youtub 需FQ),另一个视频可以详细讲解欧拉角和四元数(https://www.youtube.com/watch?v=Mm8tzzfy1Uw)
(未完待续)
原文地址:https://www.cnblogs.com/TIANHUAHUA/p/8135446.html