倾斜补偿的电子罗盘(3):椭球拟合,磁传感器软磁干扰和硬磁干扰的9参数校准

背景

之前提到磁传感器的误差来源,并介绍了消除硬磁干扰的3参数校准。倾斜补偿的电子罗盘(2):磁传感器的误差来源、硬磁干扰的校准(3个参数)、实验验证

硬磁干扰的影响相当于零偏,导致数据点所在的球面发生平移。而软磁干扰会导致球面变为椭球,如下图,同时存在硬磁和软磁干扰的情况:

Layout Recommendations for PCBs Using a Magnetometer Sensor (nxp.com.cn)

同样,获得磁传感器读数后,需要通过校准消除软磁和硬磁干扰的影响,校准后的数据然后再用于后续处理实现电子罗盘功能,见 倾斜补偿的电子罗盘(1):地磁场,磁传感器,倾斜补偿

电子罗盘使用中的校准流程:

  1. 进行一次任意旋转,尽量包含多个方向,使得拟合更准确(比如手机的指南针应用,启动后有时需要把手机旋转几次才能继续使用,可能就是这个原因?)
  2. 用获得的数据进行拟合,根据拟合结果计算 W−1\mathbf{W}^{-1}W−1和V\mathbf{V}V
  3. 对于新获得的读数h\mathbf{h}h,用h0=W−1(h−V)\mathbf{h_0} = \mathbf{W^{-1}}(\mathbf{h}-\mathbf{V})h0​=W−1(h−V)进行校准,然后基于h0\mathbf{h_0}h0​可以使用倾斜补偿来获得方位

本文介绍计算 W−1\mathbf{W}^{-1}W−1和V\mathbf{V}V的过程,并用样机做了校准+倾斜补偿的测试。

这里只是跟着参考资料操作了拟合的每个步骤,但是对于椭球拟合部分具体的原理其实不太理解(好久没接触线代了),不过看起来效果还不错。

椭球拟合

椭球的表达式

首先,椭球面表达式:
h0Th0=[W−1(h−V)]TW−1(h−V)=B2\mathbf{h_0^T}\mathbf{h_0} = [\mathbf{W}^{-1}(\mathbf{h}-\mathbf{V})]^T\mathbf{W}^{-1}(\mathbf{h}-\mathbf{V})=B^2 h0T​h0​=[W−1(h−V)]TW−1(h−V)=B2
其中,W−1\mathbf{W}^{-1}W−1是对称矩阵。

展开后:
hT(W−1)TW−1h−2hT(W−1)TW−1V+VT(W−1)TW−1V−B2=0→hTMh+2hTn+d=0\mathbf{h}^T(\mathbf{W}^{-1})^{T}\mathbf{W}^{-1}\mathbf{h}-2\mathbf{h}^T(\mathbf{W}^{-1})^{T}\mathbf{W}^{-1}\mathbf{V} +\mathbf{V}^T(\mathbf{W}^{-1})^{T}\mathbf{W}^{-1}\mathbf{V}-B^2=0 \\ \rightarrow \mathbf{h}^T\mathbf{M}\mathbf{h}+2\mathbf{h}^T\mathbf{n}+d=0 hT(W−1)TW−1h−2hT(W−1)TW−1V+VT(W−1)TW−1V−B2=0→hTMh+2hTn+d=0
其中,
M=(W−1)TW−1=(W−1)2n=−MVd=VTMV−B2\mathbf{M} = (\mathbf{W}^{-1})^{T}\mathbf{W}^{-1} = (\mathbf{W}^{-1})^2 \\ \mathbf{n} = -\mathbf{M} \mathbf{V} \\ d = \mathbf{V}^T\mathbf{M}\mathbf{V}-B^2 M=(W−1)TW−1=(W−1)2n=−MVd=VTMV−B2
同时,用xyz表示:
ax2+by2+cz2+2fyz+2gxz+2hxy+2px+2qy+2rz+d=vTx=0,v=[abcfghpqrd]Tx=[x2y2z22yz2xz2xy2x2y2z1]Tax^2+by^2+cz^2+2fyz+2gxz+2hxy+2px+2qy+2rz+d=\mathbf{v}^T\mathbf{x}=0, \\ \mathbf{v} = \left[ \begin{matrix} a &b &c &f &g &h &p &q &r &d \end{matrix} \right]^T \\ \mathbf{x} = \left[ \begin{matrix} x^2 &y^2 &z^2 &2yz &2xz &2xy &2x &2y &2z &1 \end{matrix} \right]^T ax2+by2+cz2+2fyz+2gxz+2hxy+2px+2qy+2rz+d=vTx=0,v=[a​b​c​f​g​h​p​q​r​d​]Tx=[x2​y2​z2​2yz​2xz​2xy​2x​2y​2z​1​]T
则系数的对应关系为:
M=[ahghbfgfc],n=[pqr]\mathbf{M} = \left[ \begin{matrix} a &h &g\\ h &b &f\\ g &f &c \end{matrix} \right], \mathbf{n} = \left[ \begin{matrix} p \\ q \\ r \end{matrix} \right] M=​ahg​hbf​gfc​​,n=​pqr​​

