倾斜补偿的电子罗盘(2):磁传感器的误差来源、硬磁干扰的校准(3个参数)、实验验证

2023-11-08

电子罗盘(2):磁传感器的误差来源、硬磁干扰的校准(3个参数)、实验验证

理想情况

理想情况下,磁传感器的测量结果是完全准确的,随着磁传感器的不同位置,三轴的读数为地磁场强度在三轴的投影:
h = [ h x h y h z ] h x 2 + h y 2 + h z 2 = B 2 \textbf{h}=\left[ \begin{matrix} h_x\\ h_y \\ h_z \end{matrix} \right] \\ h_x^2 + h_y^2 + h_z^2 = B^2 h=hxhyhzhx2+hy2+hz2=B2
因此,磁传感器在不同角度的测量值,落在一个球面 x 2 + y 2 + z 2 = B 2 x^2+y^2+z^2=B^2 x2+y2+z2=B2上,球心是原点,半径是B。

误差来源

主要分为磁传感器内部和外部因素造成的误差。

内部

主要是磁传感器灵敏度

  1. 三轴灵敏度不同,

    例如,10uT的磁感应强度,分别用三个轴来测量,测量结果为:9uT,10uT,11uT。

  2. 三轴不正交

    例如,某个磁场下,理想的读数是:[10uT,0,0],但实际上是[10uT,1uT,0],因为XY两轴不是完全正交,原来只在X轴有读数,在非理想情况下,Y轴上也有了一定读数。

  3. 零偏

    在完全无磁场时也有一个非零读数。

几种误差对读数的影响示意图如下:(来自文末参考资料)

image-20220503150710375

外部

  1. 硬磁干扰

    硬磁干扰由传感器附近的永磁体等的磁场引起,造成的影响类似于零偏。

  2. 软磁干扰

    软磁干扰是传感器附近的铁磁材料改变了原磁场的强度和方向。

详见磁传感器PCB设计指导 Layout Recommendations for PCBs Using a Magnetometer Sensor (nxp.com.cn)

误差模型

假设理想的测量结果为:
h 0 = [ h 0 x h 0 y h 0 z ] \mathbf{h_0}=\left[ \begin{matrix} h_{0x}\\ h_{0y} \\ h_{0z} \end{matrix} \right] h0=h0xh0yh0z
首先,外部的磁场由于软磁和硬磁干扰而发生了改变,先考虑外部的干扰:
h m = I 3 × 3 h 0 + F h i \mathbf{h_m}=\mathbf{I_{3\times3}} \mathbf{h_0} + \mathbf{F_hi} hm=I3×3h0+Fhi
I是3x3矩阵,用于表示软磁干扰, F s i \mathbf{F_si} Fsi为硬磁干扰造成的偏置。

考虑内部误差后,测量结果变为:
h = S 3 × 3 N 3 × 3 h m + F o s = S 3 × 3 N 3 × 3 ( I 3 × 3 h 0 + F h i ) + F o s \mathbf{h} = \mathbf{S_{3\times3}} \mathbf{N_{3\times3}}\mathbf{h_m}+\mathbf{F_{os}}= \mathbf{S_{3\times3}} \mathbf{N_{3\times3}}(\mathbf{I_{3\times3}} \mathbf{h_0} + \mathbf{F_hi})+\mathbf{F_{os}} h=S3×3N3×3hm+Fos=S3×3N3×3(I3×3h0+Fhi)+Fos

其中,S、N为3x3矩阵,S表示三轴灵敏度差异,N表示三轴非正交的影响。 F o s \mathbf{F_{os}} Fos为3x1向量,表示零偏。

化简后,测量值h与实际值h0之间的关系可以表示为:
h = W h 0 + V h 0 = W − 1 ( h − V ) \mathbf{h} = \mathbf{W} \mathbf{h_0} + \mathbf{V} \\ \mathbf{h_0} = \mathbf{W^{-1}}(\mathbf{h}-\mathbf{V} ) h=Wh0+Vh0=W1(hV)
W是3x3矩阵,V是3x1向量。其中,W是一个对称矩阵(具体),因此只含6个系数。加上V的3个系数,总共需要获得9个系数才能实现校准。

但是,在某些场合只有硬磁干扰,而软磁干扰不明显,则此时 W = E \mathbf{W}=\mathbf{E} W=E h = h 0 + V \mathbf{h} = \mathbf{h_0} + \mathbf{V} h=h0+V就只需要获得V的3个系数。

