场景:stm32f1通过软件I2C读取MPU6050中DMP输出的四元数,再通过以下公式计算出姿态角Pitch = asin(-2*q1*q3 + 2*q0*q2)*57.3; //俯仰角
Roll = atan2(2*q2*q3 + 2*q0*q1, -2*q1*q1 - 2*q2*q2 + 1)*57.3; //翻滚角
Yaw = atan2(2*(q1*q2 + q0*q3), q0*q0 + q1*q1 - q2*q2 - q3*q3)*57.3; //偏航角
现象:偏航角Yall可以单独动作,范围0~±180(实际±175左右),翻滚角Roll也可以单独动作,范围0~±180(实际±175左右),可是当俯仰角Pitch单独动作时,动作到一定角度,另外两个轴的数据就突变,如下图(三列从左到右依次为:俯仰角、翻滚角、偏航角):
0071,0001,0006
0073,0002,0006
0075,0002,0007
0076,0002,0007
0077,0002,0006
0077,0001,0005
0079,0001,0004 //突变处
0087,-171,-168 //突变处
0085,-175,-173
0083,-177,-175
0082,-176,-174
0081,-176,-174
0080,-175,-174
0079,-175,-173
正**作都会这样。
求助:有没有朋友遇到过这样的问题,该如何解决?这是MPU6050固有问题,还是我程序或者公式的问题?
另外,因为没有使用磁力计的原因,还出现了一个老早就有人提出的现象:当MPU6050旋转一圈回到原位时,偏航角的误差已经达到10度。想知道,解决这个误差只能通过增加磁力计吗?
|