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