我之前想过怎么校准HMC5883磁力计。在网上搜就是平面校准法和八字校准法。但是我实际试的时候感觉这两种方法校准并不好用,要求精度不高还可以,但我之前做的项目要求很高的精度。一直没成功。
之前也发贴问过。我校准100次,就会得到100种校准结果,尤其是八字校准法,真是手法不对就全完了。
前几天在试用加速度计的模值等于1,再用Matlab来拟合出零偏,感觉效果还可以,突然想到,是不是磁力计也可以这么弄??
而且我之前一直感觉手机中的指南针所使用的八字校准法 和 苹果手机里那个转一圈的奇葩校准法 根本就不可能得到磁力计的准确值。如果它也用模值进行拟合就说的通了。
我试了一下苹果手机的那种手法(现在小米更新系统后也用了那种手法,以前小米是八字校准),然后拿我自己的磁力计转,再查了一下世界地磁模型,我这里地磁的模值今年应该是5.2左右,然后把所有数据用Matlab拟合了一下。。。果然发现我试的几次都能得到几乎相同的初始校准值!也就是说只要我取了足够多的测试数据,都用Matlab来拟合,那不管是什么八字校准,还是平面校准,还是苹果那种校准。我都可以得到比较准确的校准值了,不是么?
大家也有做飞行器之类的吧?用过磁力计校准的朋友,说一下想法呗?或者还有其它什么样准方法,都和我说一下呗。我未来好一阵子都会做类似的东西,啥时回复我都行。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
额,吓我一跳,以为出bug了。。。第一次看到原子哥问东西。
我用过MPU9250,数据可以用的,和HMC5883差不多,网手册上的精度来看MPU9250内部的AK8963比HMC5883精度高一些,但价钱贵一点儿,当时是想比较一下两者的精度和分辨率,所以感觉数据差不多后就没再用。
磁力计测到的是磁场强度,校正时必须在一个无干扰的环境下(最好是室外),身上不能有金属物品,包括板子上的元件、电源线、杜邦线、手表、腰带、电脑、空调、桌子里的钉子、地上的钢筋等。金属块越大则对磁力计读数影响越大。如果是把相同的一块MPU9250插在多个板子在同样的位置来测,差一些也正常吧。如果是多块MPU9250,那就更正常了,每块的读数都差一些的。
我不知道您是怎么测的。想要它准些的话,你就把板子拿到室外的空中,保证板子上所有器件和导线相对位置不变(有些小板插在母板上 或是 传感器用杜邦线和母板连接一直在乱晃,那磁力计读数肯定是乱的),拿下身上所有的金属,转动板子。用串口去读X轴最大值和最小值,当您感觉到差不多最大最小了,就在这个位置附近的各个姿态多晃一晃。Y轴和Z轴也是一样。测完这六个数据,可以换个位置再测一遍。您看看对于同一块MPU9250来说,多次测到的最大值最小值是不是很接近的。
然后再说校准方法。。。网上说的简单常用的就是平面校准法和八字校准法,这两种方法理论上一样,就是尽量取到X轴最大值最小值,再取平均,Y轴和Z轴也一样,这样就能取到这个磁力场组成的椭球的中心点,它就是校准值。您玩过大疆无人机没?它在起始时需要校准磁力计,正着拿转一圈,竖着拿再转一圈,这应该就是平面校准法,这样精度不高,但我测试过,感觉够用了。我认为无人机很大程度上依赖GPS信号,所以对MEMS的精度要求并不是特别特别高。八字校准法常用在手机上,那个手法很多人都不会,我用它来校准效果也不好。
再然后就是我帖子上说的,用拟合的方法进行校准,无意间发现可以用。同样是在室外空地上,每个地区的磁场是不一样的,我认为同一个操场上所有点的磁场强度矢量和是固定的,我这里大约0.522高斯,我就按[size=13.63636302947998px]sqrt((X-X0)^2+(Y-Y0)^2+(Z-Z0)^2)/1370=0.522来拟合(使用Matlab就行),这个1370是选磁力计精度时手册里给的,将每一个测到的值都带入这个公式,按照苹果手机的那种校准手法去转动,最后可以拟合出来一个比较稳定的X0、Y0、Z0.我经过了一些测试,感觉效果还可以。所以我认为苹果可能用的就是类似的拟合方法,当然不一定是我这么low的方法。
再再然后就是网上还有一些磁力计校准方法,涉及各种算法了,大概的思路多数还是拟合。其它的我也不会了。。
一周热门 更多>