我一直在尝试使用iPhone 4上的指南针和陀螺仪,并希望有人能帮我解决一个问题。我想通过使用陀螺仪的数据来弥补指南针速度慢的问题。
使用 CMMotionManager
及其 CMDeviceMotion
对象 (motionManager.deviceMotion
),我获取到了 CMAttitude
对象。请纠正我如果我错了 (请) ,但这是我从 CMAttitude
对象的 yaw
属性中推断出来的内容(我不需要 pitch
和 roll
):
- 当手机向下指时(被
deviceMotion.gravity.z
指示),并逆时针摆动时,yaw
的范围从0
到PI
,而顺时针摆动时则从0
到-PI
- 当设备朝上时,
yaw
范围从-PI
到0
和从PI
到0
- 从指南针数据中(我使用
locationManager.heading.magneticHeading
),我看到指南针在摆动顺时针方向时的值从0
到360
,随着摆动而增加
好的,现在我将所有这些信息整合在一起,能够得到一个我称之为 horizontal
的值,无论设备是朝上还是朝下,都会给出从 0
到 360
的值,并且当设备逆时针摆动时会增加(尽管在 deviceManager.gravity.z
大约为 0
时仍然存在问题 -- yaw
值在这个 gravity.z
值处失控)。
我认为我可以通过计算得出一个映射到磁北极方向的“水平”值,并将“水平”值“同步”到磁北极方向上,当我感觉罗盘已经“追上”时,将“水平”值同步到磁北极方向上。
所以我的问题是:
- 我这样做是否正确?
- 我是否正确地使用了
CMDeviceMotion
的陀螺仪数据和我列出的假设? - 为什么当
gravity.z
在约等于0
时,yaw
会出现异常?
非常感谢。期待您的回答!