ilovepp 发表于 2012-7-27 15:36:03

分享一种校准HMC5883的方法,此法也可以校验其他双轴...

最近需要使用HMC5883,刚开始使用是觉得其读出来的数据很不靠谱,于是怀疑是芯片的问题,后来听说需要校准,于是我使用(xmax+xmin)/2 (ymax+ymin)/2这种简单的方法进行了校验,结果测出的结果基本正常了,但是误差有10度左右,仍不能满足我的需求。于是我想出一个更加精确的校验方法,使用该方法校准后精度达到了5 度以内,在坛里分享一下:
校准步骤:
1.将芯片水平放置,不断旋转芯片得到一组xy轴数据
2.使用matlab拟合椭圆,得到中心坐标(xc,yc) 半长轴a 半短轴b
3.在程序中校准x,y:
x=x-xc
   y=y-yc
   y=y*(b/a)若椭圆是“竖着”的
   y=y*(a/b) 若椭圆是“躺着”的

附件里有完整的用来拟合椭圆matlab程序,写一个说明帮助不熟悉matlb的朋友使用:

1.打开matlab,设置Current Folder为HMC5883校准文件夹
2.输入XY=其中xi,yi为将芯片水平旋转到各个角度后所得的测量值
3.在主窗口输入hmc5883然后回车即可

此时将绘制出原始点以及拟合后的椭圆,并输出:result = xc yc a b
其中(xc,yc)表示椭圆中心的坐标,a表示椭圆的半长轴,b表示椭圆的半短轴

ilovepp 发表于 2012-7-27 16:43:05

这是matlab程序

yirenonege 发表于 2012-7-27 19:48:25

{:handshake:}楼主的方法很先进 很给力

esdart 发表于 2012-7-27 20:11:59

收藏{:lol:}{:lol:}

蓝海de梦 发表于 2012-8-16 15:44:43

{:3_54:} 没用过Matlab啊   请问在哪输入XY啊?是在文件里写好么?

ilovepp 发表于 2012-8-16 16:30:33

蓝海de梦 发表于 2012-8-16 15:44 static/image/common/back.gif
没用过Matlab啊   请问在哪输入XY啊?是在文件里写好么?

在命令行窗口输入 XY=回车
然后同样在命令行窗口输入hmc5883回车 就可以了

boostchopper 发表于 2012-8-16 16:36:30

我去,还有这校准方法啊~
LZ忒强悍了

蓝海de梦 发表于 2012-8-16 17:06:18

ilovepp 发表于 2012-8-16 16:30 static/image/common/back.gif
在命令行窗口输入 XY=回车
然后同样在命令行窗口输入hmc5883回车 就可以了 ...

非常感谢   Mtalab没用过   下了一看   全英文   顿时傻了

东方云滨 发表于 2012-8-19 11:22:06

果断收藏了

dxf5200 发表于 2012-9-25 17:13:37

mark                  

HiWorld 发表于 2012-10-17 13:13:50

请问拟合完以后怎么用呢??怎么把数据变成圆??

ilovepp 发表于 2012-10-17 13:41:23

在程序中校准x,y:
x=x-xc
   y=y-yc
   y=y*(b/a)若椭圆是“竖着”的
   y=y*(a/b) 若椭圆是“躺着”的

dadatou 发表于 2012-10-17 14:16:43

罗盘校正一般都是在应用现场校准,不可能带电脑跑吧,实际应用意义不大,楼主如果可以将Matlabr的矩阵运算转换成C语言,直接做到程序里面,才实用..

zhaoxin5002 发表于 2013-1-27 19:48:59

学习了,,,,

zywei_09 发表于 2013-2-3 19:04:24

太好用了~正在做磁阻仪的校准~

NO_龙 发表于 2013-2-4 01:06:03

先进啊~

esdart 发表于 2013-2-4 01:15:29

非常有帮助,谢谢{:lol:}

seanwood 发表于 2013-2-5 09:56:19

有那么复杂么?一句话:把椭圆修到正圆,一、修偏心,二、修半径。