硬磁干扰的校准(3个参数)

使用的模型

如果只有硬磁干扰,则理论测量结果h0可表示为:
h 0 = W − 1 ( h − V ) = h − V \mathbf{h_0} = \mathbf{W^{-1}}(\mathbf{h}-\mathbf{V} )=\mathbf{h}-\mathbf{V} h0=W1(hV)=hV
理论测量结果落在球面上:
h 0 T h 0 = ( h − V ) T ( h − V ) = B 2 \mathbf{h_0^T}\mathbf{h_0} = (\mathbf{h}-\mathbf{V})^T(\mathbf{h}-\mathbf{V})=B^2 h0Th0=(hV)T(hV)=B2
其中,
h = [ h x h y h z ] , V = [ V x V y V z ] \textbf{h}=\left[ \begin{matrix} h_x\\ h_y \\ h_z \end{matrix} \right], \textbf{V}=\left[ \begin{matrix} V_x\\ V_y \\ V_z \end{matrix} \right] h=hxhyhz,V=VxVyVz
展开后:
h x 2 + h y 2 + h z 2 − 2 V x h x − 2 V y h y − 2 V y h y + V x 2 + V y 2 + V z 2 − B 2 = 0 h_x^2+h_y^2+h_z^2- 2V_xh_x- 2V_yh_y- 2V_yh_y + V_x^2 +V_y^2 +V_z^2 -B^2 = 0 hx2+hy2+hz22Vxhx2Vyhy2Vyhy+Vx2+Vy2+Vz2B2=0
整理下:
[ h x 2 + h y 2 + h z 2 ] − [ h x h y h z 1 ] [ 2 V x 2 V y 2 V z B 2 − ( V x 2 + V y 2 + V z 2 ) ] = 0 [h_x^2+h_y^2+h_z^2]- \left[ \begin{matrix} h_x & h_y & h_z & 1 \end{matrix} \right] \left[ \begin{matrix} 2V_x\\ 2V_y\\ 2V_z \\ B^2 - (V_x^2 +V_y^2 +V_z^2) \end{matrix} \right] = 0 [hx2+hy2+hz2][hxhyhz1]2Vx2Vy2VzB2(Vx2+Vy2+Vz2)=0

最小二乘法

获得多组测量数据h(1),h(2)… h(m),并整理:
[ h x 2 [ 1 ] + h y 2 [ 1 ] + h z 2 [ 1 ] h x 2 [ 2 ] + h y 2 [ 2 ] + h z 2 [ 2 ] . . . h x 2 [ m ] + h y 2 [ m ] + h z 2 [ m ] ] − [ h x [ 1 ] h y [ 1 ] h z [ 1 ] 1 h x [ 2 ] h y [ 2 ] h z [ 2 ] 1 . . . . . . . . . . . . h x [ m ] h y [ m ] h z [ m ] 1 ] [ 2 V x 2 V y 2 V z B 2 − ( V x 2 + V y 2 + V z 2 ) ] = [ ϵ [ 1 ] ϵ [ 2 ] . . . ϵ [ m ] ] \left[ \begin{matrix} h_x^2[1]+h_y^2[1]+h_z^2[1]\\ h_x^2[2]+h_y^2[2]+h_z^2[2] \\ ... \\ h_x^2[m]+h_y^2[m]+h_z^2[m] \end{matrix} \right] -\left[ \begin{matrix} h_x[1] & h_y[1] & h_z[1] & 1\\ h_x[2] & h_y[2] & h_z[2] & 1\\ ... & ...& ... & ...\\ h_x[m] & h_y[m] & h_z[m] & 1 \end{matrix} \right] \left[ \begin{matrix} 2V_x\\ 2V_y\\ 2V_z \\ B^2 - (V_x^2 +V_y^2 +V_z^2) \end{matrix} \right] = \left[ \begin{matrix} \epsilon[1]\\ \epsilon[2] \\ ... \\ \epsilon[m] \end{matrix} \right] hx2[1]+hy2[1]+hz2[1]hx2[2]+hy2[2]+hz2[2]...hx2[m]+hy2[m]+hz2[m]hx[1]hx[2]...hx[m]hy[1]hy[2]...hy[m]hz[1]hz[2]...hz[m]11...12Vx2Vy2VzB2(Vx2+Vy2+Vz2)=ϵ[1]ϵ[2]...ϵ[m]
用符号表示:
Y − X β = ϵ \mathbf{Y} - \textbf{X} \mathbf{\beta}=\mathbf{\epsilon} YXβ=ϵ
根据使用的模型,需要求一组系数 β \beta β,使得:
m i n ( ϵ T ϵ ) = ( Y − X β ) T ( Y − X β ) min(\mathbf{\epsilon^T}\mathbf{\epsilon})=(\mathbf{Y} - \mathbf{X} \mathbf{\beta})^T(\mathbf{Y} - \mathbf{X} \mathbf{\beta}) min(ϵTϵ)=(YXβ)T(YXβ)
根据最小二乘法,
β = ( X T X ) − 1 X T Y = [ 2 V x 2 V y 2 V z B 2 − ( V x 2 + V y 2 + V z 2 ) ] \beta = \left( \mathbf{X}^TX\right)^{-1}\mathbf{X}^T\mathbf{Y}= \left[ \begin{matrix} 2V_x\\ 2V_y\\ 2V_z \\ B^2 - (V_x^2 +V_y^2 +V_z^2) \end{matrix} \right] β=(XTX)1XTY=2Vx2Vy2VzB2(Vx2+Vy2+Vz2)
根据 β \beta β,可以方便地求出偏置V和磁感应强度的估计值。
V x = β [ 1 ] 2 V y = β [ 2 ] 2 V z = β [ 3 ] 2 B e s t i m a t e = β [ 4 ] 2 + V x 2 + V y 2 + V z 2 V_x=\frac{\beta[1]}{2} \\ V_y=\frac{\beta[2]}{2} \\ V_z=\frac{\beta[3]}{2} \\ B_{estimate}=\sqrt{\beta[4]^2+V_x^2+V_y^2+V_z^2} Vx=2β[1]Vy=2β[2]Vz=2β[3]Bestimate=β[4]2+Vx2+Vy2+Vz2

