Правильно ли работает калибровка магнитометра iPhone от Apple?

в настоящее время я разрабатываю приложение для iPhone (на iPhone 5, iOS 7, Xcode 5), которое требует очень точного определения текущего отношения. "Отношение" CMDeviceMotion не отвечает этим требованиям, потому что алгоритм слияния датчиков Apple, похоже, слишком полагается на гироскоп, который дрейфует довольно быстро (по моему опыту). Вот почему я решил прочитать голые данные датчика, а позже я хочу объединить их в алгоритме слияния датчиков с помощью себя.

при запросе данных магнитометра есть две возможности:

  1. через CMMagnetometerData в CMMotionManager

  2. через CMCalibratedMagneticField в CMDeviceMotion, о котором Apple говорит

CMCalibratedMagneticField, возвращаемое этим свойством, дает общее магнитное поле в окрестности устройства без смещения устройства. В отличие от свойства magneticField Класс CMMagnetometer, эти значения отражают магнитное поле Земли плюс окружающие поля, минус смещение устройства.

в принципе (2. именно этого я и хочу.

существует очень простой тест, если данные магнитометра откалиброваны должным образом. Для простоты можно ограничиться двумя измерениями. Когда устройство лежит на спине, комбинация B_x^2 + B_y^2 должна быть постоянной, независимо от направления, на которое указывает устройство. Он должен просто равняться горизонтальная составляющая магнитного поля Земли (при условии отсутствия других полей вблизи устройства). Таким образом, при выполнении поворота на 360 градусов устройства, которое лежит на спине, измеренные данные B_y над B_x должны отображать круг. См.здесь для сведения.

теперь точка: данные CMCalibratedMagneticField не приводят к окружности!

Plot

У кого-нибудь есть объяснение этому? Или кто-нибудь знает, как в CMCalibratedMagneticField идет речь? Является ли магнитометр калиброванным в смысле ссылка сверху при выполнении" восьмеричного " движения устройства или для чего это движение хорошо?

кстати. почему" восьмеричное " движение и не переворачивание устройства вокруг его трех осей, что позволило бы провести калибровку, как описано в ссылка сверху?

Я был бы очень рад любым разъяснениям по этому вопросу... Спасибо!

1 ответов


существует проблема с магнитометром в iOS 7, он имеет ошибку +-7º. Попробуйте использовать бета-версию 7.1.

редактировать

магнитометр имеет нулевой дрейф во времени, но довольно неточен для внезапных изменений положения. Акселерометр и гироскоп, с другой стороны, быстро приспосабливаются к внезапным изменениям, но, будучи инерционными датчиками, они теряют точность в течение определенного периода времени.

когда CMCalibratedMagneticField пытается компенсировать ваше вращательное движение, которое он использует данные с гироскопа и акселерометра. Это когда ошибка акселерометра и гироскопа + - 7º вползает и бросает ваш круг с дорожки. Проверьте это ответ и статья в Википедии для получения дополнительной информации.

что касается восьмерки: Оба делают то же самое, они ориентируют "Север" вашего устройства в каждом направлении в надежде отменить магнитные помехи. Переворачивание устройства по всем трем осям будет работать лучше, но это сложнее выполнять и не так легко понять пользователю.

надеюсь, что это помогает.