本文主要是介绍MPU9250调试。做姿态、指南针(融合磁力计计算Yaw),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
底部 附工程源码链接
--2022-10-5
===================
近期调了一个姿态传感器,使用了MPU9250,主要是算法库不太好找,自己写是不太可能的,欧拉角、四元素计算反正我是没看懂,也贪图快,想一步到位调出来。
硬件工程师使用了IIC接口。
1. 最早调试使用了官方提供的mpl例程,移植完后俯仰和翻滚都没有问题,主要是YAW 方向角,每次芯片重启Yaw都是0,转动芯片吧这个值也变,就是置0不大对,毕竟9250是9轴有磁力计,每次重启计算出来的YAW应该和重启前一至是正北的角度偏移才对。
2. 后来翻了下mpl文档,发现需要对磁力计8字校准,mpl才会把磁力计融合进Yaw,否者Yaw是6轴融合的结果。试了下8字校准,不知道是不是环境内磁场干扰的关系,特别难校准,校准后的确融合了磁力计,得到了理想的Yaw。不过似乎这个校准值可以被存储下来,再次启动时传给mpl继续使用。我没有实现,因为产品需要,我想找一个校准简便的方式,但是这样一来mpl库就无法使用了。
3. 开始了漫长的找库过程,主要是找能够融合磁力计的计算方法,搜遍了大小论坛,基本上就是copy的mpl库。特别是某莫,交了几百块钱,反正没翻到有价值的东西,后来听说还改版了,钱也打了水漂,这都是后话了。
4. 在git找到了救命稻草。
GitHub - kriswiner/MPU9250: Arduino sketches for MPU9250 9DoF with AHRS sensor fusion
移植了这个例程,主要还是免费的,开源就是伟大。
例程比较简洁,开始会先进行校准,陀螺仪、重力。磁力计校准没有细看,这里换了自己的校准方式。
我的磁力计的校准思路是 :校准时进行三个轴面采样,每个轴面校准两个磁力计轴向。比如水平面采集X Y;每个平面划分成4个象限(要求高可以分为8个),判断每个象限采集足够的点之后判定为采集完成。采集过程记录点的最大值和最小值即可找到中心点。中心点值即为磁力计补偿值。
关于象限的判断,比如水平面采样,Z不使用。计算方法:atan2(X,Y)/(2*acos(-1))*360 方位角转度数,进而判断象限。校准完这些值可以做个结构体写flash,下次还用它。
最后
例程似乎有个bug,在选择坐标系时磁力计的坐标系与其他6轴不能吻合,也不符合右手定理。
当时把磁力计的Z轴反转了下,没有使用例程。计算的Yaw比较稳定,方向和手机磁力计大致相同。
使用的坐标系:
原例程磁力计是mag[1] mag[0] mag[2]。
这个库还算稳定,Yaw有小范围漂移,漂到一定范围自己修正。对比官方的mpl计算值的确差点,不过自己产品对Yaw要求不是特别高,区分东西南北绰绰有余。
在git评论区看到有同样疑问,作者还没有回复,或许是个bug。
附件:
https://download.csdn.net/download/Yangquot/86735853
代码入口mpu_9250_9axis,先初始化再进行计算。磁力计校验后存了下flash,校验时是按区域采点数做判断。
==========================>
同时自己做了一套最小系统评估板,宝上淘了几次9250发现都是翻新的,磁力计无法读取到;后面采购了些原装9250做了一套最小系统。并且基于STM32F103调试了一个简易的、可视化的磁力计校准方法。
评估板实测:
“简易式”磁力计校准:
在要求轴面转动,软件采集平面上8个区间上的点。并以“可视化”方式显示8个区间采集进度。
mpu9250
淘链接:
https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.1d293d0dnCTcxQ&ft=t&id=735135647199
<<END
这篇关于MPU9250调试。做姿态、指南针(融合磁力计计算Yaw)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!