You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XYZ旋转与Theta-Phi-Psi旋转的差异及Python转换方法咨询

Theta-Phi-Psi 与 XYZ 旋转的差异及转换方法

一、两者核心差异

  • 旋转顺序与坐标系基准:
    • XYZ旋转(通用欧拉角XYZ顺序)是绕固定世界坐标系的X轴→Y轴→Z轴依次完成旋转。
    • Theta-Phi-Psi旋转(航空航天常用姿态角)一般遵循绕自身坐标系的Z轴(Psi/偏航)→Y轴(Phi/俯仰)→X轴(Theta/滚转)的内旋顺序,后续旋转的轴会随前序旋转同步变动。
  • 适用场景:
    • XYZ旋转多用于3D建模、机器人关节运动等通用3D领域。
    • Theta-Phi-Psi更适配航空、航天场景,用来描述飞行器的姿态变化。

二、Python中Theta-Phi-Psi到XYZ旋转的转换步骤

已知你的Theta、Phi、Psi角度(单位:度),转换流程如下:

1. 角度转弧度

Python的旋转计算库默认使用弧度,先完成单位转换:

import numpy as np

theta_deg = -0.66057811029304
phi_deg = 20.6061074480986
psi_deg = -0.471074371882115

theta = np.deg2rad(theta_deg)
phi = np.deg2rad(phi_deg)
psi = np.deg2rad(psi_deg)

2. 构建Theta-Phi-Psi旋转矩阵

按照内旋顺序(Psi(Z) → Phi(Y) → Theta(X)),分别生成单轴旋转矩阵后相乘得到总矩阵:

# 绕X轴(Theta)的旋转矩阵
Rx = np.array([
    [1, 0, 0],
    [0, np.cos(theta), -np.sin(theta)],
    [0, np.sin(theta), np.cos(theta)]
])

# 绕Y轴(Phi)的旋转矩阵
Ry = np.array([
    [np.cos(phi), 0, np.sin(phi)],
    [0, 1, 0],
    [-np.sin(phi), 0, np.cos(phi)]
])

# 绕Z轴(Psi)的旋转矩阵
Rz = np.array([
    [np.cos(psi), -np.sin(psi), 0],
    [np.sin(psi), np.cos(psi), 0],
    [0, 0, 1]
])

# 内旋顺序的总旋转矩阵:R = Rx * Ry * Rz
R_tpp = Rx @ Ry @ Rz

3. 转换为XYZ欧拉角

借助scipy的旋转模块,直接将旋转矩阵转成XYZ顺序的欧拉角:

from scipy.spatial.transform import Rotation as R

# 从旋转矩阵创建旋转对象
rot = R.from_matrix(R_tpp)

# 转换为XYZ顺序的欧拉角(输出单位:度)
xyz_euler_deg = rot.as_euler('xyz', degrees=True)
x_rot, y_rot, z_rot = xyz_euler_deg

print(f"XYZ旋转角度(度):X={x_rot:.6f}, Y={y_rot:.6f}, Z={z_rot:.6f}")

注意事项

  • 不同领域对Theta-Phi-Psi的轴对应关系、旋转顺序定义可能有差异,若结果不符,需确认是内旋还是外旋,以及各角度对应的旋转轴。
  • 欧拉角存在万向锁问题,若需避免该问题,建议全程使用旋转矩阵或四元数作为中间载体。

内容的提问来源于stack exchange,提问作者houssein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 07:42:03