椭球拟合实际上就是要获得v\mathbf{v}v的10个系数。

简单验证系数的对应关系:

拟合过程

此处只介绍计算过程,也是基于最小二乘法,详见参考资料。

  1. 使用m组测量数据构建10*m矩阵D=[x1,x2,...,xm]\mathbf{D}=[\mathbf{x_1},\mathbf{x_2},...,\mathbf{x_m}]D=[x1​,x2​,...,xm​]。根据我们选用的模型,
    ax2+by2+cz2+2fyz+2gxz+2hxy+2px+2qy+2rz+d=vTx=0ax^2+by^2+cz^2+2fyz+2gxz+2hxy+2px+2qy+2rz+d=\mathbf{v}^T\mathbf{x}=0 ax2+by2+cz2+2fyz+2gxz+2hxy+2px+2qy+2rz+d=vTx=0
    需要获得一组v\mathbf{v}v,实现min(∣∣Dv∣∣2)min(||\mathbf{D}\mathbf{v}||^2)min(∣∣Dv∣∣2)。后续的算法是把这个优化问题转化后再进行求解。(不太理解具体是怎么转化的。。)

  2. 计算S=DDT\mathbf{S}=\mathbf{D}\mathbf{D}^TS=DDT

  3. 对S\mathbf{S}S和v\mathbf{v}v进行分块:

S=DDT=[(S11)6×6(S12)6×4(S12)4×6T(S22)4×4],v=[(v1)6×1(v2)4×1]\mathbf{S}=\mathbf{D}\mathbf{D}^T=\left[ \begin{matrix} (S_{11})_{6\times6} & (S_{12})_{6\times4}\\ (S_{12})^T_{4\times6} & (S_{22})_{4\times4}\\ \end{matrix} \right], \mathbf{v} = \left[ \begin{matrix} (\mathbf{v}_1)_{6\times1} \\ (\mathbf{v}_2)_{4\times1} \end{matrix} \right] S=DDT=[(S11​)6×6​(S12​)4×6T​​(S12​)6×4​(S22​)4×4​​],v=[(v1​)6×1​(v2​)4×1​​]

  1. 直接计算v1,v2\mathbf{v}_1,\mathbf{v}_2v1​,v2​,优化问题被转化为:
    (S11−λC1)v1+S12v2=0(1)S12Tv1+S22v2=0(2)(S_{11}-\lambda C_1)\mathbf{v}_1 + S_{12}\mathbf{v}_2 = 0 \quad (1)\\ S_{12}^T\mathbf{v}_1 + S_{22}\mathbf{v}_2 = 0 \quad (2) (S11​−λC1​)v1​+S12​v2​=0(1)S12T​v1​+S22​v2​=0(2)
    其中,
    C1=[−11−10001−1100011−1000000−4000000−4000000−4]C_1 = \left[ \begin{matrix} -1 & 1 & -1 & 0 & 0 & 0 \\ 1 & -1 & 1 & 0 & 0 & 0 \\ 1 & 1 & -1 & 0 & 0 & 0 \\ 0 & 0 & 0 & -4 & 0 & 0 \\ 0 & 0 & 0 & 0 & -4 & 0 \\ 0 & 0 & 0 & 0 & 0 & -4 \\ \end{matrix} \right] C1​=​−111000​1−11000​−11−1000​000−400​0000−40​00000−4​​
    根据(2),v2=−S22−1S12Tv1\mathbf{v}_2=-S_{22}^{-1}S_{12}^T\mathbf{v}_1v2​=−S22−1​S12T​v1​,代入(1):
    C1−1(S11−S12S22−1S12T)v1=λv1C_1^{-1} (S_{11}-S_{12}S_{22}^{-1}S_{12}^T)\mathbf{v}_1 = \lambda \mathbf{v}_1 C1−1​(S11​−S12​S22−1​S12T​)v1​=λv1​
    从这个公式可以看出v1\mathbf{v}_1v1​是矩阵C1−1(S11−S12S22−1S12T)C_1^{-1} (S_{11}-S_{12}S_{22}^{-1}S_{12}^T)C1−1​(S11​−S12​S22−1​S12T​)的特征向量。

    因此,求矩阵C1−1(S11−S12S22−1S12T)C_1^{-1} (S_{11}-S_{12}S_{22}^{-1}S_{12}^T)C1−1​(S11​−S12​S22−1​S12T​)的所有特征向量,选择最大特征值对应的特征向量,就得到了v1\mathbf{v}_1v1​。(不太理解为什么是最大特征值对应的特征向量。。)

  2. 使用v1\mathbf{v}_1v1​计算v2\mathbf{v}_2v2​,v2=−S22−1S12Tv1\mathbf{v}_2=-S_{22}^{-1}S_{12}^T\mathbf{v}_1v2​=−S22−1​S12T​v1​

  3. 获得v=[(v1)6×1(v2)4×1]\mathbf{v} = \left[ \begin{matrix} (\mathbf{v}_1)_{6\times1} \\ (\mathbf{v}_2)_{4\times1} \end{matrix} \right]v=[(v1​)6×1​(v2​)4×1​​]。

