分享一种校准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表示椭圆的半短轴 这是matlab程序 {:handshake:}楼主的方法很先进 很给力 收藏{:lol:}{:lol:} {:3_54:} 没用过Matlab啊 请问在哪输入XY啊?是在文件里写好么? 蓝海de梦 发表于 2012-8-16 15:44 static/image/common/back.gif
没用过Matlab啊 请问在哪输入XY啊?是在文件里写好么?
在命令行窗口输入 XY=回车
然后同样在命令行窗口输入hmc5883回车 就可以了 我去,还有这校准方法啊~
LZ忒强悍了 ilovepp 发表于 2012-8-16 16:30 static/image/common/back.gif
在命令行窗口输入 XY=回车
然后同样在命令行窗口输入hmc5883回车 就可以了 ...
非常感谢 Mtalab没用过 下了一看 全英文 顿时傻了 果断收藏了 mark 请问拟合完以后怎么用呢??怎么把数据变成圆?? 在程序中校准x,y:
x=x-xc
y=y-yc
y=y*(b/a)若椭圆是“竖着”的
y=y*(a/b) 若椭圆是“躺着”的
罗盘校正一般都是在应用现场校准,不可能带电脑跑吧,实际应用意义不大,楼主如果可以将Matlabr的矩阵运算转换成C语言,直接做到程序里面,才实用.. 学习了,,,, 太好用了~正在做磁阻仪的校准~ 先进啊~ 非常有帮助,谢谢{:lol:} 有那么复杂么?一句话:把椭圆修到正圆,一、修偏心,二、修半径。 谢谢,收下了 seanwood 发表于 2013-2-5 09:56 static/image/common/back.gif
有那么复杂么?一句话:把椭圆修到正圆,一、修偏心,二、修半径。
原理是不复杂 mark吧。。。。 好给力!感谢楼主收下了~~ 算出椭圆后怎么校准呀 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) 若椭圆是“躺着”的
这样 这个方法好,原理也不复杂。 ilovepp 发表于 2012-7-27 16:43 static/image/common/back.gif
这是matlab程序
楼主拟合的原理是什么呀?能不能拓展为三维的椭球拟合? xiaowenjian 发表于 2013-5-9 07:52 static/image/common/back.gif
楼主拟合的原理是什么呀?能不能拓展为三维的椭球拟合?
当然可以扩展了 ilovepp 发表于 2013-5-9 10:11 static/image/common/back.gif
当然可以扩展了
有没有类似数学公式或是文字描述的理论介绍,只看代码有点看不明白。还有能不能写个三维的椭球拟合? 收藏研究 MARK,好东东。 最终尝试了各种方法以后,还是这个最好,之前真心有一种要崩溃的感觉 好好,正需要 good job! 谢谢楼主,校正后好多了。 楼主太给力了,请问是不是将matlab中计算的程序x,y作为测量的x,y数据的offset呢??????????????????、 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表示椭圆的半短轴 ilovepp 发表于 2013-8-14 00:14 static/image/common/back.gif
程序会绘制出原始点以及拟合后的椭圆,并输出:result = xc yc a b
其中(xc,yc)表示椭圆中心的坐标,a ...
你好,你说的这个xc,yc,a,b我知道意思,我想了解它所代表的的意义,以后每次测量的数据该怎么处理得到接近真实的值呢?感谢楼主回复! 程序运行的过程中会提示以下错误,想问问楼主是怎么回事?
??? 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) 很赞同!精辟。但我又个疑问,这样水平校准XY没问题。水平旋转就可以校准XY。但如果倾斜使用是否还需要校准Z轴,把椭球形校准成正球形。如果需要,如何测量得到空间的XYZ值呢?请各位大侠指教。 mark一下下。。。 好,赞一个 正需要,good a和b怎么确定呢? 哦哦。知道了,刚才没注意看 椭球校准成正球怎么办呢? shuizhb 发表于 2013-10-4 13:53 static/image/common/back.gif
椭球校准成正球怎么办呢?
准备等闲下来时写个三维椭球拟合 ilovepp 发表于 2013-10-5 13:37 static/image/common/back.gif
准备等闲下来时写个三维椭球拟合
我输入XY回车没法用啊
ilovepp 发表于 2013-10-5 13:37 static/image/common/back.gif
准备等闲下来时写个三维椭球拟合
XY =
有数量限制吗 有帮助,谢谢 mark~~~,思考很细致很独特。 rantingting 发表于 2013-10-11 11:37 static/image/common/back.gif
XY =
第三个数据有问题 rantingting 发表于 2013-10-11 11:37 static/image/common/back.gif
XY =
没有数据限制 ilovepp 发表于 2013-10-13 23:37 static/image/common/back.gif
没有数据限制
你好,我最后成功了,但是数据改了,每组XY之间不是空格,要是逗号隔开才行…… 十分感谢楼主,用了您的方法之后误差不超过2°。
{:smile:}{:smile:}{:smile:}好的 还是没看懂 收藏 了 必须的顶起 正好在做这个,刚好学习一下 l楼主强大啊,看了很多论坛,就这方法完美!!!膜拜! 赞一个,收藏一下 mark分享一种校准HMC5883的方法,此法也可以校验其他双轴 收藏一下。
谢谢分享。 收藏学习,多谢楼主 收藏一下。 留意一下 谢谢楼主分享哦,很给力。 楼主的方法很给力 挺有心意的啊 本帖最后由 silence2455 于 2014-4-4 14:55 编辑
楼主大哥,我用你的方法校准我的AK8975三轴磁力计,用matlab得到的椭圆是这样的,按你的公式代入测试了一下结果不好,请问是什么原因?
而且x*x+y*y+z*z不是定值,这是不是不正常??求教!!! 很给力,顶一个! mark。。。。。。。 kmani 发表于 2013-10-24 17:10
十分感谢楼主,用了您的方法之后误差不超过2°。
能贴出你的校正程序吗?谢啦 silence2455 发表于 2014-4-3 22:05
楼主大哥,我用你的方法校准我的AK8975三轴磁力计,用matlab得到的椭圆是这样的,按你的公式代入测试了一下 ...
现在可校正好了?? luojihao217 发表于 2013-8-8 15:49
谢谢楼主,校正后好多了。
好多少? omegasystem 发表于 2014-3-2 18:53
l楼主强大啊,看了很多论坛,就这方法完美!!!膜拜!
怎么完美了?yaw精确到多少度?? kmani 发表于 2013-10-24 17:10
十分感谢楼主,用了您的方法之后误差不超过2°。
是航向角吗?你的航向角是通过磁力计直接计算的吗??航向角能精确到2°以内吗?? hfjydq 发表于 2014-4-15 10:38
现在可校正好了??
现在平面的校准好了,就是空间里动的话偏差还有点大 rantingting 发表于 2013-10-11 11:35
我输入XY回车没法用啊
请问一下你椭球拟合的写好没有啊?求借鉴啊 高级货啊 {:lol:} silence2455 发表于 2014-4-15 12:19
现在平面的校准好了,就是空间里动的话偏差还有点大
平面?好奇怪,yaw不是空间的呀 抱着满心的期待,使用楼主的方法校正yaw,请问是不是我定义了磁力计的X轴指向北方,那么在我复位的时候,模块(GMC5883L)的X轴也要指向北方保持静止一段时间呀?? silence2455 发表于 2014-4-15 12:20
请问一下你椭球拟合的写好没有啊?求借鉴啊
这是我把模块(HMC5883L和MPU6050模块)的X轴都指向北方,然后我复位程序后静止5s左右得到的数据,并且保持不变了,然后我把模块动起来,也能完全跟随了,不知道是不是就这样理解的,模块在校正的时候X轴的指向必须和定义的指向一致(X指向北) hfjydq 发表于 2014-4-15 13:37
平面?好奇怪,yaw不是空间的呀
我的意思是当Pitch和Roll都为0时转动Yaw比较正常,当Pitch和Roll也变化的时候Yaw就有几度的漂 silence2455 发表于 2014-4-15 17:17
我的意思是当Pitch和Roll都为0时转动Yaw比较正常,当Pitch和Roll也变化的时候Yaw就有几度的漂 ...
还好,动起来几度还算可以了 silence2455 发表于 2014-4-15 17:17
我的意思是当Pitch和Roll都为0时转动Yaw比较正常,当Pitch和Roll也变化的时候Yaw就有几度的漂 ...
我估计是不是要做拟合椭球才能消除这种运动中的误差,椭圆拟合只能做到这水准 ilovepp 发表于 2013-10-5 13:37
准备等闲下来时写个三维椭球拟合
过去了半年了,楼主有空闲的时候吗?椭球拟合写出来了吗?分享一下呀,椭圆拟合在平放的时候还行,但动起来yaw就飘了很大呀 silence2455 发表于 2014-4-15 12:19
现在平面的校准好了,就是空间里动的话偏差还有点大
我也发现这个问题了,平放静止的时候还行,但动起来确实yaw飘了很多,最多的时候飘了30°左右 silence2455 发表于 2014-4-15 17:17
我的意思是当Pitch和Roll都为0时转动Yaw比较正常,当Pitch和Roll也变化的时候Yaw就有几度的漂 ...
试了下,用的AHRS算法,roll和pitch动起来的时候,yaw最大飘了30° hfjydq 发表于 2014-4-16 11:18
试了下,用的AHRS算法,roll和pitch动起来的时候,yaw最大飘了30°
你对其他两个平面也用相同的方法校准一下,会好很多的。 silence2455 发表于 2014-4-17 13:41
你对其他两个平面也用相同的方法校准一下,会好很多的。
能说的详细些吗??最近搞死了,你的问题解决了吗 silence2455 发表于 2014-4-17 13:41
你对其他两个平面也用相同的方法校准一下,会好很多的。
能详细说下你怎么校正磁力计的吗?还有你转动的时候,用这种方法校正后怎么样了??? hfjydq 发表于 2014-4-17 16:43
能详细说下你怎么校正磁力计的吗?还有你转动的时候,用这种方法校正后怎么样了??? ...
用楼主的方法对XY平面,YZ平面,XZ平面都做一次校准,你会发现偏心都差不多,然后选取一个合适的偏心,再以某一个轴(例如X轴)为基准对另外两个轴进行伸缩把它变为圆。我这样校准之后,Pitch(或Roll)往一个方向动的话,Yaw最多大概有两三度的漂移,但是Pitch(或Roll)往另外一个方向动的话,Yaw最大会有10度的漂移。还有一个问题是Yaw往一个方向转响应很及时,但是往另外一个方向转时,如果转得太快的话,在上位机上会发现它会慢慢的滑过去,响应不够及时,不知道什么原因。 1.你的意思是不是XY平面,YZ平面,XZ平面都旋转一次,然后找到这三个偏心其中最合适的那一个?
2.再以某一个轴(例如X轴)为基准对另外两个轴进行伸缩把它变为圆? 公式是多少?
x=x-xc
y=y-yc
y=y*(b/a)若椭圆是“竖着”的
y=y*(a/b) 若椭圆是“躺着”的
z呢? silence2455 发表于 2014-4-18 10:07
用楼主的方法对XY平面,YZ平面,XZ平面都做一次校准,你会发现偏心都差不多,然后选取一个合适的偏心,再 ...
还有,你知道根据陀螺仪的加速度如何能够得到稳定的x,y,z相对坐标吗???就是那个空中鼠标的相对位移呀 好东西,收藏了 mark,谢谢楼主 实用需要好好学习 silence2455 发表于 2014-4-15 12:19
现在平面的校准好了,就是空间里动的话偏差还有点大
请教你onev2012@163.com 学习了,楼主辛苦了! 谢谢分享,准备试用
页:
[1]
2