seewolf 发表于 2013-2-5 09:58:35

谢谢,收下了

ilovepp 发表于 2013-2-5 22:29:41

seanwood 发表于 2013-2-5 09:56 static/image/common/back.gif
有那么复杂么?一句话:把椭圆修到正圆,一、修偏心,二、修半径。

原理是不复杂

yzaka 发表于 2013-3-4 13:23:27

mark吧。。。。

affectionflameT 发表于 2013-4-10 16:33:45

好给力!感谢楼主收下了~~

xiaowenjian 发表于 2013-5-8 11:37:43

算出椭圆后怎么校准呀

ilovepp 发表于 2013-5-8 16:27:11

xiaowenjian 发表于 2013-5-8 11:37 static/image/common/back.gif
算出椭圆后怎么校准呀

   x=x-xc
   y=y-yc
   y=y*(b/a)若椭圆是“竖着”的
   y=y*(a/b) 若椭圆是“躺着”的
这样

baijun 发表于 2013-5-8 17:15:06

这个方法好,原理也不复杂。

xiaowenjian 发表于 2013-5-9 07:52:07

ilovepp 发表于 2012-7-27 16:43 static/image/common/back.gif
这是matlab程序

楼主拟合的原理是什么呀?能不能拓展为三维的椭球拟合?

ilovepp 发表于 2013-5-9 10:11:27

xiaowenjian 发表于 2013-5-9 07:52 static/image/common/back.gif
楼主拟合的原理是什么呀?能不能拓展为三维的椭球拟合?

当然可以扩展了

xiaowenjian 发表于 2013-5-9 10:38:29

ilovepp 发表于 2013-5-9 10:11 static/image/common/back.gif
当然可以扩展了

有没有类似数学公式或是文字描述的理论介绍,只看代码有点看不明白。还有能不能写个三维的椭球拟合?

rantingting 发表于 2013-5-22 10:31:32

收藏研究

lucky_jeck 发表于 2013-5-27 11:17:45

MARK,好东东。

gufeiyunshi 发表于 2013-6-8 16:28:53

最终尝试了各种方法以后,还是这个最好,之前真心有一种要崩溃的感觉

stc12c5608ad 发表于 2013-7-11 02:39:46

好好,正需要

可与愉快谔谔 发表于 2013-7-26 17:21:08

good job!

luojihao217 发表于 2013-8-8 15:49:54

谢谢楼主,校正后好多了。

guoyinwhu 发表于 2013-8-13 11:28:34

楼主太给力了,请问是不是将matlab中计算的程序x,y作为测量的x,y数据的offset呢??????????????????、

ilovepp 发表于 2013-8-14 00:14:06

guoyinwhu 发表于 2013-8-13 11:28 static/image/common/back.gif
楼主太给力了,请问是不是将matlab中计算的程序x,y作为测量的x,y数据的offset呢????????????? ...

程序会绘制出原始点以及拟合后的椭圆,并输出:result = xc yc a b
其中(xc,yc)表示椭圆中心的坐标,a表示椭圆的半长轴,b表示椭圆的半短轴

guoyinwhu 发表于 2013-8-14 09:51:12

ilovepp 发表于 2013-8-14 00:14 static/image/common/back.gif
程序会绘制出原始点以及拟合后的椭圆,并输出:result = xc yc a b
其中(xc,yc)表示椭圆中心的坐标,a ...

你好,你说的这个xc,yc,a,b我知道意思,我想了解它所代表的的意义,以后每次测量的数据该怎么处理得到接近真实的值呢?感谢楼主回复!

lyxooo1 发表于 2013-8-14 11:32:39

程序运行的过程中会提示以下错误,想问问楼主是怎么回事?
??? Error using ==> eig
Input to EIG must not contain NaN or Inf.

Error in ==> fitellipse at 57
= eig(S,C);

Error in ==> hmc5883 at 3
result=fitellipse(XY)

dengzi1358 发表于 2013-8-14 11:47:42

