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

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

本文椭球拟合部分来自博文IMU加速度、磁力计校正--椭球拟合,本文对最小二乘估计进行了部分推导,最后使用实测的数据完成了磁力计的椭球拟合。

椭球拟合

磁力计在测量磁场强度时,在环境不变的情况下,传感器每个姿态感受磁场强度是相同的,磁力计测量的x,y,z轴值,在没有偏差且传感器内部x,y,z轴相互垂直的情况下,在三维空间中组成一个圆球面。但是磁力计存在Hard Iron Distortion和Soft Iron Distortion。使得x,y,z轴度量单位不相同,各轴也并非相互垂直,(说明一下,任意椭球的三个轴都是相互垂直的,几何上,椭球最长的轴与最短的轴相互垂直,从代数的角度看,对称正定矩阵A=R′BRA=R^{\prime} B RA=R′BR,其中BBB为对角线大于0表示各轴长度的对角矩阵,RRR为旋转矩阵,R′R=IR^{\prime} R=IR′R=I,所以磁通量的空间坐标虽然形成一个椭球,椭球各轴相互垂直,但这个垂直的轴已经不是传感器x,y,zx,y,zx,y,z轴了)椭球球心也并非[0,0,0],坐标磁通量在三维空间组成的椭球球心,是磁力计的校准值的一部分。

数学模型:

我们让磁力计尽可能多地采集到空间各个方向上的磁场强度,最后的测量数据将会形成空间上的一个椭圆,而校正问题在于给定椭球球面上的点,如何求椭球球心。其实就是一个椭球拟合问题。

a1x2+a2y2+a3z2+a4xy+a5xz+a6yz+a7x+a8y+a9z=1a_{1} x^{2}+a_{2} y^{2}+a_{3} z^{2}+a_{4} x y+a_{5} x z+a_{6} y z+a_{7} x+a_{8}y+a_{9} z=1a1​x2+a2​y2+a3​z2+a4​xy+a5​xz+a6​yz+a7​x+a8​y+a9​z=1

从几何的角度表示上式的椭球为:
[x−cxy−cyz−cz][r11r12r13r21r22r23r31r32r33]T[λ1000λ2000λ3][r11r12r13r21r22r23r31r32r33][x−cxy−cyz−cz]\left[ \begin{array}{ccc}{x-c_{x}} & {y-c_{y}} & {z-c_{z}}\end{array}\right] \left[ \begin{array}{ccc}{r_{11}} & {r_{12}} & {r_{13}} \\ {r_{21}} & {r_{22}} & {r_{23}} \\ {r_{31}} & {r_{32}} & {r_{33}}\end{array}\right]^{T} \left[ \begin{array}{ccc}{\lambda_{1}} & {0} & {0} \\ {0} & {\lambda_{2}} & {0} \\ {0} & {0} & {\lambda_{3}}\end{array}\right] \left[ \begin{array}{ccc}{r_{11}} & {r_{12}} & {r_{13}} \\ {r_{21}} & {r_{22}} & {r_{23}} \\ {r_{31}} & {r_{32}} & {r_{33}}\end{array}\right] \left[ \begin{array}{c}{x-c_{x}} \\ {y-c_{y}} \\ {z-c_{z}}\end{array}\right] [x−cx​​y−cy​​z−cz​​]⎣⎡​r11​r21​r31​​r12​r22​r32​​r13​r23​r33​​⎦⎤​T⎣⎡​λ1​00​0λ2​0​00λ3​​⎦⎤​⎣⎡​r11​r21​r31​​r12​r22​r32​​r13​r23​r33​​⎦⎤​⎣⎡​x−cx​y−cy​z−cz​​⎦⎤​
=1+[cxcycz][r11r12r13r21r22r23r31r32r33]T[λ1000λ2000λ3][r11r12r13r21r22r23r31r32r33][cxcycz]=1+\left[ \begin{array}{lll}{c_{x}} & {c_{y}} & {c_{z}}\end{array}\right] \left[ \begin{array}{ccc}{r_{11}} & {r_{12}} & {r_{13}} \\ {r_{21}} & {r_{22}} & {r_{23}} \\ {r_{31}} & {r_{32}} & {r_{33}}\end{array}\right]^{T} \left[ \begin{array}{ccc}{\lambda_{1}} & {0} & {0} \\ {0} & {\lambda_{2}} & {0} \\ {0} & {0} & {\lambda_{3}}\end{array}\right] \left[ \begin{array}{ccc}{r_{11}} & {r_{12}} & {r_{13}} \\ {r_{21}} & {r_{22}} & {r_{23}} \\ {r_{31}} & {r_{32}} & {r_{33}}\end{array}\right] \left[ \begin{array}{c}{c_{x}} \\ {c_{y}} \\ {c_{z}}\end{array}\right] =1+[cx​​cy​​cz​​]⎣⎡​r11​r21​r31​​r12​r22​r32​​r13​r23​r33​​⎦⎤​T⎣⎡​λ1​00​0λ2​0​00λ3​​⎦⎤​⎣⎡​r11​r21​r31​​r12​r22​r32​​r13​r23​r33​​⎦⎤​⎣⎡​cx​cy​cz​​⎦⎤​
写成矩阵形式:
[X−C]M[X−C]T=1+CMCT[X-C] M[X-C]^{T}=1+C M C^{T} [X−C]M[X−C]T=1+CMCT
XMXT−2CMXT+CMCT=1+CMCTX M X^{T}-2 C M X^{T}+C M C^{T}=1+C M C^{T} XMXT−2CMXT+CMCT=1+CMCT
其中X=[xyz]X=\left[ \begin{array}{lll}{x} & {y} & {z}\end{array}\right]X=[x​y​z​]表示椭球上的点,C=[cxcycz]C=\left[ \begin{array}{lll}{c_{x}} & {c_{y}} & {c_{z}}\end{array}\right]C=[cx​​cy​​cz​​]表示椭球的球心;

