欧拉角
欧拉角可以看做一个坐标,此坐标都是相对于同一个初始状态即(0,0,0)即物体坐标系和世界坐标系重合,且三角度都是0,从此初试状态开始,按照定义的旋转顺序,按照静态或动态的方式,旋转指定的角度,从而得到最终的状态。
1.欧拉角给出旋转角度的同时也要给出旋转顺序,顺序不同结果也不同
2.根据旋转选择的坐标系,可以分为静态和动态:
a. 静态:即绕世界坐标系三个轴的旋转,由于物体旋转过程中坐标轴保持静止,所以称为静态。
b. 动态:即绕物体坐标系三个轴的旋转,由于物体旋转过程中坐标轴随着物体做相同的转动,所以称为动态。使用动态欧拉角会出现万向锁现象;静态欧拉角不存在万向锁的问题。
俯仰角 pitch
航向角 yaw
滚转角 Roll
对于坐标系E下的欧拉角(α,β,r),三个绕轴旋转的旋转矩阵绕的是什么坐标系下的轴?和以下哪个旋转矩阵是等价的?
- 绕坐标系E下的x轴旋转α,绕坐标系E下的y轴旋转β,绕坐标系E下的z轴旋转r,三个矩阵的复合
- 绕坐标系E下的x轴旋转α,绕 坐标系E在绕x轴旋转α后的新系E'下的y轴旋转β,绕 坐标系E'在绕y轴旋转β后的新系E''下的z轴旋转r,三个矩阵的复合
事实上两种理解都可以,当然,两种转法并不等价,下面来解释这个问题;当我们讲到坐标系E下的欧拉角(α,β,r)时,这句话是有歧义的,我们必须定义旋转顺序,因为旋转顺序会影响旋转结果。
如果假设旋转顺序是先绕x轴再y轴再z轴,x-y-z,那么这个欧拉角对应的旋转矩阵是指上述的2所表示的旋转矩阵。
如果假设旋转顺序是先绕z轴再y轴再x轴,z-y-x,那么这个欧拉角对应的旋转矩阵是指上述的1所表示的旋转矩阵(当然也可以理解是2中的旋转"绕坐标系E下的z轴旋转r,绕 坐标系E在绕z轴旋转r后的新系E'下的y轴旋转β,绕 坐标系E'在绕y轴旋转β后的新系E''下的x轴旋转α,三个矩阵的复合",这里是为了验证绕物体自身坐标系按z-y-x旋转 和 绕 世界坐标系按 x-y-z旋转是等价的);
下面来证明两种复合方式是相等的,为了方便证明先定义一些记号:
- 绕坐标系E下的x轴旋转α的旋转矩阵为Rx,
- 绕坐标系E下的y轴旋转β的旋转矩阵为Ry,
- 绕坐标系E下的z轴旋转r的旋转矩阵为Rz,
- 绕坐标系E下的z轴旋转r的旋转矩阵为Rr(Rr=Rz),
- 绕 坐标系E在绕z轴旋转r后的新系E'下的y轴旋转β的旋转矩阵为Rb,
- 绕 坐标系E'在绕y轴旋转β后的新系E''下的x轴旋转α的旋转矩阵为Ra,
- 将矩阵R的逆记作R~
求证:Rx*Ry*Rz = Rr*Rb*Ra
证明:
Rr = Rz 定义就是一样的,显然相等
Rb = Rr~*Ry*Rr 要得到绕 坐标系E在绕z轴旋转r后的新系E'下的y轴旋转β的旋转矩阵为Rb,可以先应用Rr~这时可以视作在E下,然后使用E下的旋转Ry绕旧的y轴旋转,在应用Rr转回到E'
Ra = (Rr*Rb)~*Rx*(Rr*Rb) 理由同上
所以 Rr*Rb * Ra
=Rr*Rb * (Rr*Rb)~*Rx*(Rr*Rb)
=(Rr*Rb)* (Rr*Rb)~*Rx*(Rr*Rb)
=Rx*(Rr*Rb)
=Rx*(Rr*Rr~*Ry*Rr)
=Rx*Ry*Rz =左边
这与DirectX在文档中对D3DXMatrixRotationYawPitchRoll的描述是一致的
D3DXMATRIX * D3DXMatrixRotationYawPitchRoll(
D3DXMATRIX *pOut,
FLOAT Yaw, //绕y轴的转动角
FLOAT Pitch, //绕x轴的转动角
FLOAT Roll //绕z轴的转动角
);
The order of transformations is roll first, then pitch, then yaw. Relative to the object's local coordinate axis, this is equivalent to rotation around the z-axis, followed by rotation around the x-axis, followed by rotation around the y-axis.
万向节死锁
如视频https://www.bilibili.com/video/av9140886中所讲和上述旋转方式2的描述,在物体绕自身的坐标系旋转时,因为上一次的旋转,会导致物体自身的坐标系发生变化;欧拉角的三个轴的旋转顺序是确定的,当指定第二个旋转轴的旋转角度为90度时,在世界坐标系下观察这个旋转过程,会发现在实际旋转过程中,第一个旋转轴和第二个旋转轴正交,第三个旋转轴和第二个旋转轴正交,但第一个旋转轴和第三个旋转轴是重合的,此时三个万向节其中两个的轴发生重合时,会失去一个自由度的情形,从而导致万向节锁。
以上参考:
- http://www.chenbinpeng.com/2017/01/23/%E6%AC%A7%E6%8B%89%E8%A7%92%E4%B8%8E%E4%B8%87%E5%90%91%E8%8A%82%E6%AD%BB%E9%94%81/
- https://www.jianshu.com/p/b796f88c8470
- https://blog.csdn.net/ideallic/article/details/52869687
- https://blog.csdn.net/xiaoyink/article/details/84670383
- https://www.bilibili.com/video/av9140886