Iphone 快速移动后的偏航角漂移

Iphone 快速移动后的偏航角漂移,iphone,ios6,gyroscope,core-motion,Iphone,Ios6,Gyroscope,Core Motion,在我当前的项目中,关于Core Motion的Cmatitude提供的四元数,我遇到了麻烦。我把iphone5(ios6.0.1)放在了一个定义良好的开始位置。然后我开始快速移动设备,就像在快节奏游戏中一样。当我在10-30秒后返回起始位置时,报告的偏航角与起始位置相差10-20度(大部分时间≈11°) 我使用旧的(遗憾的是不再可用)核心运动茶壶样本来验证效果。测井的欧拉角直接从Cmatitude读取: 我在不同工厂不同时间生产的两台不同的iPhone5设备上发现了这一点。但真正奇怪的是,我的

在我当前的项目中,关于Core Motion的Cmatitude提供的四元数,我遇到了麻烦。我把iphone5(ios6.0.1)放在了一个定义良好的开始位置。然后我开始快速移动设备,就像在快节奏游戏中一样。当我在10-30秒后返回起始位置时,报告的偏航角与起始位置相差10-20度(大部分时间≈11°)

我使用旧的(遗憾的是不再可用)核心运动茶壶样本来验证效果。测井的欧拉角直接从Cmatitude读取:

我在不同工厂不同时间生产的两台不同的iPhone5设备上发现了这一点。但真正奇怪的是,我的运行iOS 5.1.1的iPhone4运行正常。在我看来,这似乎是一个iOS错误,我已经提交了一份错误报告,但另一方面,我很难想象还没有人偶然发现它。我怀疑这可能与重新设计的核心运动API有关。从第5版开始,磁强计(指南针)也被考虑用于传感器融合。控制台显示,位置D的偏差估计值提供给CoreMotion:

locationd[41] <Notice>: GYTT inserted: bias,-0.196419,1.749323,-1.828088,variance,0.002644,0.004651,0.002527,temperature,31.554688
locationd[41]:插入的吉特:偏差,-0.196419,1.749323,-1.828088,方差,0.002644,0.004651,0.002527,温度,31.554688
我的问题:当使用设备运动时,是否有机会阻止磁强计读数?我试着停用定位服务,但它不影响核心运动。如果不可能,基于加速度计的重力估计的替代方案/解决方法是什么

PS:由于我们正在处理基于四元数的模型,这与万向节锁无关

编辑:
在进行了更多的测量之后,很明显,只有偏航受到影响。俯仰和滚动显示公差范围内的偏差(不是最终的解决方案,但至少是我自己问题的一个解决方法(我没有回答邀请你)。结果表明,至少
DeviceMotion.gravity
不受该缺陷的影响。因此我决定重新设计运动检测的这个相当简单的部分,并使用
Arcin(gravity.x/| | | gravity | |)
用于在倾斜设备时将主要玩家角色移动到一侧

这绝对是第二个最好的解决方案,因为它会破坏四元数中包含的关于完全旋转状态的信息。出于战略考虑,我决定采用这种方式:

  • 我认为大多数开发人员使用重力向量而不是
    Cmatitude.quaternion
    进行倾斜运动检测,因为大多数人对四元数数学不太感兴趣;-)因此,未来与重力向量相关的任何错误都可能会在beta阶段修复,因为用户数量较多
  • 如果它是一个软件缺陷,与硬件问题无关,那么我假设,如果该缺陷将尽快修复,那么仍然有许多设备可能由于任何原因无法更新。因此,潜在的未来客户遇到问题的风险很小,但>0。因此,次优解决方案有时可能是最好的

  • 我在自己的代码中做了类似的事情,发现了相同的z轴旋转漂移(偏航)。我应用了平衡过滤器。在每个运动管理器时间间隔,我获取当前四元数(z分量)然后将计算后的值保存为oldZ,以便在下一组计算中使用。我的过滤器只是将新的z值与其之前的z值进行平衡,防止其移动过快。根据硬件和程序中的精确公差,您可以通过这种方式很好地管理漂移。您将ee陀螺仪轻微漂移,但随着滤波器继续工作,开始进行校正。我的滤波器看起来像这样,可防止超过0.5度的“杂散”:

    filtZ=0.65*oldZ+0.35*z


    0.65和0.35的值是通过实验确定的,我建议您在有时间的时候使用它们。输出仍将按0-1的比例缩放,然后可以按照您一直使用的方式使用(或重新引入四元数,如果您必须在整个TF中保留所有4维).

    投了赞成票,这是一个有趣的问题!是的,我对磁强计也有不好的经验:它滞后(导致偏差!)而且噪音非常大。我还注意到陀螺很容易饱和,特别是在快速移动的情况下。有没有办法避免饱和的嫌疑?@Ali我不知道怎么办。但另一方面,我的iPhone4在iOS 5.1.1上运行得很好,与之前安装的iOS 4.3一样。这是天方夜谭,但我认为iOS 6是罪魁祸首。我呵呵有人会知道答案的,抱歉我帮不上忙:(现在是2015年9月,我的iPhone 5(2014年购买)仍然存在这个问题)和iOS 8.1。我的猜测是传感器融合算法没有正确过滤陀螺仪,或者陀螺仪本身没有其他iPhone那么好。你的错误报告怎么了?在提交错误报告2个月后,他们回答了“如果设备在移动,我们无法进行陀螺偏差估计。如果设备的偏差校准关闭,则设备在移动时其航向将漂移”。我认为这与传感器融合算法的磁强计部分有关,因为这是校准偏航角的唯一方法。
    locationd[41] <Notice>: GYTT inserted: bias,-0.196419,1.749323,-1.828088,variance,0.002644,0.004651,0.002527,temperature,31.554688