M=RTBR=[r11r12r13r21r22r23r31r32r33]T[λ1000λ2000λ3][r11r12r13r21r22r23r31r32r33]=[a1a4/2a5/2a4/2a2a6/2a5/2a6/2a3]M=R^{T} B R=\left[ \begin{array}{ccc}{r_{11}} & {r_{12}} & {r_{13}} \\ {r_{21}} & {r_{22}} & {r_{23}} \\ {r_{31}} & {r_{32}} & {r_{33}}\end{array}\right]^{T} \left[ \begin{array}{ccc}{\lambda_{1}} & {0} & {0} \\ {0} & {\lambda_{2}} & {0} \\ {0} & {0} & {\lambda_{3}}\end{array}\right] \left[ \begin{array}{ccc}{r_{11}} & {r_{12}} & {r_{13}} \\ {r_{21}} & {r_{22}} & {r_{23}} \\ {r_{31}} & {r_{32}} & {r_{33}}\end{array}\right]=\left[ \begin{array}{ccc}{a_{1}} & {a_{4} / 2} & {a_{5} / 2} \\ {a_{4} / 2} & {a_{2}} & {a_{6} / 2} \\ {a_{5} / 2} & {a_{6} / 2} & {a_{3}}\end{array}\right] M=RTBR=⎣⎡​r11​r21​r31​​r12​r22​r32​​r13​r23​r33​​⎦⎤​T⎣⎡​λ1​00​0λ2​0​00λ3​​⎦⎤​⎣⎡​r11​r21​r31​​r12​r22​r32​​r13​r23​r33​​⎦⎤​=⎣⎡​a1​a4​/2a5​/2​a4​/2a2​a6​/2​a5​/2a6​/2a3​​⎦⎤​
可得球心的表达形式:
C=−12[a7,a8,a9](M)−1C=-\frac{1}{2}\left[a_{7}, a_{8}, a_{9}\right](M)^{-1} C=−21​[a7​,a8​,a9​](M)−1

其他参数:
SS=CMCT+1S S=C M C^{T}+1 SS=CMCT+1

椭球xxx轴长度:xscale=SSλ1x_{s c a l e}=\sqrt{\frac{S S}{\lambda_{1}}}xscale​=λ1​SS​​
椭球yyy轴长度:yscale=SSλ2y_{s c a l e}=\sqrt{\frac{S S}{\lambda_{2}}}yscale​=λ2​SS​​
椭球zzz轴长度:zscale=SSλ3z_{s c a l e}=\sqrt{\frac{S S}{\lambda_{3}}}zscale​=λ3​SS​​

接下来就是如何使用最小二乘法从测量数据中求出椭圆的9个参数。

最小二乘估计

下面举一个最小二乘估计的简单例子:

假设有下列rrr组观测数据
[(x1,y1),…(xr,yr)][(x_1,y_1),…(x_r,y_r)][(x1​,y1​),…(xr​,yr​)]

若待估计的形式为
y=ax2+bx+cy=ax^2+bx+cy=ax2+bx+c

