Неправильные значения компасного курса с CoreMotion

Я использую 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 4s и iPhone 4) в зданиях и за их пределами. Я был в полях, небольших городах и больших городах. Это происходит постоянно. Образец приложения компаса от Apple почти точен - 90% точности в моих тестах. К сожалению, компания Apple не предоставляет открытых источников.

Спасибо за чтение.

8
задан Max 10 March 2012 в 09:42
поделиться