使用原始加速度计和磁力计数据计算磁航向

Posted

技术标签:

【中文标题】使用原始加速度计和磁力计数据计算磁航向【英文标题】:Calculating magnetic heading using raw accelerometer and magnetometer data 【发布时间】:2011-03-08 10:47:53 【问题描述】:

我有一个加速度计和磁力计,每个都产生原始 X、Y 和 Z 读数。由此我需要确定一个物体的磁航向。

我不太擅长三角,但我整理了一个公式,它确实对设备的旋转做出了很好的反应,但也对人们认为不相关的运动做出了反应,例如倾斜设备以不影响指向的方向的方式。例如将其平放并“滚动”设备。

我认为计算磁航向的公式很好,但我认为我输入的俯仰和滚动弧度是错误的。

所以我想我的问题的核心(除非有人真的有一个公式可以做到这一点),是如何使用加速度计计算角度,以弧度为单位进行俯仰和滚动。

其次,任何有关标题公式本身的信息都会很棒。

【问题讨论】:

您要计算什么标题,以及相对于哪个对象?我可以假设您在谈论电话吗? 【参考方案1】:

根据您的应用程序要求的准确性,您可能需要解决几个问题:

    加速度计轴是否已校准?我见过 MEM 加速度计的轴不相互垂直,并且每个轴的响应特性明显不同(通常 X 和 Y 会匹配,Z 会不同)。您需要从设备提供的任何物理读数中合成理想的 XYZ 轴。 (谷歌“加速度计校准”。)

    磁力计轴是否已校准?与上述类似的问题,除了更难检查:很难产生均匀的校准磁场。如果您使用环境地磁场,则需要仔细控制工作环境和工具的局部磁场。 (谷歌“磁力计校准”。)

    在单独校准加速度计和磁力计之后,它们的轴需要相互校准。由于这两种器件通常都焊接到 PCB 上,因此几乎可以保证存在明显的错位。在许多情况下,电路板布局和设备参数甚至可能不允许 XYZ 轴相互对应!从实验室的角度来看,这可能是最难做到的部分,因此我建议您使用具有这两种传感器并且已经校准的其他硬件(例如 iPhone 或 android 手机 - 但先验证设备)进行直接比较采用)。通常,这是通过调整之前的两个校准矩阵来完成的,直到它们生成彼此正确对齐的向量。

    只有在生成相互校准的磁矢量和加速度计矢量后,才能应用其他受访者建议的解决方案。

我只描述了静态解决方案,其中磁力计和加速度计相对于当地的重力和磁场都是静止的。如果您需要在系统快速移动时实时生成响应,则需要考虑每个传感器的时间行为。有两种基本方法可以做到这一点:1)对每个传感器应用时域滤波器,以便它们的输出共享一个公共时域(通常会增加一些延迟)。 2) 使用预测模型实时修改传感器输出(延迟更少,但噪音更大)。

我已经看到用于此类应用的卡尔曼滤波器,但在矢量域中应用它们可能需要使用四元数而不是欧拉矩阵。四元数在计算上更容易使用(与矩阵相比需要更少的操作),但我发现它们更难理解和正确。

或者,您可以选择一条完全不同的路径,并使用统计和数据拟合来一步完成上述所有工作。考虑如下问题:给定 6 个输入值(XYZ 均来自未校准的磁力计和加速度计)和对设备的引用(假设它是手持的,并且外壳上有一个箭头),输出一个表示表壳上的箭头所指的磁力轴承,以及箭头相对于重力矢量的高度(表壳的倾斜度)。

使用经过校准的参考设备(如上所述),将其与要校准的设备配对,并在设备处于不同方向时采集数百个数据点。然后使用 Matlab、MathCAD、R 或 SciPy 等强大的数学软件包来设置和求解非线性方程以创建变换矩阵。

【讨论】:

PS:我使用了一个廉价的计算机化望远镜底座来完成最后一部分:手动操作是不可行的。【参考方案2】:

我会指向Euler Angles 和Roll Pich Yaw。

【讨论】:

【参考方案3】:

你没有考虑足够的维度。这将是仅二维的答案,如果您能找到一种方法来确保“Z”始终与重力对齐,那么它会非常有用。

int heading=180-atan2(mag_datX, mag_datY)/0.0174532925; // 0/359=N, 90=E, 180=S, 270=W 

(如果您直接从设备读取 - 请注意它可能返回 X、Z、Y - 而不是 X、Y、Z!)

但是 - 这不是 2D 罗盘问题 - 想象一下,您将罗盘的针取出,平衡它以使重力在保持它“水平”方面不起作用,你会发现那个“北”会指向上方或下方——取决于你在地球上的哪个位置(或者,如果在两极,直接向上或向下!)。

因此您需要尝试从所有 3 个值中计算三维向量 - 这是一个矩阵运算。

【讨论】:

以上是关于使用原始加速度计和磁力计数据计算磁航向的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 上查找指南针方向

基于磁力计和陀螺仪的北向计算

三轴速率陀螺装在俯仰轴上,怎么计算方位速率

来自智能手机的后处理传感器读数 - 从磁力计计算的重力

智能手机GPS定位算法研究

扩展卡尔曼滤波器磁力计偏航漂移