我正在尝试从MPU-9250传感器获得方向,该传感器包含使用Arduino的陀螺仪,加速度计和磁力计。
对于我的产品,我需要从设备上获取卷和标题。我已经想出了如何获取卷。使用Boulderflight MPU-9250库,我可以使用以下方法确定滚动位置:
roll = 180 * atan(accY/sqrt(accX*accX + accZ*accZ))/M_PI;
我在某个地方找到了此计算,它似乎运行良好,我不得不承认我实际上并不知道它是如何工作的。
对于我发现的标题:
if (magY > 0) { heading = 90 - atan(magX/magY)*(180/M_PI); }
else if (magY < 0) { heading = 270 - atan(magX/magY)*(180/M_PI); }
else if (magY == 0 && magX < 0) { heading = 180; }
else if (magY == 0 && magX > 0) { heading = 0; }
乍一看,这似乎可行,但是只要您“滚动”设备并保持航向不变,航向的值就随处可见。
有人使用陀螺仪,加速度计或磁力计(在C ++中,使用Arduino)确定航向吗?
答案 0 :(得分:0)
看看https://github.com/kriswiner/MPU9250
具体来说,MPU9250BasicAHRS.ino在Arduino上具有滚转,俯仰和偏航的计算。
答案 1 :(得分:0)
对于可能仍然觉得有用的人来说,不良的输出是由于在代码中使用Sleep()
而引起的。显然,这弄乱了测量结果。我用它们来制作LED图案。我想第二件事是将millis()
与if
语句结合使用以重现Sleep()
。