- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MPU6050软件姿态解算
我是勤劳的搬运⼯。
转 ⾃
使⽤MPU6050硬件DMP解算姿态是⾮常简 的,下⾯介绍由三轴陀螺仪和加速度计的值来使⽤四元数软件解算姿态的⽅法。
我们先来看看如何⽤欧拉⾓描述⼀次平⾯旋转(坐标变换) :
设坐标系绕旋转 α⾓后得到坐标系,在空间中有⼀个⽮量在坐标系中的投影为,在内的投影为由于旋转绕进⾏,所以Z坐标未变,即有。
转换成矩阵形式表⽰为 :
整理⼀下 :
所以从旋转到可以写成上⾯仅仅是绕⼀根轴的旋转,如果三维空间中的欧拉⾓旋转要转三次:
上⾯得到了⼀个表⽰旋转的⽅向余弦矩阵。
不过要想⽤欧拉⾓解算姿态,其实我们套⽤欧拉⾓微分⽅程就⾏了:
上式中左侧,是本次更新后的欧拉⾓,对应row、pit、yaw。右侧,是上个周期测算出来的⾓度,三个⾓速度由直接安装在四轴飞⾏器的三
轴陀螺仪在这个周期转动的⾓度, 位为弧度,计算间隔时T陀螺⾓速度,⽐如0.02秒0.0 1弧度/秒=0.0002弧度。间因此求解这个微分⽅
程就能解算出当前的欧拉⾓。
前⾯介绍了什么是欧拉⾓,⽽且欧拉⾓微分⽅程解算姿态关系简 明了,概念直观容易理解,那么我们为什么不⽤欧拉⾓来表⽰旋转⽽要引
⼊四元数呢?
⼀⽅⾯是因为欧拉⾓微分⽅程中包含了⼤量的三⾓运算,这给实时解算带来了⼀定的困难。⽽且当俯仰⾓为90度时⽅程式会出现神奇
的 “GimbalLock”。所以欧拉⾓⽅法只适⽤于⽔平姿态变化不⼤的情况,⽽不适⽤于全姿态飞⾏器的姿态确定。
四元数法只求解四个未知量的线性微分⽅程组,计算量⼩,易于操作,是⽐较实⽤的⼯程⽅法。
我们知道在平⾯(x,y)中的旋转可以⽤复数来表⽰,同样的三维中的旋转可以⽤ 位四元数来描述。我们来定义⼀个四元数 :
我们可以把它写成,其中,。那么是⽮量,表⽰三维空间中的旋转轴。w是标量,表⽰旋转⾓度。那么就是绕轴旋转w度,所以⼀个四元数可以
表⽰⼀个完整的旋转。只有 位四元数才可以表⽰旋转,⾄于为什么,因为这就是四元数表⽰旋转的约束条件。
⽽刚才⽤欧拉⾓描述的⽅向余弦矩阵⽤四元数描述则为 :
所以在软件解算中,我们要⾸先把加速度计采集到的值(三维向量)转化为 位向量,即向量除以模,传⼊参数是陀螺仪x、y、z值和加速度
计x、y、z值 :
void IMUupdate(float gx, float gy, float gz, float ax, float ay, float az)
{ float norm;
float vx, vy, vz; float ex, ey, ez;
norm = sqrt(ax*ax + ay*ay + az*az);
ax = ax / norm;
ay = ay / norm;
az = az / norm;
下⾯把四元数换算成⽅向余弦中的第三⾏的三个元素。刚好vx、vy、vz 。其实就是上⼀次的欧拉⾓ (四元数)的机体坐标参考系换算出来
的重⼒的 位向量。
estimated direction of gravity vx = 2* (q1*q3 - q0*q2);
vy = 2* (q0*q1 + q2*q3);
vz = q0*q0 - q1*q1 - q2*q2 + q3*q3;
axyz是机体坐标参照系上,加速度计测出来的重⼒向量,也就是实际测出来的重⼒向量。
axyz是测量得到的重⼒向量,vxyz是陀螺积分后的姿态来推算出的重⼒向量,它们都是机体坐标参照系上的重⼒向量。
那它们之间的误差向量,就是陀螺积分后的姿态和加计测出来的姿态之间的误差。
向量间的误差,可以⽤向量叉积 (也叫向量外积、叉乘)来表⽰,exyz就是两个重⼒向量的叉积。
这个叉积向量仍旧是位于机体坐标系上的,⽽陀螺积分误差也是在机体坐标系,⽽且叉积的⼤⼩与陀螺积分误差成正⽐,正好拿来纠正陀
螺。 (你可以⾃⼰拿东西想象⼀下)由于陀螺是对机体直接积分,所以对陀螺的纠正量会直接体现在对机体坐标系的纠正。
integral error scaled integral gain exInt = exInt + ex*Ki;
eyInt = eyInt + ey*Ki;
ezInt = ezInt + ez*Ki;
⽤叉积误差来做PI修正陀螺零偏
integral err
文档评论(0)