HMC5883L的校准(新人验证)
绫波丽2014/10/03仪器仪表 IP:江苏
最近做四轴,用到HMC5883l,发现严重不准,主要是零偏和三轴比例相差较大。
由于没有精密磁场线圈来进行自动校准,琢磨了个校准的方法,供大家参考。
地磁场强度基本是恒定不变的,而我们的HMC5883l磁场计可以在空间任意旋转。
因此,磁场计上的真实磁强度矢量,其模应该是相等的,方向是任意的,会形成一个球。
我们知道,零偏和三轴比例误差可以看做是一次函数。由于误差的存在,测得的磁强度矢量会畸变成一个椭球。
椭球可以用方程AX^2+BY^2+CZ^2+DX+EY+FZ=1表示,对于确定的椭球和点,AX^2+BY^2+CZ^2+DX+EY+FZ可以描述点到椭球的距离。我们想要所有测量点到椭球都尽可能近,有:
设F(A,B,C,D,E,F)=AX^2+BY^2+CZ^2+DX+EY+FZ-1,有∑(F^2)最小。
求∑(F^2)梯度,有:▽(∑(F^2))=∑(2F▽F)=∑(2F(X^2,Y^2,Z^2,X,Y,Z));
令其等于零向量,有:
∑FX^2=0;
∑FY^2=0;
∑FZ^2=0;
∑FX=0;
∑FY=0;
∑FZ=0;
解方程,得到ABCDEF。将其化为椭球的标准形式,就可以得到修正函数了。
用matlab表示:
%先导入校准用磁场计测量值mag
%测量值尽可能均匀,可以拿着磁场计随机晃动
%如果测量值不均匀,可能产生的图形不是椭圆而是双曲线抛物线等
f=[mag.^2 mag ones(size(mag,1),1)];
mat=[
sum(f.*(f(:,1)*ones(1,7)),1);
sum(f.*(f(:,2)*ones(1,7)),1);
sum(f.*(f(:,3)*ones(1,7)),1);
sum(f.*(f(:,4)*ones(1,7)),1);
sum(f.*(f(:,5)*ones(1,7)),1);
sum(f.*(f(:,6)*ones(1,7)),1);
];
answ=rref(mat);
answ=answ(:,7);
jl=[d/(2*a) e/(2*b) f/(2*c) 1/a 1/b 1/c 1-(d/(2*a))^2-(e/(2*b))^2-(f/(2*c))^2];
jl(4:7)=jl(4:7)/jl(7);
a=jl(1);b=jl(1);c=jl(1);d=jl(1);e=jl(1);f=jl(1);
%测量值:x y z 修正得到实际值:X Y Z
% X=(x+a)/d
% Y=(y+b)/e
% Z=(z+c)/f
%得到的是方向向量,如果要得到具体值请查当地地磁场准确值并乘以所得向量
%对于加速度计也可以采用相同的方式进行校准
来自:仪器与装备 / 仪器仪表
2
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
zhangjun62
9年4个月前 IP:湖北
791007
6666
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}