CoreMotion не дает мне крена, тангажа и рыскания

sДо того, как UIAccelerometer устарел в iOS, я использовал данные x, y и z из этого класса для расчета тангажа, крена и рыскания. Мне также пришлось выполнить некоторую фильтрацию, но теперь я вижу, что с библиотекой CoreMotion я могу получить эти данные из CMAttitude class и очень хотел бы использовать эти свойства, но почему-то не получается.

Теперь то, что я сделал, это создать экземпляр

CMMotionManager *motionManager;
CMDeviceMotion  *deviceMotion;
CMAttitude      *attitude;
...
deviceMotion    = motionManager.deviceMotion;
attitude        = deviceMotion.attitude;

motionManager.accelerometerUpdateInterval = 0.065; // 65ms
[motionManager startAccelerometerUpdates];

Я могу прочитать x, y и z из motionManager.accelerometerData.acceleration.<x,y or z>, но попытка прочитать из attitude.<roll,pitch,yaw> дает мне 0.

NSLog(@"Roll: %f", attitude.roll); // = 0

Я считываю значения в методе, запускаемом непрерывным таймером каждые 100 мс.

Любые идеи о том, что мне не хватает?


person chwi    schedule 13.03.2013    source источник


Ответы (1)


Чтобы использовать deviceMotion.attitude, вы должны позвонить [motionManager startDeviceMotionUpdates].

startAccelerometerUpdates предоставляет данные акселерометра только так, как startGyroUpdates дает вам gyroData. Обратите внимание, что данные о движении устройства — это больше, чем просто данные акселерометра и гироскопа, поскольку оба они будут объединены (объединение датчиков) для достижения большей точности.

person Kay    schedule 13.03.2013
comment
Спасибо, сэр, это было так. Не знал, что они объединили данные из двух, чтобы добиться этого. - person chwi; 14.03.2013