首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >偏航不断变化时的核心运动

偏航不断变化时的核心运动
EN

Stack Overflow用户
提问于 2012-07-26 16:42:04
回答 2查看 3.7K关注 0票数 2

我的iOS应用程序中有核心运动管理器:

代码语言:javascript
运行
复制
motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 1.0 / 60.0;
if ([motionManager isDeviceMotionAvailable]) {
    [motionManager startDeviceMotionUpdates];
}

在update方法中(我使用的是cocos3d,但这无关紧要),我得到了:

代码语言:javascript
运行
复制
-(void) updateBeforeTransform:(CC3NodeUpdatingVisitor *)visitor
{
    if (motionManager.deviceMotionActive)
    {
        CMDeviceMotion *deviceMotion = motionManager.deviceMotion;
        CMAttitude *attitude = deviceMotion.attitude;

        NSLog(@"%f, %f, %f", attitude.yaw, attitude.pitch, attitude.roll);

    }
}

我把设备放在桌子上,开始观察偏航、俯仰和滚动值,偏航是不断变化的!它在几分钟内变化了大约10度,这在我的应用程序中绝对是不可接受的。这种改变的原因是什么?我如何避免它?我开始认为这是因为地球自转,但速度太快了:)

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-26 22:02:11

让我在黑暗中试一试。对于iOS 5,磁力仪数据是核心运动传感器融合算法的一部分。对于许多应用程序,如游戏,没有必要或更好的是危险的,因为增加的能源消耗和可能需要校准指南针,迫使用户这样做像运动。

因此,我推测,只有在使用CMMotionManager的startDeviceMotionUpdatesUsingReferenceFrame而不是startDeviceMotionUpdates明确声明的情况下,罗盘数据才会被考虑在传感器融合中。试试CMAttitudeReferenceFrameXMagneticNorthZVertical,看看漂移效果有没有降低。

票数 3
EN

Stack Overflow用户

发布于 2013-11-13 00:52:55

你正在经历的是一种叫做漂移的东西,你对它无能为力。

基本上,陀螺仪在测量转速方面很好,但不能测量瞬时方向。因此,为了计算设备的当前方向,传感器算法必须将感测速率整合到位置中。然而,随着位置的计算,随着时间的推移,小的误差会积累起来,计算出的方向可能会漂移,即使设备基本上保持静止。

如果设备恰好有一个可以测量瞬时方向的传感器,例如磁力计,那么传感器融合算法可以通过比较/组合传感器输入来纠正漂移,因此苹果的参考系选项: CMAttitudeReferenceFrameXArbitraryCorrectedZVertical.

但苹果的实现并不完美,这就是为什么当启用时,你会看到大量的来回跳跃来纠正累积的错误。更好的算法可能是至少随着时间的推移平滑纠错的算法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11665510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档