用iPhone 4上的陀螺仪补偿指南针滞后

我一直在iPhone 4上进行罗盘和陀螺仪的试验,并希望得到一些帮助。 我想用陀螺仪的数据补偿指南针的慢度。

使用CMMotionManager及其CMDeviceMotion对象( motionManager.deviceMotion ),我得到CMAttitude对象。 纠正我,如果我错了(请),但这是我从CMAttitude对象的yaw属性(我不需要pitchroll为我的目的)推断:

  • 当手机朝下(如deviceMotion.gravity.z )和逆时针摆动时, yaw范围从0PI当顺时针摆动时, 0deviceMotion.gravity.z
  • 当设备向上时, yaw范围从-PI0PI0
  • 并从指南针数据(我使用locationManager.heading.magneticHeading ),我看到指南针给出的值从0360 ,顺时针方向摆动

好的,所有这些信息一起使用,我可以得到一个我称之为horizontal的值,无论设备是向上还是向下,都会给出从0360值,当设备顺时针摆动(尽pipe当deviceManager.gravity.z0左右时,我仍然遇到了麻烦 – yaw值在这个gravity.z值处出现deviceManager.gravity.z )。

在我看来,我可以使用计算出的horizontal值映射到magneticHeading ,“同步” horizontalmagneticHeading值,当我觉得指南针“已经卷入”时,将horizontal值“同步”到magneticHeading

所以我的问题:

  • 我在这个正确的轨道?
  • 我是否正确使用CMDeviceMotion的陀螺仪数据,以及上面列出的假设是否正确?
  • gravity.z0左右时,为什么可能会gravity.z呢?

非常感谢你。 我期待听到你的答案!

只是想回答…纠正我,如果我错了..

1.你是否在正确的轨道上

2. CM中的引力已经与用户引力(用户加速引起的引力值)“隔离”,这就是为什么有两个引力,“引力”和“用户加速度”对苹果CM文档//注意:不完全隔离//

3.如果你有一个重力0意味着相应的轴与重力垂直。 gravity.z是iPhone的屏幕,这就是为什么-9.82m / s2,如果你把桌上的屏幕直立,实际上很难得到0或重力的最大值由于传感器噪声(这是正常的,所有的传感器有一个噪音特别便宜的传感器)。

我在应用程序上做的是我将把参考轴切换到其他轴(在你的情况下可能是x或y)某些限制,策略如何取决于目的或哪一方是你的参考。

另一件事是,陀螺是快速但不稳定,你需要重新校准值的几个区间。 在我的情况下,每5秒。 我已经用陀螺仪来计算两架飞机之间的angular度了,我用90度的直尺试了一下,每秒钟会有0.5度左右的误差,不断增加,但那是我的,也许别人有更好的方法来避免错误。

下面是我的步骤“

  1. 在里面
  2. 读重力XYZ – > Xg Yg Zg
  3. 检查Xg <0.25如果TRUE尝试Yg然后Zg //注1 = 1g = 9.82 m / s ^ 2
  4. 阅读指南针和陀螺仪
  5. 使用指南针configuration和校准陀螺仪,并根据我在第3点使用的轴进行校准。
  6. 如果5秒通过,则重新校准,阅读指南针
  7. 如果与陀螺仪读数的差值大于5度,则跳过陀螺仪的重新校准。
  8. 如果与陀螺仪读数的差值<5度,则使用罗盘值校准陀螺仪

注意:对于7号机:是检查手机是否受到磁场的影响,或者接近巨大的钢铁或高压电线,或者在厂内嘈杂重重的设备上。

这就是所有…希望这可以帮助你…对不起,我的英语..

这里是一个iPhone应用程序的例子,其中指南针得到陀螺仪补偿。 代码和项目可以在这里看到: http : //www.sundh.com/blog/2011/09/stabalize-compass-of-iphone-with-gyroscope/

在零重力(或自由落体,或足够接近)时,偏航轴vector的方向是不确定的。

为了在运动中进行同步,您需要为您的“水平”值创build一个filter,该filter具有与磁罗盘相同的滞后/延迟响应特性。 要么这样,要么等到运动停止足够长的时间,以便两个值在重新计算偏移量之前解决。

对问题1的回答是“是”,问题2你在正确的轨道上,但是你可以使用一个不是“水平”的variables名称,问题3由hotpaw2回答,并且在接近零高度的菜刀或直升机中的偏航将警报飞行员报警。 由于软件的一部分是本地的,还有一些时间滞后,还有其他一些因素可能会降低速度,包括访问传感器检测磁波,设备的位置和方向,为指南针显示准备graphics输出,计算和输出来自陀螺仪和传感器的数据通过相对较慢的接口,使用通用手持设备而不是针对所要求的任务types而定制devise的。

Interesting Posts