Получение странных данных магнитометра в iPhone при программировании приложения для iOS с помощью Swift
Я программирую приложение для iOS, которое считывает данные с магнитометра. Когда я запускаю приложение на двух iPhone, они создают странные данные.
(Все данные в формате [x, y, z]). IPhone 5S создает около [100, 10, -100], а другой iPhone 6S создает около [150, 225, -700]. Значения сдвигаются примерно на 10% при многократном чтении и неподвижности телефона, и они мало меняются, когда я их поворачиваю.
Однако реальное магнитное поле должно составлять около [0, -30, -30] (измеряется приложением)
Почему я получаю эти странные данные? (Я также измерил данные с акселерометра, и данные верны)
Вот исходный код моего проекта: https://github.com/lxylxy123456/FGFS-Controller/
То, что я сделал, в основном так
let motionManager = CMMotionManager()
motionManager.startMagnetometerUpdates()
if let magnetometerData = motionManager.magnetometerData {
mx = magnetometerData.magneticField.x
my = magnetometerData.magneticField.y
mz = magnetometerData.magneticField.z
}
Mx.text = Float(mx).description
My.text = Float(my).description
Mz.text = Float(mz).description
1 ответ
magnetometerData
это необработанные данные, не откалиброванные для внутреннего смещения, а также внешних факторов (он же металл), и по сути не имеет смысла. Нет смысла в использовании необработанных данных. В принципе, нет никаких причин использовать эти значения.
Используйте CMDeviceMotion's magneticField
по крайней мере. Более того, попросите информацию, которая соответствует вашим реальным потребностям. Если вы хотите узнать заголовок устройства, попросите об этом. Если вы хотите узнать ориентацию устройства относительно магнитного севера, попросите об этом.