实测结果

用手头的一个磁传感器,采集了传感器朝向各个位置时的约600组数据。做了下简单验证。

最小二乘法的计算结果为:
β = [ 51.78 − 122.84 16.33 − 3305.63 ] \beta= \left[ \begin{matrix} 51.78\\ -122.84 \\ 16.33 \\ -3305.63 \end{matrix} \right] β=51.78122.8416.333305.63
转换为零偏和磁感应强度B:
V x = 25.89 , V y = − 61.42 , V z = 8.17 B e s t i m a t e = 34.70 μ T V_x =25.89, V_y=-61.42, V_z=8.17 \\ B_{estimate} = 34.70 \mu T Vx=25.89,Vy=61.42,Vz=8.17Bestimate=34.70μT
说明传感器样机受到一定的硬磁干扰,XYZ三轴都有一定的。其中Y轴最严重。

实际当地的磁感应强度是49uT左右,但是因为电子罗盘应用中,最后是通过计算tan(-y/x)获得角度,所以只需要相对大小,而不怎么关注数据的绝对大小。

把校准后的数据和拟合结果画在同一个图上:

image-20220503141910037

从XY两轴看,数据点基本上都在拟合的圆内。偏置基本被消除。

从YZ两轴看,偏置基本被消除,但是数据点有不少在圆外,说明可能还有一些软磁干扰。

image-20220503142643133

对比校准前后的数据,红色为校准后,蓝色为校准前。可以看到原数据基本在一个球面上,球心距离原点较远。而校准后的数据,球心在原点,说明零偏基本上被消除了。

image-20220503142342637

总结

  1. 磁传感器的误差来源:传感器内部的零偏、灵敏度、正交;外界环境的硬磁和软磁干扰
  2. 只存在硬磁干扰的情况下,可以方便地使用最小二乘法进行校准,这时只需要校准3个参数
  3. 用实验数据进行了验证

代码和资料

MATLAB代码

load('ramdom0502_2.mat')  % 包含mag_x,mag_y,mag_z 3个列向量,都是598*1
close all
% 原始数据
scatter3(mag_x,mag_y,mag_z,10)
hold on 

Y = mag_x.^2 + mag_y.^2 + mag_z.^2;
ones_vector = ones(length(mag_x),1);
X = [mag_x,mag_y,mag_z,ones_vector];

