【CV】三维空间的旋转问题(Rotation in 3D space)
Yaw, Pitch, Roll 角
以飞机的动作为例,
- 左右摆动是 Yaw 角 – 偏航角
- 上下摆动是 Pitch 角 – 俯仰角
- 绕轴摆动是 Roll 角 – 翻滚角
旋转矩阵
绕x,y,或z轴旋转θ的矩阵为:
而对于绕任意轴旋转,则需要先把这个轴旋转至与一条坐标轴重合,再绕坐标轴旋转,最后再把轴按原路旋转回去,即
,其中
- 绕x轴旋转角度p使指定的旋转轴在xz平面上
- 绕y轴旋转角度q使指定的旋转轴与z轴重合
- 绕z轴旋转角度θ
- 绕y轴旋转角度-q
- 绕x轴旋转角度-p
其中,p和q的值需要用i,j,k计算出来。
注意,右边的旋转先与齐次坐标运算。
欧拉角(Euler angles)
旋转矩阵乘以点P的齐次坐标,得到旋转后的点P’:
上图中
- xyz 坐标系是固定的参考坐标系,图中蓝线
- XYZ 坐标系是依附在刚体上的运动坐标系。图中红线
- xy 平面与 XY 平面的交线,叫做交轨线,记作 N,这条线穿过两个坐标系的原点并且垂直于 zZ 平面。图中绿线
欧拉角由以上元素给出
- x 轴与 N 轴的角度,代表绕z 轴旋转
- z 轴与 Z 轴的角度,代表绕 x 轴旋转
- N轴与X轴的角度,代表绕 Z 轴的旋转
如果是0, 就没有绕N轴的旋转. 因此Z轴与z轴重合, 和 代表绕同一个轴(z)的旋转, 最终的方向可以通过一个单一的绕z轴的旋转获得,这个旋转角度等于 .
三个欧拉角的定义是明确的固定的,但是顺序却是依个人喜好定的。
若按照上面的 zxZ 的顺序,
- 绕z轴旋转α,使x轴与N轴重合,N轴是旋转前后两个坐标系x-y平面的交线
- 绕x轴(也就是N轴)旋转β,使z轴与旋转后的z轴重合
- 绕z轴旋转γ,使坐标系与旋转后的完全重合
注意与旋转矩阵不同,在欧拉角中最先进行的旋转在最左边。因为旋转矩阵我们始终基于绝对参考系,而对于欧拉角,我们每一次旋转都是基于刚体坐标系。