使用 Swift 编程 iOS 应用程序时在 iPhone 中获取奇怪的磁力计数据

Getting strange magnetometerData in iPhone when programming iOS app with Swift

我正在编写一个 iOS 应用程序,它从磁力计读取数据。当我 运行 两个 iPhone 上的应用程序时,它们正在创建奇怪的数据。

(所有数据均采用 [x, y, z] 表示法)一个 iPhone 5S 创造了大约 [100, 10, -100] 而另一个 iPhone 6S 创造了大约 [150, 225 , -700]。多次读取并保持 phone 不变时,这些值会发生大约 10% 的变化,而当我转动它们时,它们几乎没有变化。

但实际磁场应该在[0,-30,-30]左右(APP测量)

为什么我会收到这些奇怪的数据? (我也测量了加速度计的数据,数据是正确的)

这是我项目的源代码: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

magnetometerData 是原始数据,未针对内部偏差和外部性(又名金属)进行校准,并且基本上没有意义。使用原始数据没有任何好处。基本上从来没有使用这些值的理由。

至少使用 CMDeviceMotion 的 magneticField。更好的是,询问与您的实际需求密切相关的信息。如果您想知道设备的航向,请询问。如果您想知道设备相对于磁北的方向,请询问。