欧拉角、quat四元组和旋转矩阵的关系
在具身智能和机器人领域中,经常会涉及这三个的转化
1. 介绍
这里介绍这三种姿态的表示方法
欧拉角(Euler Angles):
用3个角度描述旋转:(roll, pitch, yaw) 或 (x, y, z),表示按顺序绕 x → y → z 轴旋转
致命问题:- 万向锁(Gimbal Lock): pitch = ±90° 时自由度丢失
- 不唯一: 同一个旋转 → 多组欧拉角
- 依赖顺序: xyz ≠ zyx
四元数(Quaternion)
用 4 个数表示旋转:q = [x, y, z, w],可以理解为:“绕某个轴旋转 θ”
特点:- 无万向锁
- 数值稳定,机器人 / 图形学标准表示
- 特性:q 和 -q 表示同一个旋转
旋转矩阵(Rotation Matrix)
一个 3×3 正交矩阵
特点:唯一表示,无奇异性,适合计算(FK/IK)
缺点:9 个数(冗余),需要保持正交(数值漂移)
2. 相互转化
2.1 Quat ↔ 旋转矩阵
这二者之间转换最稳定,完全可逆(推荐中间表示)
quat → matrix
from scipy.spatial.transform import Rotation as R R.from_quat(q).as_matrix()matrix → quat
R.from_matrix(Rm).as_quat()2.2 Quat ↔ 欧拉角
quat → euler
R.from_quat(q).as_euler('xyz')euler → quat
缺点:不保证可逆
原因:欧拉角不唯一、存在奇异点
R.from_euler('xyz', euler).as_quat()2.3 Euler ↔ 旋转矩阵
euler → matrix
R.from_euler('xyz', euler).as_matrix()matrix → euler
缺点:多解问题,奇异性问题
R.from_matrix(R).as_euler('xyz')下面给出了三种表示的相互转化关系图,绿色箭头表示可以转化且不存在多解或者歧义问题。
