【发布时间】:2012-11-16 18:52:07
【问题描述】:
在我当前的项目中,我遇到了关于 Core Motion 的 CMAttitude 提供的四元数的问题。我将 iPhone 5 (iOS 6.0.1) 放在了一个明确的起始位置。然后我开始像在快节奏游戏中一样快速移动设备。当我在 10-30 秒后返回起始位置时,报告的偏航角与起始位置相差 10-20 度(大部分时间 ≈11°)。
我使用旧的(遗憾的是不再可用)Core Motion Teapot 样本来验证效果。记录的欧拉角直接从 CMAttitude 读取:
NSLog(@"pitch: %f, roll: %f, yaw: %f", attitude.pitch * 180 / M_PI, attitude.roll * 180 / M_PI, attitude.yaw * 180 / M_PI);
我在不同工厂在不同时间生产的两种不同的 iPhone 5 设备上发现了这一点。但真正奇怪的是,我的 运行 iOS 5.1.1 的 iPhone 4 运行正常。在我看来,这是一个 iOS 错误,我已经提交了错误报告,但另一方面,我很难想象没有人偶然发现它。我怀疑这可能与重新设计的 Core Motion API 有关。从版本 5 开始,磁力计(罗盘)也被考虑用于传感器融合。控制台显示来自位置的偏差估计被提供给 CoreMotion:
locationd[41] <Notice>: GYTT inserted: bias,-0.196419,1.749323,-1.828088,variance,0.002644,0.004651,0.002527,temperature,31.554688
我的问题:使用 Device Motion 时是否有机会阻止磁力计读数?我尝试停用定位服务,但它不影响 Core Motion。如果不可能,有什么替代/解决方法,基于加速度计的重力估计?
PS:因为我们正在处理基于四元数的模型,所以这与 Gimbal Lock不相关
编辑: 在进行更多测量之后,似乎很明显只有偏航受到影响。无论起始位置如何,偏航都在漂移时,俯仰和横滚显示偏差在公差范围内 (CMDeviceMotion.gravity 看起来也很干净。
编辑(2): 我可以使用附加到最近 XCode 版本的 MotionGraphs 示例重现该问题。偏航图可重现地偏离原点。
【问题讨论】:
-
赞成,一个有趣的问题!是的,我对磁力计也有不好的体验:它滞后(导致偏差!)并且像地狱一样嘈杂。我还注意到陀螺仪很容易饱和,尤其是。以快速的动作。有没有办法排除嫌疑人的饱和度?
-
@Ali 我不知道方法。但另一方面,我的带有 iOS 5.1.1 的 iPhone 4 与之前安装的 iOS 4.3 也一样好用。在黑暗中开枪,但我认为 iOS 6 是罪魁祸首。
-
希望有人知道答案,抱歉帮不上忙:(
-
现在是 2015 年 9 月,我的 iPhone 5(2014 年购买)和 iOS 8.1 仍然存在这个问题。我的猜测是传感器融合算法没有正确过滤陀螺仪,或者陀螺仪本身不如其他 iPhone。你的错误报告怎么了?
-
在提交错误后 2 个月,他们回答了 “如果设备在移动,我们无法进行陀螺仪偏差估计。如果设备的偏差校准关闭,那么当设备处于移动状态时,它的航向会漂移运动”。我认为这与传感器融合算法的磁力计部分有关,因为这是校准偏航角的唯一方法。
标签: iphone ios6 gyroscope core-motion