0

我正在创建接收陀螺仪俯仰、滚动和偏航的测试应用程序。

此代码不起作用,因为我认为它会:

- (void) enableGyro {
    motionManager.deviceMotionUpdateInterval = 1.0/30.0;
    if (motionManager.gyroAvailable) {
        [motionManager startGyroUpdates];
    }
    NSLog(@"Gyro Available? %@", (motionManager.gyroAvailable ? @"YES" : @"NO"));
    NSLog(@"Gyro Active? %@", (motionManager.gyroActive ? @"YES" : @"NO"));
}

的输出是

2011-09-29 16:37:08.070 Gyro2[4014:607] Gyro Available? YES
2011-09-29 16:37:08.074 Gyro2[4014:607] Gyro Active? NO

我不明白为什么,当我开始更新陀螺仪时,它实际上并没有开始。

4

2 回答 2

0

如果您真的想使用原始无偏传感器数据,则必须独立设置每个传感器的更新间隔,尽管它们通常是相同的值:

motionManager.gyroUpdateInterval = myGyroInterval;
motionManager.accelerometerUpdateInterval = myAccelerometerInterval;

deviceMotionUpdateInterval仅绑定到设备动作。

大多数人不想使用卡尔曼滤波器等处理传感器数据处理,而只想处理设备的当前方向。如果是这种情况,请查看 Simple iPhone 运动检测

我看到 CMMotionManager 的 xxxActive 方法的值没有报告正确状态的唯一情况是将应用程序置于后台并在自己的 NSThread 中完成运动处理时再次激活它。我认为这与操作系统所做的某些操作有关,可能与某种赛车条件相结合。然后诀窍是释放 CMMotionManager 实例并分配一个新实例。

于 2011-09-30T08:51:20.480 回答
0

根据文档(http://developer.apple.com/library/ios/#DOCUMENTATION/CoreMotion/Reference/CMMotionManager_Class/Reference/Reference.html),gyroActive只有在您调用startGyroUpdatesToQueue:withHandler:startGyroUpdates. 即使startDeviceMotionUpdates使用陀螺仪,它也不会设置gyroActive

于 2011-09-30T00:16:13.733 回答