使用拟合数据进行校准

整理下之前的结果.

已获得v\mathbf{v}v:
v=[abcfghpqrd]T\mathbf{v} = \left[ \begin{matrix} a &b &c &f &g &h &p &q &r &d \end{matrix} \right]^T v=[a​b​c​f​g​h​p​q​r​d​]T

原始数据满足:h0Th0=[W−1(h−V)]TW−1(h−V)=B2\mathbf{h_0^T}\mathbf{h_0} = [\mathbf{W}^{-1}(\mathbf{h}-\mathbf{V})]^T\mathbf{W}^{-1}(\mathbf{h}-\mathbf{V})=B^2h0T​h0​=[W−1(h−V)]TW−1(h−V)=B2,展开化简后是hTMh+2hTn+d=0\mathbf{h}^T\mathbf{M}\mathbf{h}+2\mathbf{h}^T\mathbf{n}+d=0hTMh+2hTn+d=0。

其中,
M=(W−1)TW−1=(W−1)2n=−MVd=VTMV−B2\mathbf{M} = (\mathbf{W}^{-1})^{T}\mathbf{W}^{-1} = (\mathbf{W}^{-1})^2 \\ \mathbf{n} = -\mathbf{M} \mathbf{V} \\ d = \mathbf{V}^T\mathbf{M}\mathbf{V}-B^2 M=(W−1)TW−1=(W−1)2n=−MVd=VTMV−B2

M,n\mathbf{M},\mathbf{n}M,n和V\mathbf{V}V的关系为:

M=[ahghbfgfc],n=[pqr]\mathbf{M} = \left[ \begin{matrix} a &h &g\\ h &b &f\\ g &f &c \end{matrix} \right], \mathbf{n} = \left[ \begin{matrix} p \\ q \\ r \end{matrix} \right] M=​ahg​hbf​gfc​​,n=​pqr​​
因此,把M,n\mathbf{M},\mathbf{n}M,n转换为最终需要的W−1,V,B\mathbf{W}^{-1},\mathbf{V},BW−1,V,B:

W−1=M12V=−M−1nB=VTMV−d\mathbf{W}^{-1} = \mathbf{M}^{\frac{1}{2}} \\ \mathbf{V} = -\mathbf{M}^{-1} \mathbf{n} \\ B = \sqrt{\mathbf{V}^T\mathbf{M}\mathbf{V}-d} W−1=M21​V=−M−1nB=VTMV−d​

实验验证

拟合结果

之前3参数校准时,YZ画图如下,Z轴方向上,有不少点在拟合的球之外。

对同一组数据进行9参数校准,YZ画图,校准前后结果如下,用椭球拟合看起来效果更好一些。

