有多少人工,就有多少智能

Robotlics-四元数-解决欧拉角的多解和奇异性问题

已知旋转矩阵 RR,可以反求三个欧拉角。以常见的 ZYX 旋转为例:

image

 

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

             

image

 但这种表示存在两个问题。

 

1. 欧拉角可能存在多组解

角度具有周期性:

θ≡θ+2kπ

 

而且同一个旋转矩阵通常可以对应不同的欧拉角组合。

例如,一组解为:

(α,β,γ)

另外一组可能是:

(α+π, π−β, γ+π)

它们描述的最终姿态相同。

因此:

一个空间姿态,不一定只对应一组欧拉角。

2. 欧拉角存在奇异性

对于 ZYX 欧拉角,当:

image

就会出现万向节锁。

例如,当:

image

旋转矩阵只能确定:

image

 

却不能分别确定 α和 γ

此时可能有:

          image

 

也可能有:

image

 

只要:

        image

 

得到的姿态就是一样的。

这不是计算公式写错了,而是欧拉角本身在这个姿态下失去了一个独立方向。

3. 问题的根源是什么?

欧拉角通过三次连续旋转描述姿态:

   

image

 

前一次旋转会影响后面的旋转轴。

当两个旋转轴恰好重合时,就会失去一个自由度,产生万向节锁。

更深层的原因是:

无法只用一套全局连续、处处无奇异的三个角度,表示所有三维旋转。

 

因此,如果机器人内部一直使用欧拉角进行姿态计算,可能遇到:

  • 角度突然跳变;
  • 同一姿态出现多组角度;
  • 接近奇异点时数值极其敏感;
  • 插值轨迹不自然;
  • 姿态微分和角速度计算复杂。

这就引出了四元数。

四元数的基本思想

欧拉角使用“三次绕轴旋转”描述姿态。

四元数换了一种思路:

任何三维旋转,都可以看成绕某一根单位轴 w,一次旋转角度 θ。

设旋转轴为:

image

 

image

 

4. 为什么是四个数?

空间旋转实际上只有三个自由度,而四元数使用四个数:

   

image

 

这是因为它还需要满足单位约束:

image

 

因此:

      4个参数−1个约束=3个自由度

四元数虽然用了四个数,但没有增加姿态的实际自由度。

 

5. 四元数为什么没有万向节锁?

四元数不是依次绕 X、Y、Z 三根轴旋转,而是直接描述: 旋转轴+旋转角度

所以不存在“第二次旋转后,两根轴重合”的问题。

image

 因此,四元数可以连续覆盖所有三维姿态,不会在 Pitch 等于 ±90∘\pm90^\circ 时发生万向节锁。

6. 四元数是否完全唯一?

四元数仍然不是一一对应。

                q 和 −q 表示同一个旋转。

image

 

​

这是四元数的“双覆盖”性质,但它不会造成万向节锁。

在连续运动中,为了防止四元数符号突然翻转,通常检查相邻四元数的点积:

 

image

 

image

 

image

 

8. 四元数转换回欧拉角还会奇异吗?

会。

四元数本身没有万向节锁,但如果把它转换成 ZYX 欧拉角:

image

 

image

 

image

 

image

 

 

 

posted @ 2026-09-18 23:29  lvdongjie-avatarx  阅读(27)  评论(0)    收藏  举报