很赞同!精辟。但我又个疑问,这样水平校准XY没问题。水平旋转就可以校准XY。但如果倾斜使用是否还需要校准Z轴,把椭球形校准成正球形。如果需要,如何测量得到空间的XYZ值呢?请各位大侠指教。

clm525450 发表于 2013-8-15 11:04:05

mark一下下。。。

zjb879653946 发表于 2013-8-31 10:49:53

好,赞一个

7inspire 发表于 2013-9-2 21:08:44

正需要,good

zqdhls 发表于 2013-9-3 09:57:31

a和b怎么确定呢?

zqdhls 发表于 2013-9-3 09:59:13

哦哦。知道了,刚才没注意看

shuizhb 发表于 2013-10-4 13:53:17

椭球校准成正球怎么办呢?

ilovepp 发表于 2013-10-5 13:37:27

shuizhb 发表于 2013-10-4 13:53 static/image/common/back.gif
椭球校准成正球怎么办呢?

准备等闲下来时写个三维椭球拟合

rantingting 发表于 2013-10-11 11:35:58

ilovepp 发表于 2013-10-5 13:37 static/image/common/back.gif
准备等闲下来时写个三维椭球拟合

我输入XY回车没法用啊

rantingting 发表于 2013-10-11 11:37:53

ilovepp 发表于 2013-10-5 13:37 static/image/common/back.gif
准备等闲下来时写个三维椭球拟合

XY =


有数量限制吗

JESTER9 发表于 2013-10-11 12:57:00

有帮助,谢谢

lidongxin 发表于 2013-10-11 14:01:27

mark~~~,思考很细致很独特。

ilovepp 发表于 2013-10-13 23:37:33

rantingting 发表于 2013-10-11 11:37 static/image/common/back.gif
XY =

第三个数据有问题

ilovepp 发表于 2013-10-13 23:37:56

rantingting 发表于 2013-10-11 11:37 static/image/common/back.gif
XY =

没有数据限制

rantingting 发表于 2013-10-14 09:06:06

ilovepp 发表于 2013-10-13 23:37 static/image/common/back.gif
没有数据限制

你好,我最后成功了,但是数据改了,每组XY之间不是空格,要是逗号隔开才行……

kmani 发表于 2013-10-24 17:10:51

十分感谢楼主,用了您的方法之后误差不超过2°。

zsjalive@126 发表于 2013-12-5 12:10:52

{:smile:}{:smile:}{:smile:}好的

563872381hai 发表于 2013-12-5 12:33:39

还是没看懂

zsjalive@126 发表于 2013-12-5 13:24:23

收藏 了 必须的顶起

poulo 发表于 2014-2-14 17:27:34

正好在做这个,刚好学习一下

omegasystem 发表于 2014-3-2 18:53:10

l楼主强大啊,看了很多论坛,就这方法完美!!!膜拜!

机器人天空 发表于 2014-3-2 19:37:43

赞一个,收藏一下

yat 发表于 2014-3-2 20:40:39

mark分享一种校准HMC5883的方法,此法也可以校验其他双轴

stewen 发表于 2014-3-11 10:36:37

收藏一下。
谢谢分享。

六月峰 发表于 2014-3-11 20:05:58

收藏学习,多谢楼主

cld795 发表于 2014-3-11 20:14:09

收藏一下。

zlpvch 发表于 2014-3-15 19:06:44

留意一下            

linbaoluo3 发表于 2014-3-27 16:20:32

谢谢楼主分享哦,很给力。

jiwx2011 发表于 2014-3-27 17:33:04

楼主的方法很给力

陶新成 发表于 2014-3-27 22:43:52

挺有心意的啊

silence2455 发表于 2014-4-3 22:05:56

本帖最后由 silence2455 于 2014-4-4 14:55 编辑

楼主大哥,我用你的方法校准我的AK8975三轴磁力计,用matlab得到的椭圆是这样的,按你的公式代入测试了一下结果不好,请问是什么原因?
而且x*x+y*y+z*z不是定值,这是不是不正常??求教!!!

