5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 540|回复: 5

无人机理论(三):简单搞定四元数

[复制链接]
发表于 2019-6-19 18:44 | 显示全部楼层 |阅读模式
点击查看详情
1 前沿
         上一篇讲到了欧拉角表示姿态时会遇到万向锁的问题,这就导致同一种空间状态欧拉角的表示方式不唯一,当出现万向锁现象时,同一种旋转有无数种欧拉角表示形式,从而导致了欧拉角差值时出现问题,因为当你俯仰角接近90°时,两组千差万别的欧拉角表示可以是同一种旋转。所以为了解决这些问题,数学上想出了用四元数的形式来表征姿态的方法。

2 四元数由来

四元数是由爱尔兰数学家Hamilton发明的,是发明的不是发现的,数学上的很多东西跟物理不一样,它不一定是事物的发展规律,它有时候就是数学家们凭空想象出来的东西,有可能这个东西诞生以后就没有人再用过,也有可能过了很多年,有人发现这个理论可以解释很多现象,或者这个理论可以用来分析很多无法用现有知识解释的现象。所以,大家平常没事做的时候可以天马行空,头脑风暴一下,记得把你想到的东西记下来,没准几百年以后就会有用你名字命名的理论存在了。

回到四元数上来,对于导航飞控的算法,我们需要对四元数有什么了解,其实很简单,我们要知道它的基本运算规律,要知道它以什么样的方式表征姿态,要知道它跟其他两个表征姿态的欧拉角和旋转矩阵方式如何互相转换。除此之外,还有后续如何使用四元数进行建模和控制律设计,如何在导航算法中得到四元数的状态,这些在以后的篇幅中会进行解释,今天,我们就来看看上面几个问题是怎么解决的。

3  基本运算规律

四元数是由1个实数加上3个复数组合而成,通常可以表示成w+xi+yj+zk或者(w,(x,y,z)),其中w、x、y、z都是实数,而i^2 = j^2 =k^2 = -1, i^0 = j^0 = k^0 = 1。那对于四元数的运算法则,我们要清楚的有以下几个,假设有两个四元数分别为q1=(w1,(x1,y1,z1))和q2=(w2,(x2,y2,z2)),令v1 = (x1,y1,z1),v2= (x2,y2,z2),则
远算法则.png
4  四元数的姿态表示

了解了四元数的基本运算规律后,我们来看下它如何表征姿态,假设存在一根旋转轴u,有一个绕u轴旋转σ角度的这么一个旋转存在,那这时候代表这个旋转的四元数是这样子的:
四元数表示.png
其中u是旋转轴的单位向量,q是一个单位四元数。
四元数运算图形化.png
那上述这个四元数有什么用呢,它对任何向量施加以下算子运算后可以得到该向量绕u轴旋转σ角度后的向量:
四元数旋转公式.png
至于为什么会有这个结果,我们这儿就不展开证明了,思路就是你要证明v和w之间的夹角是σ就行,证明的事情交给数学家们去做,我们只需要知道四元数这么写可以用来表征姿态,其实是表征旋转关系,跟旋转矩阵的表示方法类似,只不过它只需要4个元素,而旋转矩阵需要9个元素。

5  欧拉角、旋转矩阵、四元数:

四元数转旋转矩阵:
四元数转旋转矩阵.png
旋转矩阵转四元数:

已知旋转矩阵:
则四元数为:
欧拉角转四元数:

已知欧拉角:α、β、γ
四元数为:
欧拉角90度奇点四元数.jpg
## 四元数转欧拉角:

已知四元数:
四元数.png
欧拉角为:
已知四元数求欧拉角.png
但是当β角度为90度时,四元数反向计算欧拉角时会出现奇点,是无法计算的。因为这时候简化后的四元数是这样的:
欧拉角奇点时的四元数.png
所以atan2中后面那一项就变成了0:
atan2.png
这时候我们通常令α=0,然后解出欧拉角的值。

6 总结

到这里基本上欧拉角、旋转矩阵、四元数的关系就说清楚了,对于四元数,我们不需要去想象它是怎么旋转的,我们只需要知道它是怎么表征姿态的,后续会告诉你们它是如何进行建模和状态估计的,这就足够了,那我们来总结一下这三种方法各自的优缺点:

欧拉角:非常直观,我们可以很容易理解它的意思,也能想象出对应的空间位置,但是存在万向锁现象,导致后面有很多数学问题。

旋转矩阵:其实旋转矩阵和欧拉角是一个意思,欧拉角就是旋转矩阵,旋转矩阵在一定意义上就是欧拉角,旋转矩阵有9个元素,计算繁杂,而且也不直观。

四元数:没有奇点,能表征任何旋转关系,而且表示简单,只有四个元素,计算量小,但是不直观。

限于作者水平,如有错误,欢迎指正!

欢迎大家关注公众号:无人机系统技术,不定时更新无人机相关文章,也可加群交流,谢谢。

已知旋转矩阵求四元数.png
旋转矩阵.png

欢迎继续阅读楼主其他信息

发表于 2019-6-19 22:12 | 显示全部楼层
大神收下我的膝盖,四元数的概念第一次听说,但我发现目前的3D软件几乎在旋转上都会碰到这个问题,maya是通过更换旋转轴优先级来解决,ue4不知道用什么方法,只知道转着转着有时候突然坐标全变了,应该也是更换了相对坐标系,这样的解决方案是不是会更简单些?引入四元坐标会不会很大计算量?
来自安卓客户端来自安卓客户端
发表于 2019-6-19 22:39 | 显示全部楼层
楼主真棒,可否留个联系方式,小弟想向你学习
来自安卓客户端来自安卓客户端
 楼主| 发表于 2019-6-20 08:21 | 显示全部楼层
longplayer 发表于 2019-6-19 22:12
大神收下我的膝盖,四元数的概念第一次听说,但我发现目前的3D软件几乎在旋转上都会碰到这个问题,maya是通 ...

计算量不大,四元数是最好的解决方法
发表于 2019-6-22 08:54 | 显示全部楼层
共轭和逆好像都没学过!因式分解都记不清了!矩阵、向量、虚数、代数几何都只记得个概念!无人机看来是混不下去了!
 楼主| 发表于 2019-6-22 15:30 | 显示全部楼层
付之一笑 发表于 2019-6-22 08:54
共轭和逆好像都没学过!因式分解都记不清了!矩阵、向量、虚数、代数几何都只记得个概念!无人机看来是混不 ...

大学里矩阵运算都有的啊,可以买本矩阵的书看下,矩阵基本是本科生和研究生的必修课,对于做控制的人是基础
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

快速回复 返回顶部 返回列表