logo资料库

四元数解算姿态完全解析及资料汇总.docx

第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
资料共19页,剩余部分请下载后查看
一.什么是四元数?
二、四元数与姿态阵间的关系
三、四元数微分及龙格库塔求Q0~Q3
四、惯性单元测量值融合
四元数完全解析及资料汇总 本文原帖出自匿名四轴论坛,附件里的资源请到匿名论坛下载: http://www.anobbs.com/forum.php 感谢匿名的开源分享,感谢群友的热心帮助。 说什么四元数完全解析其实都是前辈们的解析,小弟真心是一个搬砖的,搬得不好希望大神 们给以批评和指正,在此谢过了。因为本人是小菜鸟一枚,对,最菜的那种菜鸟······所以对四元 数求解姿态角这么一个在大神眼里简单的算法,小弟我还是费了很大劲才稍微理解了那么一点点, 小弟搬砖整理时也是基于小弟的理解和智商的,有些太基础,有些可能错了,大牛们发现了再骂 过我后希望能够给与指正哈。 好,废话到此为止,开始说主体。四元数和姿态角怎么说呢?先得给和我一样的小菜鸟们理 一理思路,小鸟我在此画了一个“思维导图”(我承认我画的丑),四元数解算姿态首先分为两 部分理解:第一部分先理解什么是四元数,四元数与姿态角间的关系;第二部分要理解怎么由惯 性单元测出的加速度和角速度求出四元数,再由四元数求出欧拉角。 图 1 渣渣思维导图
在讲解什么是四元数时,小弟的思维是顺着说的,先由四元数的定义说起,说到四元数与姿 态角间的关系。但在讲解姿态解算时,小弟的思维是逆向的,就是反推回来的,从欧拉角一步步 反推回到惯性器件的测量数据,这样逆向说是因为便于理解,因为实际在工程应用时和理论推导 有很大差别。 实际应用时正确的求解顺序应该为图 1 中序号顺序,即 1->2->3->……. 但在笔者讲解姿态求解时思路是如图 2 的。 图 2 逆向讲解思路 大家在看四元数时最好结合着代码一块看,小弟看的是匿名四轴的代码,感觉写的非常好也 非常清晰,粘出来大家一块观摩。红色部分是核心代码,总共分为八个步骤,和图 1 中的八个步 骤是一一对应的。讲解介绍时也是和代码对比起来讲解的。代码可以去匿名官网上下载,都是开 源的,不是小弟的,所以小弟不方便加在附件中。 //四元数更新姿态 #define Kp 2.0f #define Ki 0.001f void ANO_IMU::Quaternion_CF(Vector3f gyro,Vector3f acc, float deltaT) { //加速度权重,越大则向加速度测量值收敛越快 //误差积分增益 Vector3f V_gravity, V_error, V_error_I; //1.重力加速度归一化 acc.normalize(); //2.提取四元数的等效余弦矩阵中的重力分量 Q.vector_gravity(V_gravity); //3.向量叉积得出姿态误差 V_error = acc % V_gravity; //4.对误差进行积分 V_error_I += V_error * Ki; //5.互补滤波,姿态误差补偿到角速度上,修正角速度积分漂移 Gyro += V_error * Kp + V_error_I; //6.一阶龙格库塔法更新四元数 Q.Runge_Kutta_1st(Gyro, deltaT); //7.四元数归一化 Q.normalize(); //8.四元数转欧拉角 Q.to_euler(&angle.x, &angle.y, &angle.z); } 好的,下面搬砖开始!。。。。。。。。嘿咻嘿咻!!!!
一 . 什 么 是 四 元 数 ? 关于四元数的定义摘自秦永元的《惯性导航》,里面有非常好的讲解,大家可以直接看绪论 和第九章就可以。下面我粘贴了部分原文,粘贴的比较多比较详细,应为本人比较笨还爱较真, 所以按本人的风格就要详尽一点,大牛们都可以自动忽略。 四元数定义、表达方式及运算方法——摘自《惯性导航》-秦永元 P289-292
好,关于四元数定义就搬这么多,其他的大家去附件下载《惯性导航》的 pdf 自己看吧。 下面开始搬四元数与姿态解算关系的。。。。。。嘿咻嘿咻~~~~
二 、 四 元 数 与 姿 态 阵 间 的 关 系 从上面我们知道了四元数的定义,可这四个数和我们要求的三个姿态角有什么关系呢?下面 是详细的推导,同样摘自《惯性导航》-秦永元 P292-297。 四元数与姿态阵间的关系——摘自《惯性导航》-秦永元 P292-297
分享到:
收藏