闲鱼翻身 发表于 2014-4-13 21:28:37

很给力,顶一个!

机器人天空 发表于 2014-4-13 22:29:55

mark。。。。。。。

hfjydq 发表于 2014-4-14 10:27:25

kmani 发表于 2013-10-24 17:10
十分感谢楼主,用了您的方法之后误差不超过2°。

能贴出你的校正程序吗?谢啦

hfjydq 发表于 2014-4-15 10:38:58

silence2455 发表于 2014-4-3 22:05
楼主大哥,我用你的方法校准我的AK8975三轴磁力计,用matlab得到的椭圆是这样的,按你的公式代入测试了一下 ...

现在可校正好了??

hfjydq 发表于 2014-4-15 11:59:04

luojihao217 发表于 2013-8-8 15:49
谢谢楼主,校正后好多了。

好多少?

hfjydq 发表于 2014-4-15 11:59:52

omegasystem 发表于 2014-3-2 18:53
l楼主强大啊,看了很多论坛,就这方法完美!!!膜拜!

怎么完美了?yaw精确到多少度??

hfjydq 发表于 2014-4-15 12:01:06

kmani 发表于 2013-10-24 17:10
十分感谢楼主,用了您的方法之后误差不超过2°。

是航向角吗?你的航向角是通过磁力计直接计算的吗??航向角能精确到2°以内吗??

silence2455 发表于 2014-4-15 12:19:03

hfjydq 发表于 2014-4-15 10:38
现在可校正好了??

现在平面的校准好了,就是空间里动的话偏差还有点大

silence2455 发表于 2014-4-15 12:20:57

rantingting 发表于 2013-10-11 11:35
我输入XY回车没法用啊

请问一下你椭球拟合的写好没有啊?求借鉴啊

swustlx 发表于 2014-4-15 12:50:03

高级货啊                        {:lol:}

hfjydq 发表于 2014-4-15 13:37:39

silence2455 发表于 2014-4-15 12:19
现在平面的校准好了,就是空间里动的话偏差还有点大

平面?好奇怪,yaw不是空间的呀

hfjydq 发表于 2014-4-15 14:06:54

抱着满心的期待,使用楼主的方法校正yaw,请问是不是我定义了磁力计的X轴指向北方,那么在我复位的时候,模块(GMC5883L)的X轴也要指向北方保持静止一段时间呀??

hfjydq 发表于 2014-4-15 14:15:44

silence2455 发表于 2014-4-15 12:20
请问一下你椭球拟合的写好没有啊?求借鉴啊

这是我把模块(HMC5883L和MPU6050模块)的X轴都指向北方,然后我复位程序后静止5s左右得到的数据,并且保持不变了,然后我把模块动起来,也能完全跟随了,不知道是不是就这样理解的,模块在校正的时候X轴的指向必须和定义的指向一致(X指向北)

silence2455 发表于 2014-4-15 17:17:58

hfjydq 发表于 2014-4-15 13:37
平面?好奇怪,yaw不是空间的呀

我的意思是当Pitch和Roll都为0时转动Yaw比较正常,当Pitch和Roll也变化的时候Yaw就有几度的漂

hfjydq 发表于 2014-4-15 17:39:25

silence2455 发表于 2014-4-15 17:17
我的意思是当Pitch和Roll都为0时转动Yaw比较正常,当Pitch和Roll也变化的时候Yaw就有几度的漂 ...

还好,动起来几度还算可以了

hfjydq 发表于 2014-4-15 17:43:00

silence2455 发表于 2014-4-15 17:17
我的意思是当Pitch和Roll都为0时转动Yaw比较正常,当Pitch和Roll也变化的时候Yaw就有几度的漂 ...

我估计是不是要做拟合椭球才能消除这种运动中的误差,椭圆拟合只能做到这水准

hfjydq 发表于 2014-4-16 10:13:05

ilovepp 发表于 2013-10-5 13:37
准备等闲下来时写个三维椭球拟合

