Robotlics-四元数-解决欧拉角的多解和奇异性问题
已知旋转矩阵 RR,可以反求三个欧拉角。以常见的 ZYX 旋转为例:

在非奇异情况下,根据齐次变换矩阵,可以计算:

但这种表示存在两个问题。
1. 欧拉角可能存在多组解
角度具有周期性:
θ≡θ+2kπ
而且同一个旋转矩阵通常可以对应不同的欧拉角组合。
例如,一组解为:
(α,β,γ)
另外一组可能是:
(α+π, π−β, γ+π)
它们描述的最终姿态相同。
因此:
一个空间姿态,不一定只对应一组欧拉角。
2. 欧拉角存在奇异性
对于 ZYX 欧拉角,当:
就会出现万向节锁。
例如,当:
旋转矩阵只能确定:
却不能分别确定 α和 γ
此时可能有:
也可能有:
只要:
得到的姿态就是一样的。
这不是计算公式写错了,而是欧拉角本身在这个姿态下失去了一个独立方向。
3. 问题的根源是什么?
欧拉角通过三次连续旋转描述姿态:
前一次旋转会影响后面的旋转轴。
当两个旋转轴恰好重合时,就会失去一个自由度,产生万向节锁。
更深层的原因是:
无法只用一套全局连续、处处无奇异的三个角度,表示所有三维旋转。
因此,如果机器人内部一直使用欧拉角进行姿态计算,可能遇到:
- 角度突然跳变;
- 同一姿态出现多组角度;
- 接近奇异点时数值极其敏感;
- 插值轨迹不自然;
- 姿态微分和角速度计算复杂。
这就引出了四元数。
四元数的基本思想
欧拉角使用“三次绕轴旋转”描述姿态。
四元数换了一种思路:
任何三维旋转,都可以看成绕某一根单位轴 w,一次旋转角度 θ。
设旋转轴为:
4. 为什么是四个数?
空间旋转实际上只有三个自由度,而四元数使用四个数:
这是因为它还需要满足单位约束:
因此:
4个参数−1个约束=3个自由度
四元数虽然用了四个数,但没有增加姿态的实际自由度。
5. 四元数为什么没有万向节锁?
四元数不是依次绕 X、Y、Z 三根轴旋转,而是直接描述: 旋转轴+旋转角度
所以不存在“第二次旋转后,两根轴重合”的问题。
因此,四元数可以连续覆盖所有三维姿态,不会在 Pitch 等于 ±90∘\pm90^\circ 时发生万向节锁。
6. 四元数是否完全唯一?
四元数仍然不是一一对应。
q 和 −q 表示同一个旋转。
这是四元数的“双覆盖”性质,但它不会造成万向节锁。
在连续运动中,为了防止四元数符号突然翻转,通常检查相邻四元数的点积:
8. 四元数转换回欧拉角还会奇异吗?
会。
四元数本身没有万向节锁,但如果把它转换成 ZYX 欧拉角:





















浙公网安备 33010602011771号