从 MPU-9250 获取 heading/direction
Getting heading/direction from MPU-9250
我正在尝试使用 Arduino 从包含陀螺仪、加速度计和磁力计的 MPU-9250 传感器获取航向。
对于我的产品,我需要从设备获取滚动和航向。我已经想出了如何取卷。使用 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; }
起初,这似乎可行,但一旦您 "roll" 设备,保持标题不变,标题的值就会到处都是。
有没有人有使用陀螺仪、加速度计或磁力计(在 C++ 中,使用 Arduino)确定航向的好代码片段?
看看https://github.com/kriswiner/MPU9250
具体来说,MPU9250BasicAHRS.ino 在 Arduino 上进行了滚动、俯仰和偏航的计算。
对于可能仍然觉得它有用的人来说,错误的输出是由于在代码中使用 Sleep()
s 造成的。显然这会扰乱测量结果。我用它们制作 LED 图案。我想下一个最好的办法是将 millis()
与 if
语句结合使用来重现 Sleep()
s.
我正在尝试使用 Arduino 从包含陀螺仪、加速度计和磁力计的 MPU-9250 传感器获取航向。
对于我的产品,我需要从设备获取滚动和航向。我已经想出了如何取卷。使用 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; }
起初,这似乎可行,但一旦您 "roll" 设备,保持标题不变,标题的值就会到处都是。
有没有人有使用陀螺仪、加速度计或磁力计(在 C++ 中,使用 Arduino)确定航向的好代码片段?
看看https://github.com/kriswiner/MPU9250
具体来说,MPU9250BasicAHRS.ino 在 Arduino 上进行了滚动、俯仰和偏航的计算。
对于可能仍然觉得它有用的人来说,错误的输出是由于在代码中使用 Sleep()
s 造成的。显然这会扰乱测量结果。我用它们制作 LED 图案。我想下一个最好的办法是将 millis()
与 if
语句结合使用来重现 Sleep()
s.