在iPhone4上使用陀螺仪补偿罗盘滞后
我一直在iPhone4上试用指南针和陀螺仪,希望能对我遇到的问题提供帮助。我想用陀螺仪的数据来补偿指南针的慢度 使用在iPhone4上使用陀螺仪补偿罗盘滞后,iphone,ios,compass-geolocation,iphone-4,gyroscope,Iphone,Ios,Compass Geolocation,Iphone 4,Gyroscope,我一直在iPhone4上试用指南针和陀螺仪,希望能对我遇到的问题提供帮助。我想用陀螺仪的数据来补偿指南针的慢度 使用CMMotionManager及其CMDeviceMotion对象(motionManager.deviceMotion),我获得CMAttitude对象。如果我错了,请纠正我(请),但以下是我从CMAttitude对象的yaw属性(我不需要pitch也不需要roll)中得出的结论: 当手机朝下(如设备运动.gravity.z所示)并逆时针摆动时,偏航范围从0到PI,顺时针摆动时
CMMotionManager
及其CMDeviceMotion
对象(motionManager.deviceMotion
),我获得CMAttitude
对象。如果我错了,请纠正我(请),但以下是我从CMAttitude
对象的yaw
属性(我不需要pitch
也不需要roll
)中得出的结论:
当手机朝下(如
所示)并逆时针摆动时,偏航范围从设备运动.gravity.z
到0
,顺时针摆动时,偏航范围从PI
到0
-PI
- 当设备朝上时,
范围分别为偏航
到-PI
和0
到PI
0
- 从指南针数据(我使用的是
),我看到指南针给出的值从locationManager.heading.MagneticheReading
到0
,顺时针摆动时值会增加360
0
到360
的值,当设备顺时针旋转时,该值会增加(尽管当deviceManager.gravity.z
在0
附近时,我仍然有问题,yaw
值在此gravity.z
值处出现异常)
在我看来,我可以使用映射到magnetichereading
的计算出的水平值,将水平和磁读数
值“同步”到水平磁读数
,当我感觉指南针“赶上”时
所以我的问题是:
- 我做得对吗
- 我是否正确使用了
CMDeviceMotion
中的陀螺仪数据,并且上面列出的假设是否正确
- 当
gravity.z
在0
附近时,yaw
为什么会发疯
非常感谢。我期待着听到您的回答!当处于零重力(或自由落体,或足够近)时,偏航轴矢量的方向未定义
为了在运动中进行同步,您需要为“水平”创建一个过滤器具有与磁罗盘相同的滞后/延迟响应特性的值。要么如此,要么等待运动停止足够长的时间,以使两个值都稳定下来,然后再重新计算偏移量。问题1的答案是肯定的,问题2您在正确的轨道上,但您可以使用非“水平”的变量名,问题3是answehotpaw2显示红色,直升机或直升机在接近零高度时出现偏航,将向飞行员发出警报。由于部分软件是本地的,因此存在时间延迟,而其他因素可能会使其减速,包括使用传感器检测磁波、设备位置和方向、准备图形输出对于罗盘显示,使用一个通用手持设备,而不是为所要求的任务类型定制的,通过一个相对缓慢的界面计算和输出陀螺和传感器的数据。只是试图回答…如果我错了,请纠正我
是的,你在正确的轨道上
2.CM中的重力已经与用户重力“隔离”(重力值由用户加速度引起),这就是为什么apple CM文档中有两个重力,“重力”和“用户加速度”
//注:未完全隔离//
三,。
如果重力为0,则表示相应的轴与重力垂直。
重力.z是iPhone的屏幕,这就是为什么它-9.82m/s2,如果你把屏幕直立放在桌子上,由于传感器噪音,实际上很难得到重力的0或最大值(这是正常的,所有传感器都有噪音,特别是便宜的传感器)
我在我的应用程序上所做的是,我会将我的参考轴切换到另一个轴(在您的情况下,可能是x或y轴),以满足某些限制,策略如何取决于目的或您的参考方向
另一件事是,陀螺仪很快,但不稳定,你需要每隔几秒钟重新校准数值。在我的例子中,每5秒钟。我用陀螺仪计算两个平面之间的角度,我用90度尺试了试,它每秒会给出0.5度的误差,试着继续增加,但那是我的,也许不是她有更好的方法来避免错误
以下是我的步骤“
初始化
读取重力XYZ->Xg Yg Zg
检查Xg是否<0.25如果为真,则尝试Yg然后Zg//注意1=1g=9.82 m/s^2
读指南针和陀螺仪
使用罗盘配置和校准陀螺仪,并根据我在第3点中使用的轴进行计算
如果超过5秒,则重新校准,读取指南针
如果与陀螺仪读数的差值大于5度,则跳过陀螺仪的再校准
如果与陀螺仪读数的差值小于5度,则使用罗盘值校准陀螺仪
注:对于数字7:是为了检查手机是否受到磁场的影响,或是否靠近巨大的钢铁或高压电线,或是否在工厂的噪音和重型设备中
就这些…希望这能帮助你。。。
对不起,我说的是英语。这是一个iPhone应用程序的示例,其中指南针通过陀螺仪得到补偿。代码和项目可以在这里看到:
对于初始化步骤,请确保提示用户停止一段时间。如果您的应用程序不会遇到钢铁或电力,请跳过步骤7,以我的情况为例,我需要它