0

当我启动运动管理器时,手机基本上还在我手中,我得到了错误的态度值。为了获得旋转值,我使用了 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

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

你知道为什么会这样吗?

4

1 回答 1

0

我刚刚通过看到这个问题中的图片意识到:iPhone上的陀螺仪并进行了更多测试,启动陀螺仪时值为零一段时间,然后根据我配置的坐标系(Z垂直)调整值到手机的当前位置。

因此,如果我从手中的手机开始以 20° 的俯仰角开始,俯仰角的值会在一小段时间内为 0,然后切换到 20°。这意味着我必须等待旋转矩阵非零才能开始跟踪旋转。

于 2014-07-03T19:37:21.107 回答