把Y轴原始数据乘以2,看下椭球拟合的效果。

看下XY,XZ,YZ的数据:红色为校准前,蓝色为校准后,可见效果还不错。

校准实测

获得的W−1,V\mathbf{W}^{-1},\mathbf{V}W−1,V数据:

W_inv = [    0.7329    0.0389   -0.0044;0.0389    0.8484   -0.0151;-0.0044   -0.0151    0.6555];
V = [27.5424; -60.3430;9.6232];

对于一组新的测量值raw = [41.66,-75.77,34.67]',计算如下:

  1. 先计算cali
  2. 然后atan2计算方位角为-53°
  3. 按之前的定义(俯视,以磁北为基准,顺时针旋转为正,逆时针旋转为负),磁传感器的x轴与磁北的夹角为-53°,说明此时x轴是朝向北偏西53°。

参考资料

资料

软磁和硬磁干扰:Layout Recommendations for PCBs Using a Magnetometer Sensor (nxp.com.cn)

用了这篇文章的拟合方法:Least squares ellipsoid specific fitting | IEEE Conference Publication | IEEE Xplore

椭球拟合对应的matlab代码:Ellipsoid Fitting - File Exchange - MATLAB Central (Mathworks.cn)

椭球拟合+校准对应的python代码:Teslabs Engineering - A way to calibrate a magnetometer

注意python代码中一个小错误:这个程序是完全按照文章中的方法计算的,在v和M的转换中,v_1[3]对应f,v_1[5]对应h,所以1,2和2,3这两项应该对调(同理,对称矩阵的另外两项2,1和3,2也要对调)。

代码

测量数据和完整代码在:电子罗盘磁传感器校准MATLAB代码(9参数椭球拟合)

以下是9参数拟合具体实现方法,是基于文献和参考链接的python修改而来的MATLAB代码:

