在iOS上陀螺角度关闭

时间:2014-07-03 19:25:29

标签: ios rotational-matrices drift

当我启动动作管理器时,手机基本上仍然在我手中,我的态度会得到错误的价值观。要获得旋转值,我使用CMAttitude对象:

CMDeviceMotionHandler motionHandler = ^(CMDeviceMotion *motion, NSError *error) {
    [self calculateNewPosition:motion];
    _rotationMatrix = [self rotationToMat:[motion attitude].rotationMatrix];
};

[_motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryZVertical toQueue:_motionQueue withHandler:motionHandler];

现在,我知道测量中存在噪音很小的陀螺仪,重力矢量可能需要校准,但这似乎太过分了。 0.5-1秒后,旋转值从0变为20°以上?!滚动,俯仰和偏航的两个例子:

  

-1.001736 22.637596 -0.197573

     

-0.095075 29.075712 -0.014112

如果是位置漂移,当我使用双重积分时,我会理解,但直接来自传感器的旋转?

你知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

我刚刚通过在这个问题中看到图片来实现:Gyroscope on iPhone并且测试了一点,在启动陀螺仪时,这些值是零,然后,根据我配置的坐标框架(Z垂直) ,将值调整到手机的当前位置。

因此,如果我以20°的间距开始使用手机,那么在一段时间内音高的值将为0,然后切换到20°。这意味着我必须等待旋转矩阵为非零才能开始跟踪旋转。