IMU之磁力计校准&地磁场&计算磁航向

2023-05-16

 

背景知识:

导航坐标系:东-北-天

载体坐标系:右-前-上

欧拉角定义:3-1-2旋转,(航向角-俯仰角-滚转角);

  • 航向角北偏西为正,范围【-pi pi】;
  • 俯仰角, 运载体抬头时角度定义为正,角度范围-90° ~90° ;
  • 横滚角,运载体向右倾斜时角度定义为正,角度范围-180° ~180°

重力矢量和地球自转角速度在地理坐标系下:

一、地磁场

1、地球磁场分布图:

        地球磁场:地球的磁场象一个条形磁体一样由磁南极指向磁北极。在磁极点处磁场和当地的水平面垂直,在赤道磁场和当地的水平面平行,所以在北半球磁场方向倾斜指向地面。用来衡量磁感应强度大小的单位是Tesla或者Gauss(1Tesla=10000Gauss)。随着地理位置的不同,通常地磁场的强度是0.4-0.6Gauss。需要注意的是,磁北极和地理上的北极并不重合,通常他们之间有11.5度左右的夹角。

单位:

1Tesla=10000Gauss

1高斯 =100000 nT

1高斯 =1000 mGauss

1mGauss=100nT

2、 地磁要素图:

设观测点在O处,并以O点为原点建立地理坐标系OXYZ,X轴指向北,Y轴指向东,Z轴垂直指向地。

       地磁场强度T在X轴上的投影Bn称为地磁场的北向分量;T在Y轴上的投影Be称为东向分量;T在Z轴上的投影Bz称为地磁场的垂向分量。T在水平面O-XY的投影Bh称为地磁场的水平分量。地磁水平分量Bh和垂向分量Bz所在平面称为磁子午面,磁子午面和地理子午面O-XZ平面的夹角称为磁偏角,用D表示,并规定其东偏为正,西偏为负。地磁场强度T与水平面O-XY的夹角称为磁倾角,用I表示。上述,T、Bh、Bn、Be、Bz、D、I统称为地磁场七要素,可作为定位定向的参考量。七要素只要知道三个独立的要素,就可以求其余的要素,常用的是磁倾角、磁偏角和水平分量。七要素间有如下关系:

3、中国地磁要素变化:

        中国的地磁要素大致分布情况:国境内地磁强度总量范围0.41~0.60Gauss(1 Gauss = 10^-4T);水平分量Bh由南至北从0.4降至0.21;垂直分量Bz由南至北从-0.1增至0.56;磁倾角I由南至北从-10°增至70°;磁偏角D由东向西从-11°增至5°,零偏线在中国中部偏西处,由北向南经过甘肃的安西以及西藏的得宋。

4、地磁场的一级近似:

对地磁场的一种近似,如下图所示:

不考虑地磁轴与地球自转轴的偏离问题,地磁强度分量可用以下解析式来描述:

其中,东向地磁分量为0;在实际运算中,将磁力计在水平面X、Y轴的测量值,全部投影到北向,并将东向置零。

二、磁力计校准

       根据磁力计轴数的不同,分为不同的校准方法;由于目前市场上主流磁力计均是三轴磁力计,因此本文重点介绍基于椭球拟合的磁力计校准方法。在实际生活中,我们接触最多的是电子罗盘,比如手机中,其内部采用了三轴加速度计和三轴磁力计构成电子罗盘。三轴加速度计用于测量载体的姿态角,用以补偿磁力计的测量值,因此,也就限定了电子罗盘更适合在静止或类静止的条件下进行测量。

       市场上主流磁力计是采用惠斯通桥方式的磁阻元件构成;但是由于制造工艺、PCB贴片及使用环境存在磁场等原因,导致磁力计的输出并不是地磁场的反应值,或多或少的存在一些偏差。通常将影响分为:硬磁和软磁;

  • 硬铁的影响可等价于三轴零位的改变;
  • 软铁的影响等价于三轴标度因数和安装误差的改变;

请注意,磁传感器校准只能补偿手持设备本身产生的硬铁和软铁干扰磁场。 这意味着在校准的整个旋转过程中,硬铁和软铁磁场也会随设备一起旋转!

1

2

3

4

5

6

7

8

9

10

11

12

西

西

西

西

西

西

4

2

0

6

4

2

0

6

2

2

2

6

2

2

2

6

西

0

2

4

6

0

2

4

6

1、十二位置法:

        采用十二位置不对北方法,标定得到在软硬铁影响下的三轴零位、标度因数和安装误差;本质是利用天向磁场。

在加速度计/磁力计标定中,一般采用十二位置标定法,其中十二位置法,包含了了36个轴向,以前上右为载体坐标系;北天东为导航坐标系

以上12位置实验,可以看出:X、Y、Z三轴在每一个方向都存在6次。