D = [mag_x.^2, mag_y.^2, mag_z.^2, 2*mag_y.*mag_z, 2*mag_x.*mag_z, 2*mag_x.*mag_y, ...2*mag_x, 2*mag_y, 2*mag_z, ones(length(mag_x),1) ];
S = D' * D;
% 根据文章做分块
S11 = S(1:6, 1:6);
S12 = S(1:6, 7:10);
S21 = S(7:10, 1:6);
S22 = S(7:10, 7:10);% k=4
C = [-1, 1, 1, 0, 0, 0; 1, -1, 1, 0, 0, 0;1, 1, -1, 0, 0, 0;0, 0, 0, -4, 0, 0;0, 0, 0, 0, -4, 0;0, 0, 0, 0, 0, -4];M0 = inv(C) * (S11 - S12 * inv(S22) * S12');
[gevec, geval]=eig(M0); % M0 * gevec = gevec * geval%%% 以下是找唯一 正的特征值,对应的特征向量v1。
% geval是一个对角矩阵,diag(geval)返回的是主对角线的元素
% 找主对角线元素的最大值,和所在位置
[max_val, max_index] = max(diag(geval));
% 选择最大的特征值对应的特征向量
v1 = gevec(:,max_index);
if v1(1)<0 v1 = -v1;
end
% 这里有点看不懂了,v1为什么要取反?
% 但是如果不取反,M开根号后全是虚数了
v2 = - pinv(S22) * S12' * v1;% 还原M矩阵
M = [v1(1), v1(6), v1(5),;v1(6), v1(2), v1(4);v1(5), v1(4), v1(3)];
n = v2(1:3);
d = v2(4);% 获得最终需要的W^(-1)和V
V = - inv(M) * n;
W_inv = sqrtm(M);
B_est2 = sqrt(V'*M*V-d);data_raw = [mag_x, mag_y, mag_z]';
data_cali9 = zeros(size(data_raw));
% 对原始的每一组数据分别进行9参数校准
for i = 1:length(mag_x)h = data_raw(:,i);data_cali9(:,i) = W_inv * (h - V);
end

倾斜补偿的电子罗盘(3):椭球拟合,磁传感器软磁干扰和硬磁干扰的9参数校准相关推荐

  1. 椭球拟合的电子罗盘磁差补偿_椭球拟合的电子罗盘磁差补偿

    椭球拟合的电子罗盘磁差补偿 孙倩 ; 付虹 [摘 要] 对电子罗盘磁差补偿的椭球拟合校准法进行深入研究 , 并分解为硬磁.软 磁.比例系数校准和未对准误差校准 , 分别进行仿真分析 , 直观给出各部分 ...

  2. 基于椭球 磁补偿 matlab,基于椭球拟合的三轴磁传感器快速标定补偿方法

    第4期(总第173期) 2012年8月 机械工程与自动化 MECHANICAL ENGINEERING & AUTOMATION No.4Aug. 文章编号:1672-6413(2012)04 ...

  3. 基于椭球 磁补偿 matlab,基于椭球拟合的三轴磁传感器误差补偿方法.pdf

    第 2 5卷 第7期 2 0 1 2年 7月 传 感 技 术 学 报 C HI NE S E J OU R NAL O F S E NS OR S AND A C T UA T OR S V0 1 2 ...

  4. 【51单片机快速入门指南】4.4.1:python串口接收磁力计数据并进行最小二乘法椭球拟合

    目录 硬知识 Python代码 使用方法 串口收集数据 椭球拟合 验证 STC15F2K60S2 16.384MHz Keil uVision V5.29.0.0 PK51 Prof.Develope ...

  5. n维椭球体积公式_加速度计 椭球校准 (最小二乘法 椭球拟合)

    在搞自动控制中,很少有人能不和陀螺仪,加速度计这些打交道,当然还有些人还不免和地磁计打交道, 这类三轴传感器都有一个特性,三个轴的零飘不一样,三个轴的比例尺不一样,随机游走我们暂且不考虑, 那么这时候 ...

  6. 基于最小二乘法的磁力计椭球拟合方法

    基于最小二乘法的磁力计椭球拟合方法 在写飞控代码时,必然要对磁力计的测量数据进行校正,本文将介绍一种简单实用的校正方法–基于最小二乘法的椭球拟合方法. 本文椭球拟合部分来自博文IMU加速度.磁力计校正 ...

  7. IMU加速度、磁力计校正--椭球拟合

    本文为博主"声时刻"原创文章,未经博主允许不得转载. 联系方式:shenshikexmu@163.com 问题 考虑到IMU中,x,y,z轴的度量单位并不相同,假设各轴之间相互直. ...

  8. 椭球拟合的电子罗盘磁差补偿_基于椭球曲面拟合的三维磁罗盘误差补偿算法.pdf...

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp学术论文&nbsp>&nbsp自然科学论文 基于椭球曲面拟合的三维磁罗盘误差补偿算法.pdf ...

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

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

最新文章

  1. The prefix context for element context:component-scan is not bound.
  2. python链表和树实验报告_关于Python实现树结构和链表结构的一点想法
  3. Markdown中如何输入上标、下标?
  4. 谷歌将于11月修改服务条款
  5. codis实现redis分片和在线扩展
  6. 我写的背包整理插件JPack,比大脚的背包整理效果好
  7. java udp判断端口是否打开,java udp 端口
  8. xampp mysql3306_xmapp_mysql端口冲突解决---Port 3306 in use by......
  9. 微信小程之打卡小程序开发
  10. WCF入门示例一:承载于托管代码中的WCF示例程序
  11. libusb-win32的使用教程和例子
  12. Python中的算数运算符
  13. 计算机相关知识——阻塞和非阻塞,同步和异步等相关概念
  14. video视频设置第一帧为封面
  15. rk3288 linux烧录工具,Firefly-RK3288开发板烧写教程
  16. 算法自学笔记:Convex Hull问题
  17. DataFrame数据选取超全攻略
  18. jenkins 用户名密码错误,无法登录
  19. 隐马尔科夫模型java实现
  20. fastjson按照ascii码排序

热门文章

  1. 基于antd DatePicker的年份组件
  2. 系统怎么设计usb启动_在启动中启动设计系统
  3. 推荐系统实践学习系列(六)利用网络社交数据
  4. 计算机word教案设计,信息技术教学:WORD教学设计
  5. 最新彩虹Ds网6.0.5最新PJ版程序源码
  6. 谁不想拥有自己的博客网站?
  7. 「英语口语」六级口语考题应答模板
  8. python计算绩效工资编程_Python实战精选:计算销售提成
  9. MathType在Word中功能异常的解决办法汇总(持续更新)
  10. php 讯飞语音评测_科大讯飞提供语音评测能力 再一次颠覆语音市场