使用 iPhone 4 上的陀螺仪补偿指南针滞后
-
26-09-2019 - |
题
我一直在 iPhone 4 上试验指南针和陀螺仪,并希望获得一些帮助来解决我遇到的问题。我想通过使用陀螺仪的数据来补偿指南针的缓慢。
使用 CMMotionManager
和它的 CMDeviceMotion
目的 (motionManager.deviceMotion
),我得到 CMAttitude
目的。如果我错了请纠正我(请),但这是我从 CMAttitude
对象的 yaw
财产(我不需要 pitch
也不 roll
为了我的目的):
yaw
范围从0
到PI
当手机朝下时(如deviceMotion.gravity.z
) 并逆时针摆动0
到-PI
当顺时针摆动时- 当设备指向上方时,
yaw
范围从-PI
到0
和PI
到0
, , 分别 - 和来自指南针数据(我正在使用
locationManager.heading.magneticHeading
),我看到罗盘给出的值来自0
到360
, ,顺时针摆动时数值增大
好吧,所以综合使用所有这些信息,我能够得到一个我称之为的值 horizontal
无论设备朝上还是朝下,都会给出以下值 0
到 360
并在设备顺时针摆动时增加(尽管我仍然遇到麻烦 deviceManager.gravity.z
就在附近 0
- 这 yaw
价值对此感到震惊 gravity.z
价值)。
在我看来,我可以“同步” horizontal
和 magneticHeading
值,使用计算的 horizontal
映射到的值 magneticHeading
, ,并“同步” horizontal
价值 magneticHeading
当我感觉指南针已经“跟上”时。
所以我的问题是:
- 我的做法正确吗?
- 我使用的陀螺仪数据来自
CMDeviceMotion
正确并且我上面列出的假设正确吗? - 为什么可能
yaw
吓坏了gravity.z
就在附近0
?
非常感谢。我期待听到您的答案!
解决方案
只是想回答...如我错了请纠正我..
1.是的,你走在正确的道路上
2. CM中的重力已经与用户重力(由用户加速引起的重力值)“隔离”,这就是为什么在Apple CM文档上有两个重力,“重力”和“ userAcceleration”。不完全孤立 //
3.如果重力为 0,则意味着相应的轴与重力垂直。gravity.z是iPhone屏幕,这就是为什么如果你把屏幕直立放在桌子上,它是-9.82m/s2,实际上由于传感器噪音,很难得到0或重力最大值(这是正常的,所有传感器都有一个噪音特别便宜的传感器)。
我在我的应用程序上所做的是将我的参考轴切换到其他轴(在您的情况下可能是 x 或 y)以达到某些限制,策略的方式取决于目的或哪一侧是您的参考。
另外,陀螺仪速度快,但不稳定,需要每隔一段时间重新校准一次。就我而言,每 5 秒一次。我已经尝试用陀螺仪来计算两个平面之间的角度,我尝试使用精确的 90 度标尺,它会每秒给出约 0.5 度的误差,并不断增加,但那是我的,也许其他人有更好的方法来避免错误。
以下是我的步骤“
- 在里面
- 读取重力 XYZ -> Xg Yg Zg
- 检查 Xg < 0.25 如果为 TRUE,则尝试 Yg,然后 Zg // 注意 1 = 1g = 9.82 m/s^2
- 读取指南针和陀螺仪
- 使用指南针配置和校准陀螺仪,并根据我在第 3 点中使用的轴进行计算。
- 如果超过 5 秒则重新校准,读取指南针
- 如果与陀螺仪读数的差异 > 5 度,请跳过重新校准陀螺仪。
- 如果与陀螺仪读数的差异 < 5 度,请使用罗盘值校准陀螺仪
笔记:对于 7 号:是检查手机是否受到磁场影响或靠近大型钢铁或高压电线或工厂噪音和重型设备。
就这样...希望这可以帮助你...对不起我的英语..
其他提示
以下是 iPhone 应用程序的示例,其中指南针通过陀螺仪进行补偿。代码和项目可以在这里看到:http://www.sundh.com/blog/2011/09/stabalize-compass-of-iphone-with-gyrscope/
当处于零重力(或自由落体,或足够接近)时,偏航轴矢量的方向是不确定的。
为了在运动中进行同步,您需要为“水平”值创建一个滤波器,该滤波器具有与磁罗盘相同的滞后/延迟响应特性。或者,或者等到运动停止足够长的时间以使两个值稳定后再重新计算偏移。
问题 1 的答案是“是”,问题 2 您处于正确的轨道上,但您可以使用非“水平”的变量名称,问题 3 由 hotpaw2 回答,并且直升机或直升机在接近零高度的偏航也会发出警报飞行员发出警报。存在时间滞后,因为部分软件是本地的,而其他因素可能会减慢速度,包括访问用于检测磁波的传感器、设备位置和方向、为罗盘显示准备图形输出、计算和输出使用通用手持设备通过相对较慢的接口来自陀螺仪和传感器的数据,该设备不是针对所要求的任务类型定制设计的。