如何使用陀螺仪和磁力计计算航向

Posted

技术标签:

【中文标题】如何使用陀螺仪和磁力计计算航向【英文标题】:How to calculate Heading using Gyro and magnetometer 【发布时间】:2016-05-05 19:36:47 【问题描述】:

我有陀螺仪和磁力计的原始数据。根据这些数据,我必须以 1Deg 的精度计算 Heading 信息。

我想知道,是否有任何算法可以帮助我使用具有上述准确性的可用信息来获取航向信息?

任何文章或任何链接也会有所帮助。

谢谢

【问题讨论】:

*** 不是为您搜索/编写代码,而是解决您在 [现有] 代码中遇到的问题。向我们展示您迄今为止尝试过的内容,这里的程序员将能够为您提供帮助,否则我只能建议您search with google(或仅查看相关部分下的侧边栏)并停止浪费我们正在寻找你 当前形式的问题过于宽泛。你尝试过什么算法,你到底在哪里卡住了?请注意,对场外资源的请求在这里被视为离题。 查看Phone的motion API返回的偏航 【参考方案1】:

我假设您正在使用电话收集 gyroscope+magnetometer 数据。

除非您知道设备的初始状态,否则您无法使用 Gyro+Magnetometer 计算航向。您必须尝试Accelerometer+Magnetometer。您可以从 android/ios 设备的 Motion sensor API 中的 rotation-matrix' oryaw` 组件获取航向值。

如果您想实现自己的倾斜补偿算法。您所要做的就是使用accelerometermagnetometer 实现倾斜补偿电子罗盘。您会在设备框架中获得 accelerometermagnetometer 读数。 AccelerometerMagnetometer 提供读数作为设备旋转的函数。该旋转包含设备的滚动、俯仰和航向信息。以下是使用accelerometer+magnetometer进行航向估计的解释和推导。


Tilt compensation algorithm

accelerometermagnetometer给你

读数。它们在设备框架中,设备旋转通过

.

您正在寻找的方向。所以设备的旋转矩阵将是

我们必须解决。所以一步一步解决。

从上面,我们得到等于零

从上面有

这是从accelerometer+magentomete 获取Heading 值的基本方法。偏航/航向值由手机中的运动传感器 API 提供。

在实现sensor-fusion 算法时,您必须注意一些事项。 Accelerometers 并不总是重力方向,它给出了传感器所经历的总体加速度的方向,例如线性加速度下的设备。 Magnetometer 读数会因附近的铁磁物质而失真。精度也取决于gyroscope 传感器中的系统偏置分量。

有多种算法可以估算准确的航向值。其中一些是

Madgwick AHRS 互补过滤器 卡尔曼滤波器 Compensation of Magnetic Disturbances,这个算法的结果最好。

【讨论】:

感谢您的详细回答。我忘了在我的问题中提及我的申请。我的申请与航空领域有关。我的磁力计将位于飞机垂直尾翼上。我也会尝试这种方法 @Pratik 如果磁力计位于飞机尾翼上,请检查磁力计读数一次。如果传感器不能自行校准,您必须在使用前校准保持磁力计。

以上是关于如何使用陀螺仪和磁力计计算航向的主要内容,如果未能解决你的问题,请参考以下文章

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

计算四轴飞行器的航向值

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

陀螺仪加速计磁力计等传感器汇总

将 Arduino 指南针信号转换为可用航向

MEMS加速度计 MEMS陀螺仪有啥区别