【机器人】欧拉角,四元数,我的个人理解

1.前言

熬过了毕业设计,难逃提前到导师实验室打工噩运。导师最近又让我去了解一下四旋翼,以后可能会搞四旋翼挂个机械臂的东西……四旋翼建模看的朦朦胧胧的,突然被以前做机械臂时忽略了的刚体旋转给绕昏了,今天似乎懂了一些欧拉角和四元数的东西,特此记录一下,注意,本文仅为我自己的理解,可能会有错误,仅供参考,欢迎留言讨论。

2.欧拉角

欧拉角的定义网上有很多文章,无非就是分别绕一个三维坐标(多数是固定在刚体上的坐标系)各轴依次旋转,顺序各种排列组合,比如XYZ、ZYZ、ZYX等,这都不是什么重点,重点是,在进过了依次旋转后,会得到一个相对于惯性系的旋转矩阵,通过该旋转矩阵可以反求出欧拉角。本文采用XYZ顺序进行讲解,顺序都不是关键

欧拉角虽然简单,但是存在一个奇异现象:当旋转顺序中的第二个旋转轴的旋转角度=90°,或者90°的倍数时,会产生奇异现象,此时旋转矩阵将会出现一个始终为常数的列,比如XYZ顺序下,当Y角度=90°时,旋转矩阵为

【机器人】欧拉角,四元数,我的个人理解_第1张图片

可见,旋转后的Z轴将与惯性系的X轴重合,且无论本次XYZ旋转过程中,X和Z轴的旋转角度为多少,最终Z轴都将与惯性系的X轴重合,失去了一个自由度。同时,这也将导致在根据旋转矩阵求欧拉角时,出现多解情况。

只要是在欧拉角旋转过程中的第二次旋转角度为90°就会发生奇异现象,比如ZXY旋转时,当X角度为90°时,旋转矩阵为

【机器人】欧拉角,四元数,我的个人理解_第2张图片

同样会出现一个为常数的列,使得自由度减少一个。

当然,上面的讨论都是针对同一次欧拉角变换时进行的,如果你完成了一次欧拉角变换,那么再进行一次欧拉角变换则会改变那个为常数的列。

2020-08-04修改:

阅读了《机器人学中的状态估计》,对欧拉角奇异有了更多的理解。当发生奇异现象时,旋转矩阵可以化简为:

【机器人】欧拉角,四元数,我的个人理解_第3张图片

此时,改变θ1和θ3,只要和值不变,都会取得同样的旋转矩阵,这使得原本应该有两个⾃由度的旋转变成了⼀个⾃由度,从⽽⽆法确定这两个⾓度各⾃的值。也就是说,欧拉角奇异现象只在由旋转矩阵反求欧拉角时,会有影响,会有无数解。反之不存在奇异问题

3.四元数

四元数表示的是一个四维空间超球在三维空间的投影,具体概念过于复杂抽象,我只需要知道怎么应用即可。如何得到四元数就不再赘述了,简单说一下四元数在进行向量变换时的几何意义吧。四元数进行旋转变换的公式为

p'=qpq^{-1}

式中,p为原向量,p'为旋转变换后的向量,它们都用纯四元数进行表示,即标量部分=0;q为表示本次旋转的四元数,其值与绕轴旋转时的角度值ω的一半有关。可以理解为首先将p经过q变换到四维空间中的一个临时点w,此时移动了ω/2,然后再将w经过q的逆变换到三维空间中的p',此时又移动了ω/2。四元数进行旋转变换插值时,直接对各个元素进行线性插值即可,使四元数在一个四维超球面上沿着一个大圆路径运动,在三维空间中就是绕轴旋转,四元数插值最终表现为绕轴旋转。

最后,放一个在同样的起始和终止姿态下,使用欧拉角插值和四元数插值,可以发现,欧拉角因为存在奇异点,导致有多解,且解有点奇怪,所以运动很不协调;而四元数插值是绕轴旋转,所以效率较高,且插值计算也不复杂,只需求出初始和终止点的单位四元数即可。

【机器人】欧拉角,四元数,我的个人理解_第4张图片

你可能感兴趣的:(机器人控制学习)