基于最小二乘法的磁力计椭球拟合方法
基于最小二乘法的磁力计椭球拟合方法
在写飞控代码时,必然要对磁力计的测量数据进行校正,本文将介绍一种简单实用的校正方法–基于最小二乘法的椭球拟合方法。
本文椭球拟合部分来自博文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=1a1x2+a2y2+a3z2+a4xy+a5xz+a6yz+a7x+a8y+a9z=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−cxy−cyz−cz]⎣⎡r11r21r31r12r22r32r13r23r33⎦⎤T⎣⎡λ1000λ2000λ3⎦⎤⎣⎡r11r21r31r12r22r32r13r23r33⎦⎤⎣⎡x−cxy−cyz−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+[cxcycz]⎣⎡r11r21r31r12r22r32r13r23r33⎦⎤T⎣⎡λ1000λ2000λ3⎦⎤⎣⎡r11r21r31r12r22r32r13r23r33⎦⎤⎣⎡cxcycz⎦⎤
写成矩阵形式:
[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=[xyz]表示椭球上的点,C=[cxcycz]C=\left[ \begin{array}{lll}{c_{x}} & {c_{y}} & {c_{z}}\end{array}\right]C=[cxcycz]表示椭球的球心;
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=⎣⎡r11r21r31r12r22r32r13r23r33⎦⎤T⎣⎡λ1000λ2000λ3⎦⎤⎣⎡r11r21r31r12r22r32r13r23r33⎦⎤=⎣⎡a1a4/2a5/2a4/2a2a6/2a5/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=λ1SS
椭球yyy轴长度:yscale=SSλ2y_{s c a l e}=\sqrt{\frac{S S}{\lambda_{2}}}yscale=λ2SS
椭球zzz轴长度:zscale=SSλ3z_{s c a l e}=\sqrt{\frac{S S}{\lambda_{3}}}zscale=λ3SS
接下来就是如何使用最小二乘法从测量数据中求出椭圆的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=(xi2xi1)⎝⎛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=⎝⎜⎜⎜⎛x12x22⋮xr2x1x2⋮xr11⋮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=1a1x2+a2y2+a3z2+a4xy+a5xz+a6yz+a7x+a8y+a9z=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=(x2y2z2xyxzyzxyz)⎝⎜⎛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⎠⎟⎟⎟⎞=⎝⎜⎜⎜⎛x12x22⋮xr2y12y22⋮yr2z12z22⋮zr2⋯⋯⋱⋯x1x2⋮xry1y2⋮yrz1z2⋮zr⎠⎟⎟⎟⎞⎝⎜⎜⎜⎛a1a2⋮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=⎝⎜⎜⎜⎛a1a2⋮a9⎠⎟⎟⎟⎞=(HTH)−1HTY
即可求得最优估计的椭圆参数。
matlab平台下的磁力计校正
将MPU9250的磁力计测量数据通过嵌入式平台导入上位机,再在matlab平台下进行椭球拟合,值得注意的是磁力计的测量数据应当尽量遍历空间中的各个指向,这样才能得到更精确的拟合效果(图中的采样数据较少);如效果图所示,拟合算法基本能精确计算出椭球球心位置,这表示了磁力计三轴的偏移量,而实际飞控代码中也应对磁力计初始数据减去该偏移量。
基于最小二乘法的磁力计椭球拟合方法相关推荐
- 【传感器】最小二乘法实现磁力计椭球校准
总体思路 磁力计的数据在实际中是椭球的形状,在此之前使用了球体拟合进行校准,也就是简化为正球体的模型,得出的结果比较差,航向计算不准,还是需要用椭球的模型来估计偏移量,先使用标准的椭球方程,进行化简与 ...
- 基于椭球 磁补偿 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 ...
- 【51单片机快速入门指南】4.4.1:python串口接收磁力计数据并进行最小二乘法椭球拟合
目录 硬知识 Python代码 使用方法 串口收集数据 椭球拟合 验证 STC15F2K60S2 16.384MHz Keil uVision V5.29.0.0 PK51 Prof.Develope ...
- 基于椭球 磁补偿 matlab,基于椭球拟合的三轴磁传感器快速标定补偿方法
第4期(总第173期) 2012年8月 机械工程与自动化 MECHANICAL ENGINEERING & AUTOMATION No.4Aug. 文章编号:1672-6413(2012)04 ...
- n维椭球体积公式_加速度计 椭球校准 (最小二乘法 椭球拟合)
在搞自动控制中,很少有人能不和陀螺仪,加速度计这些打交道,当然还有些人还不免和地磁计打交道, 这类三轴传感器都有一个特性,三个轴的零飘不一样,三个轴的比例尺不一样,随机游走我们暂且不考虑, 那么这时候 ...
- IMU加速度、磁力计校正--椭球拟合
本文为博主"声时刻"原创文章,未经博主允许不得转载. 联系方式:shenshikexmu@163.com 问题 考虑到IMU中,x,y,z轴的度量单位并不相同,假设各轴之间相互直. ...
- 倾斜补偿的电子罗盘(3):椭球拟合,磁传感器软磁干扰和硬磁干扰的9参数校准
倾斜补偿的电子罗盘(3):椭球拟合,磁传感器软磁干扰和硬磁干扰的9参数校准 背景 之前提到磁传感器的误差来源,并介绍了消除硬磁干扰的3参数校准.倾斜补偿的电子罗盘(2):磁传感器的误差来源.硬磁干扰的 ...
- 椭球拟合的电子罗盘磁差补偿_椭球拟合的电子罗盘磁差补偿
椭球拟合的电子罗盘磁差补偿 孙倩 ; 付虹 [摘 要] 对电子罗盘磁差补偿的椭球拟合校准法进行深入研究 , 并分解为硬磁.软 磁.比例系数校准和未对准误差校准 , 分别进行仿真分析 , 直观给出各部分 ...
- 椭球拟合的电子罗盘磁差补偿_基于椭球曲面拟合的三维磁罗盘误差补偿算法.pdf...
您所在位置:网站首页 > 海量文档  > 学术论文 > 自然科学论文 基于椭球曲面拟合的三维磁罗盘误差补偿算法.pdf ...
最新文章
- 郭的好象在推销,实在内容很少.
- python【蓝桥杯vip练习题库】BASIC-21Sine之舞(递归 递推)
- Spring源码学习笔记1
- PAT甲级1112 Stucked Keyboard:[C++题解]卡住的键盘、双指针、去重
- 如何提高科研论文录用率?
- 【笔记】css卡片式地展示人物信息和一些展示信息的相关美化记录
- 如何在代码中将menu隐藏_如何在40行代码中将机器学习用于光学/光子学应用
- php扩展开发1--添加函数
- 背压加载文件– RxJava常见问题解答
- python123循环结构_来学Python啦,大话循环结构~
- hook 监控文件 c++_技术分享 | Linux 入侵检测中的进程创建监控
- 微信生态下的营销洞察
- 信息学奥赛C++语言: 商品排序
- 一级计算机框线设置为窄线,计算机等级一级MS Office考题:第二套字处理题
- Dallas CTP3 发布通告
- redhat as4 上安装 MySQL5
- 高等数学(第七版)同济大学 习题4-4(后14题) 个人解答
- 平衡小车—TB6612FNG与直流电机控制教程
- Python爬虫-CSDN博客排行榜数据爬取
- 【MAC连接logi蓝牙鼠标】蓝牙设备无法显示logi鼠标的问题解决
热门文章
- oracle sql优化的几条法则
- 4.6、robot framework所有断言操作
- 没想到,还有小白不知道怎么比较数组是否相等以及检出不匹配项
- 牛P的经验、经历、感受分享
- Keil编译警告汇总(持续更新。。。)
- 可解释性机器学习( Explainable Artificial Intelligence (XAI) )文献阅读记录(1.1)
- oss2罗列所有文件
- Linux 之pureftp 的部署和优化
- 牛客网试题+答案分析+大牛面试经验(12)
- UVA 1025 紫书练习题 动态规划