在iPhone 4上使用陀螺仪补偿罗盘延迟

don*_*kim 30 iphone ios iphone-4 gyroscope compass-geolocation

我一直在试验iPhone 4上的指南针和陀螺仪,并希望得到一些我正在解决的问题的帮助.我想通过使用陀螺仪的数据来弥补指南针的缓慢.

使用CMMotionManager和它的CMDeviceMotionobject(motionManager.deviceMotion),我得到了CMAttitude对象.如果我错了(请),请纠正我,但这是我从CMAttitude对象的yaw属性中推断出来的(我不需要pitch也不是roll为了我的目的):

  • yaw范围从0PI当手机正在指向下方(由所指示的deviceMotion.gravity.z)和逆时针方向摆动,并0-PI顺时针方向摆动时
  • 当设备指向上方时,yaw范围分别为-PIto 0PIto0
  • 和从罗盘数据(我使用locationManager.heading.magneticHeading),我看到罗盘给出了从值0360与值顺时针摆动时增加

好吧,所以一起使用所有这些信息,我能够得到一个我称之为的值horizontal,无论设备是向上还是向下,都会给出值0,360并在设备顺时针摆动时增加(尽管我我在deviceManager.gravity.z周围时仍然遇到麻烦0- yaw价值在这个gravity.z价值上变得非常惊人).

在我看来,我可以使用映射到的计算值"同步" horizontalmagneticHeading值,并在我感觉指南针"赶上"时"同步"该值.horizontalmagneticHeadinghorizontalmagneticHeading

所以我的问题:

  • 我是否在正确的轨道上?
  • CMDeviceMotion是否正确使用陀螺仪数据并且上面列出的假设是正确的?
  • 为什么yawgravity.z周围时可能会感到害怕0

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

Fer*_*Htw 21

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

你是走在正确的轨道上

2. CM中的重力已经与用户重力(由用户加速引起的重力值)"隔离",这就是为什么有两个重力,"重力"和"userAcceleration"它在苹果CM文档上//注意:并非完全孤立//

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

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

另一件事是,陀螺仪速度快但不稳定,需要重新校准几个间隔的值.在我的情况下每5秒.我试验陀螺用于计算两个平面之间的角度,我尝试使用90度标尺并且每秒钟会产生大约0.5度的误差并且不断增加,但那是我的,也许其他人有更好的方法来避免错误.

下面是我的步骤"

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

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

多数民众赞成...希望这可以帮到你......对不起我的英语..


Ell*_*n S 10

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