欧拉角转换成旋转矩阵
时间: 2025-01-01 14:26:09 浏览: 12
### 将欧拉角转换为旋转矩阵
在计算机图形学和机器人技术中,为了表示三维空间中的物体姿态,通常会采用欧拉角来描述绕三个轴的旋转角度。当需要将这些角度转化为更易于处理的形式时,则可以构建对应的旋转矩阵。
对于标准顺序ZYX(即先沿Z轴转ψ度、再沿着新的Y轴转动θ度最后围绕新坐标系下的X轴旋转向量φ),其组合后的总变换可由下面公式给出:
\[ R = R_x(\phi) \cdot R_y(\theta)\cdot R_z(\psi) \]
其中各个分量具体表达如下[^1]:
- 绕 Z 轴旋转的角度 ψ 对应于 \(R_z\) 的定义为:
\[
R_{z}=\begin{bmatrix}
cos\psi & -sin\psi&0\\
sin\psi &cos\psi&0 \\
0&0&1
\end{bmatrix}
\]
- 接着按照更新后的 Y' 轴方向做 θ 度偏航运动形成 \(R_y\) :
\[
R_{y}= \begin{bmatrix}
cos\theta & 0 & sin\theta\\
0 & 1 & 0\\
-sin\theta & 0 & cos\theta
\end{bmatrix}
\]
- 最终依据最新的 X'' 坐标轴完成 φ 角倾斜动作得到 \(R_x\) :
\[
R_{x}= \begin{bmatrix}
1 & 0 & 0\\
0 & cos\varphi & -sin\varphi\\
0 & sin\varphi & cos\varphi
\end{bmatrix}
\]
通过依次相乘上述单轴旋转矩阵即可获得完整的旋转效果。值得注意的是,在实际应用过程中可能会遇到不同的约定方式,比如XYZ或其他序列;因此实现前应当确认所使用的惯例是什么样的[^2]。
Python代码示例如下所示:
```python
import numpy as np
def euler_to_rotation_matrix(phi, theta, psi):
"""
Convert Euler angles (in radians) into a rotation matrix.
Args:
phi(float): Rotation around the x-axis.
theta(float): Rotation around the y'-axis after rotating by phi.
psi(float): Rotation around the z''-axis after rotating by both previous rotations.
Returns:
ndarray: A 3x3 rotation matrix representing these three consecutive rotations.
"""
# Define individual axis rotation matrices based on input parameters
Rx = np.array([[1, 0, 0],
[0, np.cos(phi), -np.sin(phi)],
[0, np.sin(phi), np.cos(phi)]])
Ry = np.array([[np.cos(theta), 0, np.sin(theta)],
[0, 1, 0],
[-np.sin(theta), 0, np.cos(theta)]])
Rz = np.array([[np.cos(psi), -np.sin(psi), 0],
[np.sin(psi), np.cos(psi), 0],
[ 0, 0, 1]])
# Multiply them together according to Tait-Bryan convention (zyx)
return Rz @ Ry @ Rx
```
阅读全文