目录
文章目录
- 目录
- 前言
- 地磁场和航向角
-
- 磁场干扰
- 磁场校准
- 椭球拟合算法
- `HMC5883L`三轴数字罗盘
-
- 寄存器简介
- 总结
- 链接地址
前言
博主从来没有研究过磁力计,拿到了一块HMC5883L
记录盲整磁力计的知识。也是对自己理解的梳理。
地磁场和航向角
地球的磁场像条形磁体一样由磁南极指向磁北极。磁场垂直于当地的水平面,平行于赤道磁场和当地的水平面,因此向北半球的磁场倾斜。用于测量磁感应强度的单位是Tesla
或者Gauss
(1Tesla=10000Gauss
)。随着地理位置的不同,地磁场的强度通常是0.4-0.6Gauss
。需要注意的是, 地磁场是一个矢量。对于固定位置,该矢量可分解为两个与当地水平面平行的重量和一个垂直于当地水平面的重量。如果电子罗盘与当地水平面平行,则罗盘中的磁力计对应于这三个重量。 事实上,对于水平方向的两个重量,它们的矢量总是指向磁北。罗盘中的航向角是方向和磁北的夹角,当罗盘水平旋转时,航向角为0°~360°之间变化。
**博主记:**我们知道,在磁罗盘的实际应用中,磁力计的安装是固定的,也就是说,我们可以知道某一点的磁场强度方向是固定的。此时,如果我们旋转磁力计,我们将得到磁场X,Y,Z
这三个重量对应于磁力计上标记的三个重量X,Y,Z
方向(理论上可以称为方向)机体坐标系
),事实上,如果我们想测量偏航角,我们需要对应地面坐标系,即有一个机体坐标系
到地面坐标系
转换过程。
磁场干扰
- 硬磁干扰
"Hard iron" error caused by materials fixed to the vehicle body that produce static magnetic fields.
硬磁干扰是指固定在磁力计所在机体表面物质产生的固定方向的干扰。硬磁干扰会导致磁力计收集的数据形成的球偏离球心。 - 软磁干扰
"Soft iron" error caused by materials fixed to the vehicle body that distort magnetic fields.
软磁干扰是指固定在磁力计所在体表面物质产生的混乱磁场干扰,即磁场干扰的方向不固定。软磁干扰会导致磁力计收集的数据形成的球变成椭球。
磁场校准
由于磁场干扰,我们实际测量的磁计数据不准确,需要校准才能使用。本文转载了一篇糟糕的文章:磁计的基本工作原理描述了磁计校准的一些方法和原理。由于工作原因,博客需要更好地校准,因此使用椭球拟合算法进行校准。以下内容APM
校准过程介绍: `
- This is done by taking a set of samples that are assumed to be the product
- of rotation in earth’s magnetic field and fitting an offset ellipsoid to
- them, determining the correction to be applied to adjust the samples into an
- origin-centered sphere. ` 通过获取一系列磁力计在地磁场中旋转的数据,拟合一个偏移的椭球。然后通过校准获得球心原点的球体进行校准。
椭球拟合算法
博主挣扎了几天,没有在网上找到合适的椭球拟合现成代码。在大神的帮助下,找到了pixhawk
椭球校准中的代码。 注意:博主什么都不知道,想尝试移植APM
椭球拟合代码只能说mmp!还是参考pixhawk
代码合理!
注:在磁力计校准中,我们可以使用以下方法来判断磁力计的当前状态是否正确:
1.当磁力计X轴指向正北时,磁力计寄存器X轴应输出最大值;当磁力计X轴指向正南时,X轴应有最小值。 2. 当磁力计的Y轴指向正北时,磁力计的寄存器Y轴应输出最小值;当磁力计的X轴指向正南时,Y轴应有最大值。
HMC5883L
三轴数字罗盘
详细的参考《HMC5883L中文规格书.pdf》,主要特点:
- 自测:为了检测
HMC5883L
传感器内部是否能产生标准磁场进行自测。 - 可通过控制装置IIC实现总线。
寄存器简介
- 配置寄存器A(地址:0x00) 配置寄存器用于配置设置的数据输出速率和测量配置。
- 配置寄存器B(地址:0x01) 配置寄存器B设置装置的增益。
- 模式寄存器(地址:0x02) 用于设置设备的操作模式的模式寄存器
- X寄存器的数据输出A(地址:0x03)和B(地址:0x04) X寄存器A和数据输出B它们都是8位寄存器。其中,数据输出X寄存器A中存储测量结果
MSB
(高位数据),数据输出X寄存器B存储测量结果的LSB
(低位数据)。存储在这两个寄存器中的值为16位二进制补码形式数据,范围为0xF800~0x07FF
。 - Y寄存器的数据输出A(地址:0x07)和B(地址:0x08) Y寄存器A的数据输出B它们都是8位寄存器。数据输出Y寄存器A中存储测量结果
MSB
(高位数据),数据输出Y寄存器B存储测量结果LSB
(低位数据)。存储在这两个寄存器中的值为16位二进制补码形式数据,范围为0xF800~0x07FF
。 - Z寄存器的数据输出A(地址:0x05)和B(地址:0x06) 数据输出Z寄存器A和B它们都是8位寄存器。其中,数据输出Z寄存器A中存储测量结果
MSB
(高位数据),数据输出Z寄存器B存储测量结果LSB
(低位数据)。存储在这两个寄存器中的值为16位二进制补码形式数据,范围为0xF800~0x07FF
。
博主记:特别要注意数据输出Y寄存器(0x07和0x数据输出Z寄存器(08)x05和0x06)地址。博主在这个地方坑,校准的偏航角一直计算错误,曾经怀疑是椭球拟合代码。事实上,最绝望的是编译通过后,结果是错误的,完全不知道问题出在哪里!曾经怀疑狗(程序员)出生了!
总结
以上是博主磨了几天后的一些理解,可能还是不完全正确。如果有不正确的地方,请给我一些建议!