2、基于椭球拟合法:

        椭球拟合方法的本质是:逆向处理,将磁力计在无干扰的环境中,在空间中随便旋转,其三轴磁力计所测磁场强度矢量和是定值,也即空间中的表征应该是一个圆心为原点,半径为r的圆球;由于存在硬磁和软磁干扰,导致实际数据的表征为一个椭球面,且存在畸点;将磁力计测量数据经过最小二乘/高斯优化等方法拟合之后,得到椭球拟合参数,将参数进行一定的处理,就可以对硬、软磁影响进行补偿。

椭球校准结果:

 

三、磁航向计算

需要注意的是:计算的磁航向是北偏东为正,角度为【0 360】;同时定义俯仰角抬头为正,横滚角右偏为正;

利用三轴磁力计计算磁航向角主要包括三个步骤:

  • 利用三轴加速度计计算姿态角;
  • 利用姿态角将磁场强度补偿到水平东北方向;
  • 利用tan(y/x)计算航向角;
  • 根据地理位置,查找当地的磁偏角;

1、本文中载体坐标系为右前上;导航坐标系为东北天;

大部分的论文和datasheet都是以前右下、北东地为载体系和导航系;一种最简单的办法就是将右前上坐标轴变为前右下

然后将磁力计测量值以及姿态角进行处理,得到水平“东”“北”方向磁场强度,进而计算磁航向角!

2、按照载体坐标系为右前上;导航坐标系为东北天,重新推导得到计算公式:

(1)计算水平姿态角:      

当把三轴磁力计/加速度计置于水平面时,加速度计三轴敏感值为[0 ; 0; -g];此处及以下计算中,均采用正交化单位值;即在水平面,三轴加速度计(右-前-上放置)敏感值为【0;0 ;-1】;

电子罗盘封装了三轴磁力计和三轴加速度计;此处以电子罗盘代替三轴加速度计进行描述;当把电子罗盘进行三轴旋转时,根据姿态变换矩阵,可以得到旋转后的三轴加速度计输出:

姿态旋转矩阵参考:捷联惯导基础知识解析之一(姿态表示方法基础知识)

如果导航坐标系(以东北天为例)经过三次旋转,旋转顺序为3-1-2,得到载体坐标系;则其表达方式为:

即:0系为导航系、3系为载体坐标系(右前上);即导航系到载体系的方向余弦矩阵:

经过计算得到:

需要注意的点:

(2)计算磁航向角:

    利用椭球拟合的参数,校准三轴磁力计的输出,然后将其归一化;然后根据上一步计算得到pitch和roll,计算水平面内的磁场强度;

即当前经过校正(归一化)三轴磁力计输出为[Mx; My; Mz;]; 此时,三轴磁力计可以是测量任意方向的输出,通过加速度计计算出水平姿态角,然后得到tilt Compensation 后的水平东北向输出

既:(纠正一下,下图中的M东、北这种表述是错的,应该为经过坐标变换之后,水平方向的两个磁场强度;即Mx水平、My水平)

 

 

 

 

 

 

 

参考:

《自主定位定向技术》

《Applications of Magnetoresistive Sensors in Navigation Systems》

《AN3192 Application note 》

《三轴磁阻式传感器标定方法研究》

《一种十二位置不对北的磁罗盘标定方法》

《基于WMM 2005的地磁计算》

ST集成传感器方案实现电子罗盘功能

地磁导航的应用风口来了?

以IndoorAtlas为基础,百度地图将深度整合地磁定位技术

高三物理复习微专题1---《地磁场》

椭球面

作为无人机方面做嵌入式编写的飞控总结5-磁力计对航向角yaw的校准1(磁力计如何校正航向)

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