过去了半年了,楼主有空闲的时候吗?椭球拟合写出来了吗?分享一下呀,椭圆拟合在平放的时候还行,但动起来yaw就飘了很大呀

hfjydq 发表于 2014-4-16 10:14:22

silence2455 发表于 2014-4-15 12:19
现在平面的校准好了,就是空间里动的话偏差还有点大

我也发现这个问题了,平放静止的时候还行,但动起来确实yaw飘了很多,最多的时候飘了30°左右

hfjydq 发表于 2014-4-16 11:18:49

silence2455 发表于 2014-4-15 17:17
我的意思是当Pitch和Roll都为0时转动Yaw比较正常,当Pitch和Roll也变化的时候Yaw就有几度的漂 ...

试了下,用的AHRS算法,roll和pitch动起来的时候,yaw最大飘了30°

silence2455 发表于 2014-4-17 13:41:04

hfjydq 发表于 2014-4-16 11:18
试了下,用的AHRS算法,roll和pitch动起来的时候,yaw最大飘了30°

你对其他两个平面也用相同的方法校准一下,会好很多的。

hfjydq 发表于 2014-4-17 16:40:01

silence2455 发表于 2014-4-17 13:41
你对其他两个平面也用相同的方法校准一下,会好很多的。

能说的详细些吗??最近搞死了,你的问题解决了吗

hfjydq 发表于 2014-4-17 16:43:25

silence2455 发表于 2014-4-17 13:41
你对其他两个平面也用相同的方法校准一下,会好很多的。

能详细说下你怎么校正磁力计的吗?还有你转动的时候,用这种方法校正后怎么样了???

silence2455 发表于 2014-4-18 10:07:47

hfjydq 发表于 2014-4-17 16:43
能详细说下你怎么校正磁力计的吗?还有你转动的时候,用这种方法校正后怎么样了??? ...

用楼主的方法对XY平面,YZ平面,XZ平面都做一次校准,你会发现偏心都差不多,然后选取一个合适的偏心,再以某一个轴(例如X轴)为基准对另外两个轴进行伸缩把它变为圆。我这样校准之后,Pitch(或Roll)往一个方向动的话,Yaw最多大概有两三度的漂移,但是Pitch(或Roll)往另外一个方向动的话,Yaw最大会有10度的漂移。还有一个问题是Yaw往一个方向转响应很及时,但是往另外一个方向转时,如果转得太快的话,在上位机上会发现它会慢慢的滑过去,响应不够及时,不知道什么原因。

hfjydq 发表于 2014-4-18 10:15:13

1.你的意思是不是XY平面,YZ平面,XZ平面都旋转一次,然后找到这三个偏心其中最合适的那一个?
2.再以某一个轴(例如X轴)为基准对另外两个轴进行伸缩把它变为圆?      公式是多少?
x=x-xc
y=y-yc
y=y*(b/a)若椭圆是“竖着”的
y=y*(a/b) 若椭圆是“躺着”的

z呢?

hfjydq 发表于 2014-4-18 10:17:32

silence2455 发表于 2014-4-18 10:07
用楼主的方法对XY平面,YZ平面,XZ平面都做一次校准,你会发现偏心都差不多,然后选取一个合适的偏心,再 ...

还有,你知道根据陀螺仪的加速度如何能够得到稳定的x,y,z相对坐标吗???就是那个空中鼠标的相对位移呀

feikong 发表于 2014-4-21 11:18:18

好东西,收藏了

bxcfc 发表于 2014-4-25 09:58:09

mark,谢谢楼主

zc869 发表于 2014-4-25 11:08:34

实用需要好好学习

onev 发表于 2014-4-27 18:59:42

silence2455 发表于 2014-4-15 12:19
现在平面的校准好了,就是空间里动的话偏差还有点大

请教你onev2012@163.com

也无风雨赵 发表于 2014-6-5 11:29:23

学习了,楼主辛苦了!

棋间卒 发表于 2014-6-5 17:10:36

谢谢分享,准备试用
页: [1] 2
查看完整版本: 分享一种校准HMC5883的方法,此法也可以校验其他双轴...