Я использую 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, которая показывает мне текущий курсный компас, обновляемый при каждом интервале обновления.
Пока приложение запускается, мне всегда приходится делать магические 8 для калибровки компаса.
После калибровки компаса курс на север и юг будет корректным в течение почти 2-5 секунд.
Сразу через пару секунд компас сходит с ума и углы прыгают вокруг.
В основном он плавает на 10-20 градусов от начальной позиции в обоих направлениях. Достаточно иметь странный результат.
Время от времени через 30-60 секунд юг и север меняются местами или показывают восток и запад.
На WWDC 2011 была обсуждена сессия о том, как они рассчитывают каждый датчик с другим, чтобы компенсировать эти проблемы.
Есть ли что-то, что я пропустил в конфигурации CoreMotion, из-за которой у меня возникли серьезные проблемы с точными результатами курса?
Сейчас я проверил компас с 3 устройствами (2 iPhone 4 и iPhone 4) внутри и снаружи зданий. Я был на полях, в маленьких и больших городах. Так происходит все время.
Пример приложения компаса от Apple почти точен с точностью до 90% в моих тестах. К сожалению, это не открытый источник Apple.
Спасибо за чтение.