我一直在用 iPhone 4 上的指南针和陀螺仪进行试验,并希望对我遇到的问题有所帮助。我想通过使用来自陀螺仪的数据来补偿罗盘的缓慢。
使用CMMotionManager和它的CMDeviceMotion对象(motionManager.deviceMotion),我得到了CMAttitude对象。如果我错了(请)纠正我,但这是我从CMAttitude对象的yaw属性中推断出来的(我不需要,也不需要pitch)roll:
yaw范围从0到PI手机指向下方(如 所示deviceMotion.gravity.z)并逆时针摆动0到 到-PI顺时针摆动- 当设备指向上方时,
yaw范围分别为-PIto0和PIto0 - 从罗盘数据(我正在使用
locationManager.heading.magneticHeading),我看到罗盘给出的值从0到360,顺时针摆动时值增加
好的,所以将所有这些信息结合在一起,我可以得到一个我称之为的值horizontal,无论设备是向上还是向下,都会在设备顺时针摆动时给出从0to和增加的值(尽管我360我仍然遇到麻烦-价值deviceManager.gravity.z在这个价值上吓坏了)。0yawgravity.z
在我看来,我可以使用映射到的计算值“同步”horizontal和值,并在我感觉指南针“赶上”时“同步”该值。magneticHeadinghorizontalmagneticHeadinghorizontalmagneticHeading
所以我的问题:
- 我在正确的轨道上吗?
- 我
CMDeviceMotion是否正确使用了陀螺仪数据并且我上面列出的假设是否正确? - 为什么在附近
yaw时会吓坏?gravity.z0
非常感谢。我期待听到你的回答!