Получить шаг, крен и рыскание относительно географического севера на iOS?


Я вижу, что могу извлечь CMAttitude из устройства и из него я могу прочитать 3 значения, которые мне нужны (шаг, крен и рыскание). Как я понимаю, этот объект CMAttitude управляется CoreMotion, который является менеджером слияния датчиков для вычисления правильных результатов от компаса, гироскопа и акселерометра вместе (на Android это класс SensorManager).

Итак, мои вопросы таковы:

  1. Являются ли эти величины (тангаж, крен и рыскание) относительными к магнитному северу и гравитация?

  2. Если вышеизложенное верно, как я могу изменить его, чтобы получить результаты относительно географического Севера?

  3. Если устройство (например, iPhone 3GS) не имеет гироскопа, должен ли я сообщить об этом менеджеру или я могу просто сказать ему, чтобы он дал мне отношение устройства, основанное на датчиках, которые у него есть (acc + gyro + compas или acc + compas)

1 3

1 ответ:

  1. и 2:
IOS 5.0 упрощает эту задачу. Cmmotion manager имеет новый метод:

- (void)startDeviceMotionUpdatesUsingReferenceFrame:(CMAttitudeReferenceFrame)referenceFrame

В качестве системы отсчета можно использовать следующие значения:

  • CMAttitudeReferenceFrameXMagneticnorthzvertical для магнитного Севера,
  • CMAttitudeReferenceFrameXTrueNorthzvertical для истинного Севера.

Если вы хотите сделать это со старым iOS im, то вам придется откалибровать его самостоятельно, используя текущее местоположение пользователя.

Попробуйте проверить это ресурсы:

3. Если устройство не имеет гироскопа, свойство deviceMotionAvailable CMMotionManger будет "Нет" (это эквивалентно свойству gyroAvailable), и вы не можете получить отношение, используя движение устройства. Единственное, что вы можете сделать, это прочитать данные акселерометра и магнитометра напрямую.