Я использую CoreMotion для получения заголовка компаса, и я заметил некоторые проблемы с заголовком компаса.
Сначала моя инициализация CoreMotion. У меня есть объект CMMotionManager, locationManager, который является экземпляром CMMotionManager.
// initialize CoreMotion
motionManager = [CMMotionManager new];
[motionManager setDeviceMotionUpdateInterval:1.0/30.0];
[motionManager setShowsDeviceMovementDisplay:YES];
[self.motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical];
Данные о местоположении обновляются каждые 1 / 30,0 секунды.
Для целей отладки у меня есть UILabel, который показывает мне текущий заголовок компаса, обновляемый с каждым интервалом обновления. Пока приложение запускается, мне всегда приходится делать волшебную восьмерку для калибровки компаса.
После калибровки компаса направление на север и юг верное в течение почти 2-5 секунд.
Сразу через пару секунд компас сходит с ума, и углы прыгают. В основном он парит под углом 10-20 градусов от исходного положения в обоих направлениях. Должен быть странный результат. Через 30-60 секунд время от времени юг и север меняются местами или показывают восток и запад.
На WWDC 2011 обсуждалась сессия о том, как они рассчитывают каждый датчик с другим, чтобы компенсировать эти проблемы. Что я упустил при настройке CoreMotion из-за огромных проблем с точными результатами определения курса?
Я протестировал компас на 3 устройствах (2 iPhone 4s и iPhone 4) в зданиях и за их пределами. Я был на полях, в маленьких и больших городах. Так происходит все время. В моих тестах образец компаса от Apple почти точен с точностью 90%. К сожалению, его исходный код не открыт от Apple.
Спасибо за чтение.