则有

yi=(xi2xi1)(abc)\boldsymbol{y}_{i}=\left( \begin{array}{ccc}{\boldsymbol{x}_{i}^{2}} & {\boldsymbol{x}_{i}} & {1}\end{array}\right) \left( \begin{array}{l}{\boldsymbol{a}} \\ {\boldsymbol{b}} \\ {\boldsymbol{c}}\end{array}\right) yi​=(xi2​​xi​​1​)⎝⎛​abc​⎠⎞​

Y=HKY=HKY=HK

H=(x12x11x22x21⋮⋮⋮xr2xr1)\boldsymbol{H}=\left( \begin{array}{ccc}{\boldsymbol{x}_{1}^{2}} & {\boldsymbol{x}_{1}} & {1} \\ {\boldsymbol{x}_{2}^{2}} & {\boldsymbol{x}_{2}} & {1} \\ {\vdots} & {\vdots} & {\vdots} \\ {\boldsymbol{x}_{r}^{2}} & {\boldsymbol{x}_{r}} & {1}\end{array}\right) H=⎝⎜⎜⎜⎛​x12​x22​⋮xr2​​x1​x2​⋮xr​​11⋮1​⎠⎟⎟⎟⎞​

最优估计问题转换成线性方程组的求解。

当HHH列满秩时(即观测量数目大于待定参数数目时),方程有解,此时左右同时乘HHH的最小二乘逆(左逆)inv(H)=(HTH)−1HTinv(H)=(H^T H)^{-1}H^Tinv(H)=(HTH)−1HT

那么

k=(abc)=(HTH)−1HTY\boldsymbol{k}=\left( \begin{array}{c}{\boldsymbol{a}} \\ {\boldsymbol{b}} \\ {\boldsymbol{c}}\end{array}\right)=\left(\boldsymbol{H}^{T} \boldsymbol{H}\right)^{-1} \boldsymbol{H}^{T} \boldsymbol{Y} k=⎝⎛​abc​⎠⎞​=(HTH)−1HTY

最终得到线性方程组的解,即为最小二乘解(确定的kkk对所有的测量参数都适用,实际上,最小二乘解保证了误差的平方和最小,证明过程参见博文大疆笔试中的涉及矩阵最小二乘求解思路)

同样的,对磁力计椭球拟合来讲,其待估计的形式为:

a1x2+a2y2+a3z2+a4xy+a5xz+a6yz+a7x+a8y+a9z=1a_{1} x^{2}+a_{2} y^{2}+a_{3} z^{2}+a_{4} x y+a_{5} x z+a_{6} y z+a_{7} x+a_{8}y+a_{9} z=1a1​x2+a2​y2+a3​z2+a4​xy+a5​xz+a6​yz+a7​x+a8​y+a9​z=1

可以写成如下形式

1=(x2y2z2xyxzyzxyz)(a1⋮a9)1=\left( \begin{array}{llllllllll}{x^{2}} & {y^{2}} & {z^{2}} & {x y} & {x z} & {y z} & {x} & {y} & {z}\end{array}\right) \left( \begin{array}{c}{a_{1}} \\ {\vdots} \\ {a_{9}}\end{array}\right) 1=(x2​y2​z2​xy​xz​yz​x​y​z​)⎝⎜⎛​a1​⋮a9​​⎠⎟⎞​

我们将所有的观测数据带入可得:

(11⋮1)=(x12y12z12⋯x1y1z1x22y22z22⋯x2y2z2⋮⋮⋮⋱⋮⋮⋮xr2yr2zr2⋯xryrzr)(a1a2⋮a9)\left( \begin{array}{c}{1} \\ {1} \\ {\vdots} \\ {1}\end{array}\right)=\left( \begin{array}{ccccccc}{x_{1}^{2}} & {y_{1}^{2}} & {z_{1}^{2}} & {\cdots} & {x_{1}} & {y_{1}} & {z_{1}} \\ {x_{2}^{2}} & {y_{2}^{2}} & {z_{2}^{2}} & {\cdots} & {x_{2}} & {y_{2}} & {z_{2}} \\ {\vdots} & {\vdots} & {\vdots} & {\ddots} & {\vdots} & {\vdots} & {\vdots} \\ {x_{r}^{2}} & {y_{r}^{2}} & {z_{r}^{2}} & {\cdots} & {x_{r}} & {y_{r}} & {z_{r}}\end{array}\right) \left( \begin{array}{c}{a_{1}} \\ {a_{2}} \\ {\vdots} \\ {a_{9}}\end{array}\right) ⎝⎜⎜⎜⎛​11⋮1​⎠⎟⎟⎟⎞​=⎝⎜⎜⎜⎛​x12​x22​⋮xr2​​y12​y22​⋮yr2​​z12​z22​⋮zr2​​⋯⋯⋱⋯​x1​x2​⋮xr​​y1​y2​⋮yr​​z1​z2​⋮zr​​⎠⎟⎟⎟⎞​⎝⎜⎜⎜⎛​a1​a2​⋮a9​​⎠⎟⎟⎟⎞​

