【发布时间】:2018-03-13 11:19:44
【问题描述】:
我坚持使用 arduino 成功倾斜补偿我的 9DOF IMU。我知道这不是常见的语法问题,而是一种数学问题,但有人可以帮忙吗?
问题是当我以滚动和/或俯仰方式移动传感器同时保持相同的偏航方向时,偏航角不会保持应有的恒定。
float Ax; float Ay; float Az // these are raw accelerometer readings
float Magx; float Magy; float Magz // these are raw magnetometer readings
float RollAngle; float PitchAngle; float YawAngle; // these are calculated angles from raw readings
RollAngle = atan2(Ay,Az);
PitchAngle = atan2((-Ax),((Ay*sin(RollAngle)) + Az*cos(RollAngle)));
YawAngle = atan2( (Magz*sin(RollAngle)-Magy*cos(RollAngle)) , ((Magx*cos(PitchAngle))+(Magy*sin(PitchAngle)*sin(RollAngle))+Magz*sin(PitchAngle)*cos(RollAngle)) );
有人有什么想法吗?
【问题讨论】:
-
您应该所有您的计算仅基于原始读数
Ax, Ay和aZ。但是您使用计算值 Roll in Pitch 和 Yaw。 -
嗨,保罗。感谢您的回复。我不知道你打算如何做到这一点。滚动角和俯仰角必须从原始 Ax、Ay 和 Az 计算出来,然后在下面的等式中用作 phi 和 theta。还是我把它弄反了/错了?请参阅变量声明和 cmets 中的 EDIT
-
如果你确定数学没问题,那么我很抱歉。但我看到计算中可能存在循环性,其中顺序会影响结果。
标签: c arduino accelerometer magnetometer