【机器人-基础知识】欧拉角、旋转矩阵和四元数
1. 欧拉角
1.1. 欧拉角的定义
欧拉角是一组三个角度,用于描述一个刚体在三维空间中的定向关系。具体来说,它们表示从一个固定参考坐标系到刚体坐标系的一系列旋转。常见的定义方式是将总体旋转分解为三个连续的简单旋转,每次旋转都绕着当前坐标系的某一固定轴进行。
例如,一种常用的欧拉角序列是 Z–Y–X(或称为航向、俯仰、滚转顺序),其含义如下:
- Yaw 第一个旋转(航向/偏航):绕固定坐标系的 Z 轴旋转角度 ψ \psi ψ;
- Pitch 第二个旋转(俯仰):绕新坐标系的 Y 轴旋转角度 θ \theta θ;
- Roll 第三个旋转(滚转):绕再次更新后的 X 轴旋转角度 ϕ \phi ϕ。
这种分解使得三维旋转问题转化为三个独立旋转角度的叠加。
1.2. 欧拉角的公式
以 Z–Y–X 顺序为例,刚体总旋转矩阵 R R R 可以写成三个旋转矩阵的乘积:
R = R x ( ϕ ) R y ( θ ) R z ( ψ ) R = R_x(\phi) \; R_y(\theta) \; R_z(\psi) R=Rx(ϕ)Ry(θ)Rz(ψ)
其中:
-
绕 X 轴旋转的矩阵:
R x ( ϕ ) = [ 1 0 0 0 cos ϕ − sin ϕ 0 sin ϕ cos ϕ ] R_x(\phi) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\phi & -\sin\phi \\ 0 & \sin\phi & \cos\phi \end{bmatrix} Rx(ϕ)=⎣⎡1000cosϕsinϕ0−sinϕcosϕ⎦⎤
-
绕 Y 轴旋转的矩阵:
R y ( θ ) = [ cos θ 0 sin θ 0 1 0 − sin θ 0 cos θ ] R_y(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix} Ry(θ)=⎣⎡cosθ0−sinθ010sinθ0cosθ⎦⎤
-
绕 Z 轴旋转的矩阵:
R z ( ψ ) = [ cos ψ − sin ψ 0 sin ψ cos ψ 0 0 0 1 ] R_z(\psi) = \begin{bmatrix} \cos\psi & -\sin\psi & 0 \\ \sin\psi & \cos\psi & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(ψ)=⎣⎡cosψsinψ0−sinψcosψ0001⎦⎤
将上述三个矩阵依次相乘,就可以得到描述刚体最终定向的旋转矩阵 R R R
1.3. 欧拉角的常见问题
在使用欧拉角描述旋转时,需要注意以下问题:
-
万向锁(Gimbal Lock)
以常见的ZYX欧拉角为例,即首先绕全局z轴旋转,然后绕新的y轴旋转,最后绕新的x轴旋转。当第二次旋转(即绕y轴的旋转)旋转角(例如上例中的 θ \theta θ)达到 ± 9 0 ∘ \pm90^\circ ±90∘ 时。
第一次和第三次旋转将会围绕同一个轴。这意味着,在这些特殊的角度下,系统失去了一个自由度,因为两次旋转现在作用于相同的轴,不能独立地控制物体的方向。 -
多值性与奇异性
欧拉角存在多值性,即不同的角度组合可能表示相同的旋转。此外,某些角度组合可能使反求公式退化,导致奇异性问题,增加了数值计算的复杂性。
2. 旋转矩阵
2.1. 旋转矩阵的定义
旋转矩阵是一种用于描述刚体或坐标系在欧几里得空间中旋转变换的矩阵。其主要特点包括:
- 正交性:旋转矩阵 R R R 满足 R T R = I R^T R = I RTR=I,其中 R T R^T RT 为 R R R 的转置, I I I 为单位矩阵。这一性质保证了向量的长度和旋转前后向量间的夹角不变。
- 行列式为1:即 det ( R ) = 1 \det(R) = 1 det(R)=1,这一性质表明旋转矩阵不含有镜像或反射分量。
- 参数冗余性:在三维空间中,尽管旋转矩阵有 9 个元素,但由于正交性和行列式约束,其实际自由度仅为 3 个。
2.2. 常见旋转矩阵的公式
1. 二维旋转矩阵
在二维平面上,绕原点逆时针旋转角度 θ \theta θ 的旋转矩阵为:
R ( θ ) = [ cos θ − sin θ sin θ cos θ ] R(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} R(θ)=[cosθsinθ−sinθcosθ]
2. 三维旋转矩阵
在三维空间中,常用的旋转矩阵包括绕各个坐标轴旋转的矩阵:
-
绕 X 轴旋转角度 ϕ \phi ϕ 的矩阵:
R x ( ϕ ) = [ 1 0 0 0 cos ϕ − sin ϕ 0 sin ϕ cos ϕ ] R_x(\phi) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\phi & -\sin\phi \\ 0 & \sin\phi & \cos\phi \end{bmatrix} Rx(ϕ)=⎣⎡1000cosϕsinϕ0−sinϕcosϕ⎦⎤
-
绕 Y 轴旋转角度 θ \theta θ 的矩阵:
R y ( θ ) = [ cos θ 0 sin θ 0 1 0 − sin θ 0 cos θ ] R_y(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix} Ry(θ)=⎣⎡cosθ0−sinθ010sinθ0cosθ⎦⎤
-
绕 Z 轴旋转角度 ψ \psi ψ 的矩阵:
R z ( ψ ) = [ cos ψ − sin ψ 0 sin ψ cos ψ 0 0 0 1 ] R_z(\psi) = \begin{bmatrix} \cos\psi & -\sin\psi & 0 \\ \sin\psi & \cos\psi & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(ψ)=⎣⎡cosψsinψ0−sinψcosψ0001⎦⎤
2.3. 旋转矩阵的示例
1. 二维示例
设有一个二维向量 v = [ 1 0 ] \mathbf{v} = \begin{bmatrix} 1 \\ 0 \end{bmatrix} v=[10