惯性导航之四元数与欧垃角互转(五)
来源:互联网 发布:在线数据库设计 编辑:程序博客网 时间:2024/05/16 13:02
虽然还没有搞得特别明白,这一次说一下四元数与欧拉角之间的转换。
单位四元数(Unit quarternion)可以用于表示三维空间里的旋转[1]。它与常用的另外两种表示方式(三维正交矩阵和欧拉角)是等价的,但是避免了欧拉角表示法中的万向锁问题。比起三维正交矩阵表示,四元数表示能够更方便地给出旋转的转轴与旋转角。(维基百科)
工具:方向余弦矩阵
开始正文
设 q 为一个单位四元数,而 p 是一个纯四元数,定义
Rq(p)=qpq−1
则Rq(p)) 也是一个纯四元数,可以证明 Rq 确实表示一个旋转,这个旋转将空间的点 p 旋转为空间的另一个点Rq(p)) 。(维基百科四元数与空间旋转)
下面进行推导过程:
一、四元数转换为欧拉角
已知,单位四元数
则:
将上式按照乘法分配律展开式子太长,可以将三个式子全部表示为矩阵(向量),然后相乘,最终化简成下面的形式:
这个就是四元数表示旋转的旋转矩阵。
用欧拉角表示旋转的方向余弦矩阵:
之前说过,欧拉旋转是要有顺序的,我们使用的是ZXY顺规:
用字母表示前面的式子,可以表示
则
α=−arcsin(A32)=−sin(2(q2q3−q0q1)) β=arctan(A13A33)=arctan(2(q1q3+q0q2)1−2q21−2q22) γ=arctan(A12A22)=arctan(2(q1q2+q0q3)1−2q21−2q23)
这样就用四元数表示了欧拉角,在后面的姿态解算中就可以直接转换成程序代码使用了。
二、欧拉角转换为四元数
欧拉角旋转还是按照ZXY顺规,分解为三次旋转;
- 第一次,绕Z轴:
α=β=0,qγ=cosγ2+sinγ2⋅k - 第二次,绕X轴:
γ=β=0,qα=cosα2+sinα2⋅i 第三次,绕Y轴:
α=γ=0,qβ=cosβ2+sinβ2⋅j 则四元数
q=q0+q1i+q2j+q3k 可以表示为:q=qγqαqβ=(cosγ2+sinγ2⋅k)(cosα2+sinα2⋅i)(cosβ2+sinβ2⋅j) =(cosα2cosγ2cosβ2+sinα2sinγ2sinβ2)+(sinα2cosγ2cosβ2−cosα2sinγ2sinβ2)⋅i +(cosα2cosγ2sinβ2−sinα2sinγ2cosβ2)⋅j +(cosα2sinγ2cosβ2−sinα2cosγ2sinβ2)⋅k
可得:
q0=cosα2cosγ2cosβ2+sinα2sinγ2sinβ2 q1=sinα2cosγ2cosβ2−cosα2sinγ2sinβ2 q2=cosα2cosγ2sinβ2−sinα2sinγ2cosβ2 q3=cosα2sinγ2cosβ2−sinα2cosγ2sinβ2
这样就得到了欧拉角到四元数的转化,在这两种转换的过程中,也使用了不少的矩阵,也涉及到了方向余弦矩阵等,这些不详细说了。。翻了好多线代资料。
学会欧拉角和四元数之间的像话转换之后对四元数和欧拉角有了相对清晰的认识之后就可以直接写程序了。(本文手打,字母和角度太多,会有错误….)
- 惯性导航之四元数与欧垃角互转(五)
- 惯性导航之认识四元数(四)
- 惯性导航之欧拉角与万向节死锁(三)
- 惯性导航之Runge-Kunta法更新四元数(六)
- 惯性导航之术语基础(一)
- 惯性导航之认识欧拉角(二)
- 惯性导航之认识欧拉角
- 惯性导航
- 惯性导航
- 惯性导航
- 惯性导航
- 捷联式惯性导航基础知识(一)
- 惯性导航原理之姿态算法-四元数&欧拉角&等效转动矢量
- PixHawk学习笔记 之 惯性导航浅析(暂时占个坑,还没写)
- 捷联惯性导航技术之卡尔曼滤波
- UAV 惯性导航
- 惯性导航-加速度计
- 惯性导航——扩展卡尔曼滤波(一)
- 第四周--项目4建设双链表算法库
- 九度OJ 1039:Zero-complexity Transposition(逆置) (基础题)
- 学习笔记一:统计学习方法概论
- 中文序列按笔画排序
- 正交镜像滤波器组
- 惯性导航之四元数与欧垃角互转(五)
- 九度OJ 1040:Prime Number(质数) (递归)
- Gson之TypeAdapterFactory
- 如何实现支持数亿用户的长连消息系统
- 创建数据库与完成数据添删改查(一)
- web.xml中listener, filter, servlet加载顺序
- Linux网卡切换测试
- 每周更新知识
- opencv 2 学习笔记1