关于苹果手机和小米手机中指南针的校准方法!做过磁力计校准的朋友请看一下呗

2019-07-25 11:42发布

我之前想过怎么校准HMC5883磁力计。在网上搜就是平面校准法和八字校准法。但是我实际试的时候感觉这两种方法校准并不好用,要求精度不高还可以,但我之前做的项目要求很高的精度。一直没成功。
之前也发贴问过。我校准100次,就会得到100种校准结果,尤其是八字校准法,真是手法不对就全完了。

前几天在试用加速度计的模值等于1,再用Matlab来拟合出零偏,感觉效果还可以,突然想到,是不是磁力计也可以这么弄??
而且我之前一直感觉手机中的指南针所使用的八字校准法 和 苹果手机里那个转一圈的奇葩校准法 根本就不可能得到磁力计的准确值。如果它也用模值进行拟合就说的通了。

我试了一下苹果手机的那种手法(现在小米更新系统后也用了那种手法,以前小米是八字校准),然后拿我自己的磁力计转,再查了一下世界地磁模型,我这里地磁的模值今年应该是5.2左右,然后把所有数据用Matlab拟合了一下。。。果然发现我试的几次都能得到几乎相同的初始校准值!也就是说只要我取了足够多的测试数据,都用Matlab来拟合,那不管是什么八字校准,还是平面校准,还是苹果那种校准。我都可以得到比较准确的校准值了,不是么?
大家也有做飞行器之类的吧?用过磁力计校准的朋友,说一下想法呗?或者还有其它什么样准方法,都和我说一下呗。我未来好一阵子都会做类似的东西,啥时回复我都行。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
24条回答
yuzeyuan1
1楼-- · 2019-07-25 12:40
哦,写错了,我这里查的世界地磁模型,应该是0.52高斯左右。我就按 sqrt((X-X0)^2+(Y-Y0)^2+(Z-Z0)^2)/1370=0.522 来拟合的。X0,Y0,Z0就是我想要的初始校准值。
正点原子
2楼-- · 2019-07-25 17:17
楼主,我最近在用MPU9250内部的磁力计,那叫一个乱啊....多个板子,同样的位置,MPU9250磁力计读数相差太远.  把人给折腾死了.....现在想搞下校准,不知道如何下手啊.
yuzeyuan1
3楼-- · 2019-07-25 19:00
正点原子 发表于 2016-3-7 20:23
楼主,我最近在用MPU9250内部的磁力计,那叫一个乱啊....多个板子,同样的位置,MPU9250磁力计读数相差太远.   ...

额,吓我一跳,以为出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的方法。
再再然后就是网上还有一些磁力计校准方法,涉及各种算法了,大概的思路多数还是拟合。其它的我也不会了。。
yuzeyuan1
4楼-- · 2019-07-25 20:12
 精彩回答 2  元偷偷看……
1nvoker
5楼-- · 2019-07-25 20:37
楼主好,我也被磁力计校准困扰了很久。
之前,搞过加速度计校准,用的球面拟合法,效果还行,毕竟重力场无比稳定(其实随着时间推移,加速度计测得加速度值与重力加速度的误差会越来越大,一直搞不懂原因)

加速度计校准

加速度计校准

然后想用同样的方法来校准磁力计,遇到了不少问题。
1.水平面旋转一周校准是可行的,只是使用过程中载体也必须保持水平,这样就有限制了 匿名飞控磁力计圆形拟合.png
2.球面拟合,磁力计绕三个轴旋转得到的好像是椭球,表现出来就是磁场向量的模一直在变动(同一地点,不同姿态),直接套用球面公式可能会有误差吧 mag3d.png
3.球面拟合搞定后,找出球心,把地磁向量减去球心,再进行姿态角补偿,推导机体系到地磁系的转换关系时,旋转次序不同(比如先x后y,或先y后x),得到的公式也不同,我还没去验证那种公式才是正确的 倾角补偿1.PNG 倾角补偿2.PNG
4.能告诉我“地磁模型”在哪得到的吗,找不到能用的。还有,“sqrt((X-X0)^2+(Y-Y0)^2+(Z-Z0)^2)/1370=0.522” 为啥除以1370?
yuzeyuan1
6楼-- · 2019-07-25 22:14
1nvoker 发表于 2016-3-8 11:03
楼主好,我也被磁力计校准困扰了很久。
之前,搞过加速度计校准,用的球面拟合法,效果还行,毕竟重力场无 ...

你好。好久了,回答时可能有笔误。。“随着时间推移,加速度计测得加速度值与重力加速度的误差会越来越大。”这个是啥意思?加速度的值取模 sqrt(X^2+Y^2+Z^2),应该啥时候都是一定的吧?大小就应该等于重力g。您是怎么算的呢?

然后我有个问题,加速度用球面拟合法,首先这个我没听过哦,我拟合加速度都是让加速度计静止不动两分钟,再换位置再静止,再换位置再静止。一共几十次,各种位置都取一些,然后拟合出一个对几十组数据都能通用的偏移量,作为我的加速度计校准值,我是乱试的,不知道这么用行不行,不过从结果上看感觉可以。如果您用球面拟合,那设备就一定是个连续运动的,这时不仅有重力,还有你手的推力,还是个不断变化的推力,自己给自己加障碍么?所以我感觉您这么拟合没用诶。
磁力计倒是可以这么用。但是我没弄过球面拟合,不知道它是干啥的,只能说说我的想法。
1、水平面转一周+垂直面转一周=平面校准法,如果真能保持水平和垂直,那校准未参数一定是对的。但对于大众用户来讲,他们不可能弄到水平面,哪怕是看着很平也没用。所以就是大疆无人机一样,手拿着飞机转,虽然也有误差,但对于飞机还说还不太在乎这个误差。大不了就往一边偏着飞呗。
2、是椭球。。。我前面也提到过是椭球,当时按球来拟合发现是不行的。我忘了我帖子第一次发时是按球还是椭球拟合的了,但最后用的确实是椭球,如果我的公式不对的话,您就按椭球的公式来拟合。我看你第二个问题下面的图上是三个圆,每个圆转了两圈,其实你转的这些圆很难帮你取到最大最小值的。我经常到处乱晃取几分钟才能取到真正的最大最小值,
3、我现在遇到时就搜集一下新方法,以后还会再尝试这个校准,但目前一直都在做其它任务。所以公式这里真帮不上忙。而且我本身也是个菜比,都是抄网上的公式,改一改正方向就拿来用了,倒也没怎么用错过。。。当然有些书和网上的东西本身就是错的,秦永元的惯性导航那本书,虽然有助于理解,但里面的公式一堆错的,害的我们花了好多时间去改,都不想吐槽了。
4、世界地磁模型,我之前用的是一个网站,换了电脑所以网址没了。。。不用注册,输入经纬度就可以查当地的标准地磁是多少。你搜个关键词 wmm2015 自己搜搜吧。。我这里的网实在是上不去网页。你打开HMC5883手册,里面搜1370,就一个地方有。它是个增益,在配置寄存器时选择的增益。意思应该是将信号放大了多少多少倍。

一周热门 更多>