四元数解算姿态完全解析与资料汇总.docxVIP

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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
四元数解算姿态完全解析与资料汇总

四元数完全解析及资料汇总 本文原帖出自匿名四轴论坛,附件里的资源请到匿名论坛下载: HYPERLINK /forum.php /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 呃,粘了这么多其实就是为了想知道推导过程小伙伴好理解,真正有用的就是(9.2.34)这个公式。▲这个公式把四元数转换成了方向余弦矩阵中的几个元素,再用这几个元素转换为欧拉角。就求解除了姿态! 先从四元数q0~q3转成方向余弦矩阵: x 再从方向余弦矩阵转换为欧拉角: θ θ θ 好的,公式原理都讲清楚了,下面来看一下匿名的代码: //四元数转欧拉角,这里四元数是q1~q4 和公式里q0~q3相对应。 void Quaternion::to_euler(float *roll, float *pitch, float

文档评论(0)

haowendangqw + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档