欧拉角
欧拉角使用三个值(xyz)组成的旋转序列表示角位移,这三个值分别为绕三个互相垂直轴(《3D数学基础》说这三个轴互相垂直,但我觉得不太严谨,毕竟还有万向锁一说)的旋转角度。各坐标体系中旋转序列的组合方式可能不同。常用的是heading-pitch-bank(y-x-z)约定,按顺序旋转heading角、pitch角、bank角(下文详细说明)。
优点:表达方式直观简洁,易于使用,内存占用少。
缺点:表达方式不唯一(对于同一个角位移可以使用无数多的欧拉角表示,这会导致某些简单的角位移比较问题都很难回答,如两个欧拉角表示的角位移是否相同)。可以通过限制欧拉角解决。
heading-pitch-bank约定:
- 先将物体坐标系与惯性坐标系重合
- heading绕此时物体坐标系的y轴旋转
- pitch绕heading旋转后的物体坐标系的x轴旋转
- bank绕heading-pitch旋转后的物体坐标系的z轴旋转
如图,红绿蓝分别代表xyz轴,带箭头的线是物体坐标系,我也画了三条辅助线(长的)便于观察实际旋转轴:
初始时,物体坐标系与世界坐标系方向一致,实际旋转轴与物体坐标系方向一致:
heading45°后,实际旋转轴xz改变,y不变
pitch45°后,实际旋转轴z改变,xy不变
bank45°后,实际旋转轴xyz都不变
可以看出heading-pitch-bank约定并不是单纯的绕父坐标系或自身坐标系的x、y、z轴旋转,物体绕实际旋转y轴旋转后才能确定实际旋转x轴,绕实际旋转x轴旋转后才能确定实际旋转z轴。heading影响pitch和bank,pitch只影响bank,bank谁都不影响。
限制欧拉角
限制heading和bank在[-180°,180°]之间,pitch在[-90°,90°]之间。但是还有万向锁问题。
万向锁问题
欧拉角最著名的别名问题:先heading45°再pitch90°和先pitch90°再bank45°是等价的。
这由于pitch±90°度后,heading的旋转轴和bank的旋转轴会在同一平面,导致heading和bank等价(或方向相反)。解决方法是在限制欧拉角中,如果pitch为±90°,则bank强制为0°,这样bank的旋转也由heading来完成。