Получить шаг, крен и рыскание относительно географического севера на iOS?
Я вижу, что могу извлечь CMAttitude из устройства и из него я могу прочитать 3 значения, которые мне нужны (шаг, крен и рыскание). Как я понимаю, этот объект CMAttitude управляется CoreMotion, который является менеджером слияния датчиков для вычисления правильных результатов от компаса, гироскопа и акселерометра вместе (на Android это класс SensorManager).
Итак, мои вопросы таковы:
-
Являются ли эти величины (тангаж, крен и рыскание) относительными к магнитному северу и гравитация?
-
Если вышеизложенное верно, как я могу изменить его, чтобы получить результаты относительно географического Севера?
Если устройство (например, iPhone 3GS) не имеет гироскопа, должен ли я сообщить об этом менеджеру или я могу просто сказать ему, чтобы он дал мне отношение устройства, основанное на датчиках, которые у него есть (acc + gyro + compas или acc + compas)
1 ответ:
IOS 5.0 упрощает эту задачу. Cmmotion manager имеет новый метод:
- и 2:
- (void)startDeviceMotionUpdatesUsingReferenceFrame:(CMAttitudeReferenceFrame)referenceFrame
В качестве системы отсчета можно использовать следующие значения:
- CMAttitudeReferenceFrameXMagneticnorthzvertical для магнитного Севера,
- CMAttitudeReferenceFrameXTrueNorthzvertical для истинного Севера.
Если вы хотите сделать это со старым iOS im, то вам придется откалибровать его самостоятельно, используя текущее местоположение пользователя.
Попробуйте проверить это ресурсы:
- " What's New in Core Motion " WWDC 2011 video ,
- "датчик движения устройства в iOS 4" WWDC 2010 video
3. Если устройство не имеет гироскопа, свойство deviceMotionAvailable CMMotionManger будет "Нет" (это эквивалентно свойству gyroAvailable), и вы не можете получить отношение, используя движение устройства. Единственное, что вы можете сделать, это прочитать данные акселерометра и магнитометра напрямую.