Правильно ли работает калибровка магнитометра 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 НЕ приводят к кругу!

Сюжет

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

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

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


person user2980195    schedule 16.12.2013    source источник


Ответы (1)


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

РЕДАКТИРОВАТЬ

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

Поэтому, когда CMCalibratedMagneticField пытается компенсировать ваше вращательное движение, он использует данные гироскопа и акселерометра. Это когда ошибка акселерометра и гироскопа +-7º закрадывается и сбивает ваш круг с пути. Проверьте этот ответ и этот < href="http://en.wikipedia.org/wiki/Inertial_Measurement_Unit" rel="nofollow noreferrer">статья в Википедии для получения дополнительной информации.

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

Надеюсь это поможет.

person Pranav    schedule 15.01.2014
comment
Большое спасибо за ответ! Есть ли ссылка на эту информацию? - person user2980195; 15.01.2014
comment
Я ошибался, ошибка была исправлена ​​в iOS 7.0.3. Ссылка: support.apple.com/kb/DL1691 - person Pranav; 16.01.2014
comment
Но это касается исключительно акселерометра, а не магнитометра, верно? - person user2980195; 18.01.2014
comment
Можете ли вы подтвердить, что магнитометр теперь работает правильно? - person michaelsnowden; 09.03.2014