求上述方程的最小二乘解:

k=(a1a2⋮a9)=(HTH)−1HTYk=\left( \begin{array}{l}{a_{1}} \\ {a_{2}} \\ {\vdots} \\ {a_{9}}\end{array}\right)=\left(H^{T} H\right)^{-1} H^{T} Y k=⎝⎜⎜⎜⎛​a1​a2​⋮a9​​⎠⎟⎟⎟⎞​=(HTH)−1HTY

即可求得最优估计的椭圆参数。

matlab平台下的磁力计校正

将MPU9250的磁力计测量数据通过嵌入式平台导入上位机,再在matlab平台下进行椭球拟合,值得注意的是磁力计的测量数据应当尽量遍历空间中的各个指向,这样才能得到更精确的拟合效果(图中的采样数据较少);如效果图所示,拟合算法基本能精确计算出椭球球心位置,这表示了磁力计三轴的偏移量,而实际飞控代码中也应对磁力计初始数据减去该偏移量

基于最小二乘法的磁力计椭球拟合方法相关推荐

  1. 【传感器】最小二乘法实现磁力计椭球校准

    总体思路 磁力计的数据在实际中是椭球的形状,在此之前使用了球体拟合进行校准,也就是简化为正球体的模型,得出的结果比较差,航向计算不准,还是需要用椭球的模型来估计偏移量,先使用标准的椭球方程,进行化简与 ...

  2. 基于椭球 磁补偿 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 ...

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

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

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

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

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

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

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

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

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

    倾斜补偿的电子罗盘(3):椭球拟合,磁传感器软磁干扰和硬磁干扰的9参数校准 背景 之前提到磁传感器的误差来源,并介绍了消除硬磁干扰的3参数校准.倾斜补偿的电子罗盘(2):磁传感器的误差来源.硬磁干扰的 ...

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

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

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

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

最新文章

  1. 郭的好象在推销,实在内容很少.
  2. python【蓝桥杯vip练习题库】BASIC-21Sine之舞(递归 递推)
  3. Spring源码学习笔记1
  4. PAT甲级1112 Stucked Keyboard:[C++题解]卡住的键盘、双指针、去重
  5. 如何提高科研论文录用率?
  6. 【笔记】css卡片式地展示人物信息和一些展示信息的相关美化记录
  7. 如何在代码中将menu隐藏_如何在40行代码中将机器学习用于光学/光子学应用
  8. php扩展开发1--添加函数
  9. 背压加载文件– RxJava常见问题解答
  10. python123循环结构_来学Python啦,大话循环结构~
  11. hook 监控文件 c++_技术分享 | Linux 入侵检测中的进程创建监控
  12. 微信生态下的营销洞察
  13. 信息学奥赛C++语言: 商品排序
  14. 一级计算机框线设置为窄线,计算机等级一级MS Office考题:第二套字处理题
  15. Dallas CTP3 发布通告
  16. redhat as4 上安装 MySQL5
  17. 高等数学(第七版)同济大学 习题4-4(后14题) 个人解答
  18. 平衡小车—TB6612FNG与直流电机控制教程
  19. Python爬虫-CSDN博客排行榜数据爬取
  20. 【MAC连接logi蓝牙鼠标】蓝牙设备无法显示logi鼠标的问题解决

热门文章

  1. oracle sql优化的几条法则
  2. 4.6、robot framework所有断言操作
  3. 没想到,还有小白不知道怎么比较数组是否相等以及检出不匹配项
  4. 牛P的经验、经历、感受分享
  5. Keil编译警告汇总(持续更新。。。)
  6. 可解释性机器学习( Explainable Artificial Intelligence (XAI) )文献阅读记录(1.1)
  7. oss2罗列所有文件
  8. Linux 之pureftp 的部署和优化
  9. 牛客网试题+答案分析+大牛面试经验(12)
  10. UVA 1025 紫书练习题 动态规划