scipy包Rotation.as_euler()旋转序列选择及欧拉角输出顺序问题
scipy Rotation.as_euler() 转四元数为RPY角的参数规则
旋转序列参数选择
- 通用航空、机器人领域定义的横滚(roll)、俯仰(pitch)、偏航(yaw)角,对应内旋ZYX旋转序列,参数传入大写的
"ZYX"即可。 - scipy对序列参数的大小写有明确语义区分:大写字母代表内旋(每次旋转沿上一次旋转后的新机体坐标轴进行,是RPY角的标准旋转逻辑),小写字母代表外旋(每次旋转沿初始固定参考坐标轴进行),不要传入小写
"zyx",否则输出结果不符合常规RPY定义。 "ZYZ"、"XYZ"等其他序列对应特定领域的欧拉角规则(比如部分机械臂关节角定义会用到ZYZ序列),无特殊约定的RPY转换场景不需要使用。
输出欧拉角顺序
- 函数返回的角度顺序和传入的旋转序列轴顺序严格一一对应,不存在固定的
[roll, pitch, yaw]输出逻辑。 - 当传入
"ZYX"参数时,返回值顺序为(Z轴转角, Y轴转角, X轴转角),对应关系为(yaw, pitch, roll),需要按这个顺序接收返回值才能得到角度的正确对应关系。如果误按roll, pitch, yaw顺序接收,会出现yaw和roll值互换的错误。
验证示例
from scipy.spatial.transform import Rotation as R # 构造纯偏航90°的测试四元数(pitch=0, roll=0) test_quat = R.from_euler('ZYX', [90, 0, 0], degrees=True).as_quat() # 转换为欧拉角 yaw, pitch, roll = R.from_quat(test_quat).as_euler('ZYX', degrees=True) print(yaw, pitch, roll) # 输出 90.0 0.0 0.0,符合预期
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

