частота обновления, установленная для deviceMotionUpdateInterval, это фактическая частота?

анализируя deviceMotion.timestamp, я увидел, что частота обновления, установленная в DeviceMotion, не является фактической частотой обновления.

Я реализовал приложение для тестирования ниже того, что я видел!

    update frequency     actual frequency       average time between two calls
       1/10.000000          10.232265              0.097730
       1/20.000000          19.533729              0.051194
       1/30.000000          30.696613              0.032577
       1/40.000000          42.975122              0.023269
       1/50.000000          53.711000              0.018618
       1/60.000000          53.719106              0.018615
       1/70.000000          71.627016              0.013961
       1/80.000000          71.627263              0.013961
       1/90.000000          53.719365              0.018615
       1/100.000000        107.442667              0.009307
       1/110.000000        107.437022              0.009308

кто-то замечал то же самое? это ошибка?


person Batti    schedule 21.07.2011    source источник


Ответы (1)


Некоторые люди сообщают об одном и том же явлении, например Фактическая частота обновлений движения устройства ниже, чем ожидалось, но увеличивается с настройкой, но ответа по-прежнему нет. Удивительно, но вы первыми сообщили о более высоких фактических частотах. Я провел несколько тестов по этому вопросу, и нет никакой разницы, каким путем вы пойдете.

  • Push или pull, т.е. обратный вызов обработчика или собственный цикл таймера
  • iOS 4.2x, iOS 4.3x ([обновление:] протестировано только при извлечении)
  • Необработанные данные датчика или движение устройства
  • Гироскоп или акселерометр
  • Запуск в отдельном потоке

Я предполагаю, что это небольшая ошибка в структуре Core Motion.

person Kay    schedule 22.07.2011
comment
я использую push (я читал в документации, что это более точный метод сбора данных), iOS 4.3x iPhone4, просто в DeviceMotion фактическая частота отличается от установленной, если я использую [CMMotionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) все работает нормально, фактическая частота такая же, как я установил, CoreMotion создает свой поток для: обработки необработанных данных с датчиков и запуска алгоритмов движения устройства (я читаю слайды WWDC 2010/2011) - person Batti; 22.07.2011
comment
Необработанные данные акселерометра с использованием метода push для их захвата. [1 / 10,000000 9,988813 0,100112] [1 / 20,000000 19,957865 0,050106] [1 / 30,000000 29,902478 0,033442] [1 / 40,000000 39,825712 0,025109] [1 / 50,000000 49,725514 0,020110] [1 / 60,000000 59,608615 0,016776] [1 / 70,000000 69,477139 0,014393] [ 1/80,000000 79,321895 0,012607] [1/90,000000 88,883474 0,011251] [1/100,000000 98,643989 0,010137] - person Batti; 22.07.2011
comment
Итак, вы правильно поняли, что теперь вы решили проблему с помощью NSOperationQueue? Если это так, я предлагаю вам отредактировать свой вопрос и вставить решение в конце. Таким образом другие могут увидеть решение с первого взгляда. - person Kay; 22.07.2011
comment
Я не решил проблему, но проверил, что проблема только в DeviceMotion (userAcceleration, отношение, RotationRate, гравитация), а не в CMAccelerometerData и CMGyroData - person Batti; 22.07.2011
comment
А, понятно - извините за невнимательность ;) Возможно, у меня не работала эта комбинация на iOS 4.3. Я использую метод pull в собственном потоке, чтобы получить больше контроля. В любом случае, ценная информация. Я голосую за ваш вопрос. - person Kay; 22.07.2011