beta = inv(X'*X) * X' * Y;  % 最小二乘法
% 把beta的4个值转换成零偏和B
offset_x = 0.5 * beta(1);
offset_y = 0.5 * beta(2);
offset_z = 0.5 * beta(3);
B_est = sqrt(beta(4) + offset_x^2 + offset_y^2 + offset_z^2);

% 减去零偏后的数据
scatter3(mag_x-offset_x,mag_y-offset_y,mag_z-offset_z,10)  % 设置每个点大小为10
xlabel('X/\mu T')
ylabel('Y/\mu T')
zlabel('Z/\mu T')
hold on 
% 画球面
[u,v,w] = sphere(56);
K = B_est;
% 校准后的球面
shape1 = surf(K*u,K*v,K*w);
set(shape1, 'FaceAlpha', 0.2)
shading flat
axis equal  % 设置坐标轴单位长度相等,看起来更接近球形

% 原始数据的球面
shape2 = surf(K*u+offset_x,K*v+offset_y,K*w+offset_z);
set(shape2, 'FaceAlpha', 0.2)
shading flat
axis equal


参考资料

NXP的应用手册 AN4246,4参数校准 https://www.nxp.com.cn/docs/en/application-note/AN4246.pdf

磁传感器PCB设计指导 Layout Recommendations for PCBs Using a Magnetometer Sensor (nxp.com.cn)

Teslabs Engineering - A way to calibrate a magnetometer

样机

实验数据用很久以前买的开发板+传感器采集,用面包板+跳线连了下电源和I2C。

image-20220503133829391

串口工具:MobaXterm

传感器:九轴传感器MPU9250+气压计BMP280,淘宝买的

MCU:Nano V3.0开发板, Atmega328P,也是淘宝买的

驱动:不用自己写驱动,在Arduino中搜一下现成的,我用的是MPU9250_WE。

image-20220503134615602

image-20220503134610070

基于例程简单修改下就行,正确配置传感器,NANO负责读取和从串口发送测量数据,数据都是在MATLAB中离线处理的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

倾斜补偿的电子罗盘(2):磁传感器的误差来源、硬磁干扰的校准(3个参数)、实验验证 的相关文章

随机推荐

  • Flutter--macos环境配置

    Flutter macOS环境配置 1 安装 去flutter官网下载安装包 解压到你想安装的目录 2 配置环境变量 命令行open bash profile打开配置文件 添加 在打开的页面添加上下面代码 export PATH 自己flu
  • 关于RestTemplate使用过程中的两个问题(请求的URL中带有%25,转换的对象属性值与相应的json串中的key值不对应转换失败)

    问题一 请求的URL中带有 25 解决 如果请求的URL中包含 号 尤其是参数经过URLEncode之后 restTemplate会把 转成 25 因此将请求地址封装成URI对象既可 例如 User user restTemplate po
  • 内核中的位图介绍(DECLARE_BITMAP宏)

    1 DECLARE BITMAP宏定义 define DIV ROUND UP x y x y 1 y 向上取整 define BITS TO LONGS nr DIV ROUND UP nr BITS PER BYTE sizeof lo
  • 影响中国软件人物之:倪光南院士

    一 个人简况 倪光南 1939年8月1日出生于浙江宁波 1994年被遴选为中国工程院首批院士 曾担任中科院计算所研究员 联想集团总工程师 二 重要成果 1 1964年 参与吴几康主持研制的119机研制项目成功 2 1974年 作为计算所代表
  • vue-cli 安装 报错 no such file or directory , access.问题解决。

    解决发案 第一步 查看默认全局安装路径 指令 npm config get prefix 复制默认全局安装路径在你的系统显示目录中删除npm文件夹 对于大多数系统显示目录为 usr local 第二步 cmd进入到你的项目路径初始化npm就
  • Java基础 -- 多线程的使用01

    Java基础 多线程的使用 1 关键字 1 1 并发与并行 1 2 进程和线程 2 Java 线程 2 1 Java的主线程 2 2 线程生命周期 3 Java 线程三种实现 3 1 继承Thread类 3 2 实现Runnable接口 3
  • python 语言 实现一个WEB登陆应用程序

    实现一个 Python 语言的 WEB 登录应用程序需要掌握一些基础知识 例如 HTTP 协议 网络编程 加密算法等 以下是一个基本的框架 供参考 熟悉 HTTP 协议和 Web 服务器与客户端的基本通信机制 使用 Python 的网络编程
  • 使用Python将pyd文件打包成安装包whl

    先说效果 可以将一个或多个py文件编译为源码不可见的 pyd文件 同时将pyd文件打包为whl文件 他人使用时 只需要将whl文件发送过去 对方通过安装whl文件 就可以将你写的代码文件 库文件 安装到python环境了 首先将py代码文件
  • 前后端分离技术逐步深入,让你更加深入理解Nginx+Tomcat

    你提到了熟悉Tomcat和Nginx服务器的配置 以及应用前后端分离技术 请解释一下Tomcat和Nginx的主要作用是什么 以及在前后端分离中它们的角色是什么 标准回答 Tomcat是一个Java应用服务器 主要用于运行Java Web应
  • 【pytorch目标检测】开山之作:R-CNN算法解读

    背景 将 深度学习 和传统的 计算机视觉 的知识相结合 没有过多的使用深度学习 2014年将PASCALVOC数据集检测率从35 提升到53 具体步骤 总体的步骤图 1 候选区域生成 ROI Regions of Interst Selec
  • C++ 知识图谱

    在学习多年的c 后发现很多知识点非常零碎不够系统 借鉴看过的 c primer 做一下总结 方便自己学习 这个专栏的定位是具备c 基础的开发工程师 系统的总结c 知识 避免出现知识空白 并不会像书中那样非常详细的介绍每个特性和知识点 而只会
  • 五种混沌映射的种群初始化(可适用多数算法改进)附Matlab代码

    沌映射被用于生成混沌序列 这是一种由简单的确定性系统产生的随机性序列 一般混沌序列具有以下主要特征 非线性 对初值的敏感依赖性 遍历性 随机性 奇异吸引子 混沌吸引子 分数维持性 整体稳定局部不稳定 长期不可预测性 轨道不稳定性及分叉 普适
  • React学习笔记

    1 起步 创建项目 npx create react app project name Vscode React插件安装 添加该依赖后 rcc 和 rfc可以创建组件的方法 快速启动的代码块 rcc react class componen
  • 【电子电路】电子基础基本知识和面试要点

    1 晶体管基本放大电路有共射 共集 共基三种接法 请简述这三种基本放大电路的特点 共射 共射放大电路具有放大电流和电压的作用 输入电阻大小居中 输出电阻较大 频带较窄 适用于一般放大 共集 共集放大电路只有电流放大作用 输入电阻高 输出电阻
  • 最新!CVPR 2021 视觉Transformer论文大盘点(43篇)

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 作者 Amusi 来源 CVer 前言 从2020下半年开始 特别是2021上半年 Visual Transformer的研究热点达到了前所未有的高峰 Amusi 认为
  • SpringBoot的使用

    SpringBoot的使用 文章目录 SpringBoot的使用 一 引言 1 1 初始化配置 1 2 整合第三方框架 1 3 后期维护 1 4 部署工程 1 5 敏捷式开发 二 SpringBoot介绍 三 SpringBoot快速入门
  • Ubuntu 20.04 安装 mysql 并配置远程访问

    文章目录 一 使用 apt 安装 mysql 服务 二 初始化 mysql 数据库管理员用户密码 三 配置远程访问 一 使用 apt 安装 mysql 服务 更新软件包列表 apt update 安装mysql服务 apt install
  • App UI自动化测试必备:元素定位方法大揭秘

    今天给大家分享App UI自动化测试中常用的元素定位方法 一 通过ID定位 对应 resource id 属性 示例 self driver find element AppiumBy ID 二 通过Name定位 对应 text 属性 示例
  • 【Git学习笔记5】以普通模式合并(--no-ff)、push到远程库及分支管理策略

    一 以普通模式合并 no ff 合并分支时 如果可能 Git会用Fast forward模式 但这种模式下 删除分支后 会丢掉分支信息 啥 不记得啦 那等会我们学习完给你再举个栗子吧 看看这个fast forward的示意图 如果要强制禁用
  • 倾斜补偿的电子罗盘(2):磁传感器的误差来源、硬磁干扰的校准(3个参数)、实验验证

    电子罗盘 2 磁传感器的误差来源 硬磁干扰的校准 3个参数 实验验证 文章目录 理想情况 误差来源 内部 外部 误差模型 硬磁干扰的校准 3个参数 使用的模型 最小二乘法 实测结果 总结 代码和资料 MATLAB代码 参考资料 样机 理想情