Обновления гироскопа не запускаются - PullRequest
0 голосов
/ 30 сентября 2011

Я создаю тестовое приложение, которое получает шаг, крен и рыскание гироскопа.

Этот код не работает так, как я думаю:

- (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

Я не понимаю, почему, когда я начинаю обновления гироскопа, он фактически не запускается.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2011

Если вы действительно хотите использовать необработанные несмещенные данные датчика, вы должны установить интервал обновления каждого датчика независимо, хотя они часто будут иметь одно и то же значение:

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

deviceMotionUpdateInterval привязан ктолько движения устройства.

Большинство людей не хотят обрабатывать данные датчика с помощью фильтра Калмана и т. д., а только текущую ориентацию устройства.Если это так, взгляните на Простое обнаружение движения iPhone .

Единственная ситуация, когда я видел значения методов xxxActive CMMotionManager, которые не сообщали о правильном состоянии, - приложение в фоновом режимеи активировать его снова, когда обработка движения выполняется в собственном NSThread.Я думаю, что это связано с некоторыми действиями операционной системы, которые могут сочетаться с условиями гонки.Хитрость заключается в том, чтобы освободить экземпляр CMMotionManager и выделить новый.

0 голосов
/ 30 сентября 2011

Согласно документации (http://developer.apple.com/library/ios/#DOCUMENTATION/CoreMotion/Reference/CMMotionManager_Class/Reference/Reference.html), gyroActive будет истинно, только если вы позвонили startGyroUpdatesToQueue:withHandler: или startGyroUpdates. Даже если startDeviceMotionUpdates использует гироскоп, он не устанавливает gyroActive.

...