|
首先声明,这篇文章是我在网上找到的!为什么转过来呢,因为这个问题困扰我很久,不知道你们有没有碰到这个问题。再就是,文章的第三行说出了我的心声!
这篇文章主要解决这个问题:
四元数到底干什么的?!
What’s the fucking quaternion?!
200px-Eulerangles.svg_
三个欧拉角: ( α,β,γ)。蓝色的轴是 xyz-轴,红色的轴是 XYZ-坐标轴。绿色的线是交点线 (N) 。
1.欧拉角
在四元数出现之前先看下欧拉角:
对于在三维空间里的一个参考系,任何坐标系的取向,都可以用三个欧拉角来表现。为了后面的角度不混乱,我们要先区分参考系和坐标系的概念。
参考系即为大地参考系,是静止不动的。而坐标系则固定于四轴飞行器,随着四轴飞行器的旋转而旋转。
按照右图所示。设定 xyz-轴为四轴上的参考轴,XYZ-轴则是大地的参考轴。右图即为四轴相对地面进行了一定旋转, xy-平面与 XY-平面的相交线为交点线,用英文字母(N)代表。我们可以这样定义欧拉角:
是 x-轴与交点线的夹角
是 z-轴与Z-轴的夹角
是交点线与X-轴的夹角
这样我们就可以用三个欧拉角: (α ,β,γ) 其取值为0-360来描述四轴飞行器 相对于大地的参考系的姿态角度了。
2.轴角
欧拉角使用roll,pitch,yaw来表示这些分量的旋转值。需要注意的是,这里的旋转是针对大地参考系说的,这意味着第一次的旋转不会影响第二、三次的转轴,简单的说,三角度系统无法表现任意轴的旋转,只要一开始旋转,物体本身就失去了任意轴的自主性,这也就导致了万向节锁(Gimbal Lock)的问题。
什么是Gimbal Lock?
正如前面所说,因为欧拉描述中针对x,y,z的旋转描述是世界坐标系下的值,所以当任意一轴旋转90°的时候会导致该轴同其他轴重合,此时旋转被重合的轴可能没有任何效果,这就是Gimbal Lock,
还有一种是轴角的描述方法,这种方法比欧拉描述要好,它避免了Gimbal Lock,它使用一个3维向量表示转轴和一个角度分量表示绕此转轴的旋转角度,即(x,y,z,angle),一般表示为(x,y,z,w)或者(v,w)。(x,y,z)为旋转轴,w为旋转角度。但这种描述法却不适合插值。
未命名2
轴角的表示方法:
那么轴、角的描述方法又有什么问题呢?
虽然轴、角的描述解决了Gimbal Lock,但这样的描述方法会导致差值不平滑,差值结果可能跳跃,欧拉角描述同样有这样的问题。虽然轴角有这样的问题,但是我们根据传感器采集到的角度可以很容易的确定轴角的表达式:(x,y,z,angle)。
所以我们解算姿态时要用四元数算法,可以避免旋转时的GimbalLock,为了控制电机更直观,最后根据欧拉角和四元数转换关系把四元数再转换成欧拉角 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|