ios - 使用磁力计、加速度计和陀螺仪读数的算法找到加速的基本方向

标签 ios iphone math accelerometer gyroscope

我想找到由 iphone 加速的主要方向。我以为我可以只使用加速度计来做到这一点,但是,正如您从下图中看到的那样,加速度计轴是由设备方向定义的。

我想,如果我使用陀螺仪来校正偏航、旋转、旋转,那么我可以获得更准确的读数,而不必在移动过程中将手机保持在同一方向。

但这仍然没有告诉我 iphone 移动的主要方向。为此我还必须使用磁力计。

Accelerometer Axes

谁能告诉我如何使用三个传感器读数来找到加速进入的主要方向?我什至不知道从哪里开始。我什至不知道手机是否以相同的时间速率进行这些测量。

最佳答案

磁力计矢量与“向下”矢量的叉积将得到一个水平的东磁/西磁矢量;由此,第二个叉积得到磁北/南矢量。这是简单的部分。


更难的问题是有效地跟踪“向下”向量。如果随着时间的推移对加速度计进行积分,则可以过滤掉手持移动设备的运动,以获得持续的重力方向。或者,如果您的设备没有同时旋转,您也可以...

这就是速率陀螺仪的​​用武之地:陀螺仪可以让您补偿手持设备的动态旋转,因此您可以实时跟踪您的重力。执行此操作的经典方法称为 Kalman filter ,它可以集成(字面上和比喻上)多个数据源,以评估系统最可能的状态。


卡尔曼滤波器需要您的物理系统和观察它的传感器的数学模型;这些模型中的每一个都必须既准确又“足够线性”,卡尔曼滤波器才能正常工作。碰巧的是,iphone/加速度计/陀螺仪系统实际上是足够线性的。

卡尔曼滤波器同时使用微积分和线性代数,因此如果您自己动手,则需要一定的数学知识。

此外,作为实际问题,您应该了解物理传感器通常具有需要补偿的偏移量——特别是,您需要注意此类惯性导航系统中的速率陀螺仪偏移量,或者您的跟踪器永远不会稳定。这意味着您需要将速率陀螺仪偏移量添加到卡尔曼状态向量和系统模型中。

关于ios - 使用磁力计、加速度计和陀螺仪读数的算法找到加速的基本方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19940762/

相关文章:

ios - 使用辅助功能存储其他信息?

ios - 如何在钛合金 XML 中支持不同的分辨率

iphone - 链接器命令失败,PubNub 库在 swift 和静态框架中

javascript - 给定一台可以一次移动无限球的机器,以最少的移动次数将球从一组桶移动到另一组的算法

c++ - 将一个值限制在一个范围内(某种程度上)

algorithm - 带方向的最近邻算法(左/右/上/下)

ios - 如何在 iOS swift 中使用 sunlubo/SwiftFFmpeg 库?

ios - 迭代结构的静态属性

ios - 从我自己的位图中为 route-me 自定义图 block ?

iphone - iOS 应用程序更新可以停滞到特定日期吗?