IMU之磁力计校准&地磁场&计算磁航向 的相关文章

  • 驼峰命名法(CamelCase)和下划线命名法(UnderScoreCase)

    骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起 xff0c 而构成的唯一识别字时 xff0c 第一个单词以小写字母开始 xff1b 从第二个单词开始以后的每个单词的首字母都采用大写字母 xff0c 例如 xff1a myFir
  • 【STM32F10x】二:利用结构体访问外设

    之前了解使用寄存器操作GPIOA口的LED灯亮灭程序 xff0c 原理是将寄存器的地址强制转换成指针形式 xff0c 然后对指针进行操作 这一章尝试通过将外设定义成结构体的形式来操作外设寄存器 本章重点在于理解和使用 lt 结构体 gt 来
  • TortoiseGit 解决冲突(万能方法)

    思路 xff1a 别人提交了代码 xff0c 你改了代码 xff0c 此时 xff0c 如果不更新或者直接提交都会造成冲突 xff0c 所以最好是在不跟新的情况下 xff0c 把冲突解决掉 xff0c 然后提交代码 xff01 1 右键 t
  • 求正整数n所有可能的和式的组合

    求正整数n所有可能的和式的组合 xff08 如 xff1b 4 61 1 43 1 43 1 43 1 1 43 1 43 2 1 43 3 2 43 1 43 1 2 43 2 xff09 首先说一下 xff0c 群里面很多人在问这个东东
  • 根据PCB扫描图反推原理图

    工具 相机 xff08 拍摄电路板正反面 xff0c 记录元器件位置 xff09 扫描仪 xff08 扫描拆掉元器件的电路板 xff0c 作为底图用于对照着绘制PCB xff09 Photoshop xff08 处理扫描出的图片 xff09
  • 链路聚合原理与配置

    文章目录 一 链路聚合简介链路聚合实现条件 二 链路聚合配置三 总结 一 链路聚合简介 链路聚合 xff1a 指将多个物理端口汇聚在一起 xff0c 形成一个逻辑端口 xff0c 以实现出 入流量吞吐量在各成员端口的负荷分担 xff0c 交
  • 防火墙命令

    防火墙命令 https blog csdn net calm programmer article details 124194093 1 查看防火墙的状态 dead代表关闭 running代表已经开启 systemctl status f
  • 国科大机器人作业四:基于线性的扩展卡尔曼滤波器的机器人定位(实验部分)

    文章目录 练习4 xff1a 基于线性的扩展卡尔曼滤波器的机器人定位1 Introduction2 Kalman Filter Localization2 1 状态预测 State Prediction2 2 状态更新 xff1a Stat
  • React - Context的简单使用

    Context 通过组件树提供了一个传递数据的方法 xff0c 从而避免了在每一个层级手动的传递 props 属性 在一个典型的 React 应用中 xff0c 数据是通过 props 属性由上向下 xff08 由父及子 xff09 的进行
  • cppflow加载tensorflow模型

    用tensorflow框架训练的pb模型在C 43 43 环境下使用的时候 xff0c 总是会出现版本不匹配的情况 xff0c 最近在github看到用cppflow来加载 xff0c 不用重新编译tensorflow xff0c 特别是t
  • 书,永远的朋友

    我自己认为我是一个不大喜欢看书的人 xff0c 相对于书 xff0c 我可能跟喜欢看视频和同高手一起讨论交流 但是 xff0c 真正静下心来 xff0c 想着这么多年来 xff0c 对我影响很大的一些书 xff0c 也能想到一些 索性 xf
  • 我的2013

    今天是2013年的最后一天 xff0c 天气格外的晴朗 xff0c 站在公司的写字楼上 xff0c 能够看到远处的山水 一直都习惯在一年的最后总结一下 xff0c 总结自己哪些地方在成长 xff0c 哪些地方有收获 xff0c 哪些地方需要
  • 项目管理中的TR点

    TR的意思是技术评审 xff0c 是英语Technical Review的简写 一般项目管理中有以下一些技术评审点需要关注 xff1a TR1 概念阶段技术评审点 xff1a 产品需求和概念技术评审 xff08 业务需求评审 xff09 T
  • linux ln 命令使用参数详解(ln -s 软链接)

    这是linux中一个非常重要命令 xff0c 请大家一定要熟悉 它的功能是为某一个文件在另外一个位置建立一个同不的链接 xff0c 这个命令最常用的参数是 s 具体用法是 xff1a ln s 源文件 目标文件 当 我们需要在不同的目录 x
  • 别再让C++头文件中出现“using namespace xxx;”

    在这里 xff0c 我毫不回避地说了这句话 xff1a 引用 我再也不想在任何头文件中看到 using namespace xxx 了 作为一个开发者 团队领导者 xff0c 我经常会去招聘新的项目成员 xff0c 有时候也帮助其他组的人来
  • Linux 查看监听端口的方法

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • 一口气说出 OAuth2.0 的四种授权方式

    上周我的自研开源项目开始破土动工了 xff0c 开源项目迈出第一步 xff0c 10 选 1 xff1f 页面模板成了第一个绊脚石 xff0c 密谋很久才付诸行动 xff0c 做这个的初衷就是不想让自己太安稳 xff0c 技术这条路不进步就
  • SVN MERGE 和冲突

    摘要 xff1a 最佳做法是避免冲突 冲突时 xff0c 不要把branch merge到trunk 先由最新版本的trunk得到branch 然后再修改文件 xff0c 直接merge过去就行 这样不会有冲突 先用svn merge dr
  • Linux命令之basename使用

    basename 命令 首先使用 help 参数查看一下 basename命令参数很少 xff0c 很容易掌握 basename help 用法示例 xff1a basename usr bin sort 输出 34 sort 34
  • 各种编码知识简介

    本文主要介绍我们在日常开发中接触到了latin1 xff0c GBK xff0c GB18030 xff0c UTF 8 编码几种 下面首先来看看这几种编码的的区别 latin1 1 先来看看latin1 参考百度百科 Latin1 是IS

随机推荐