【问题标题】:iOS magnetometer vector has unexpected valuesiOS磁力计矢量具有意外值
【发布时间】:2021-01-13 12:28:51
【问题描述】:

从 iOS 上的磁力计获取磁北矢量时,我知道有三种方法可以做到这一点。只有第一种方法似乎给出了合理的结果。根据 Compass 应用程序,手机背面平放,长轴指向 97° E

  1. CLLocationManager 委托过载didUpdateHeading。这会给出CLHeading(-18.4, -15.3 -44.9)(x,y,z) 向量以及其他有用的项目,例如磁/真航向、准确性、时间戳。

这似乎是合理的!

  1. CMMotionManagerstartMagnetometerUpdates。这给出了CMMagneticField(x,y,z)(36.5, -10.1, -375) 向量。需要明确的是,Z 轴值为负三百七十五微特斯拉。这似乎不合理。如果我旋转手机,z 的值会波动,但不会低于 -283,这就是手机从上面提供结果的位置反转的时候。

这是还没有被过滤掉的内部磁场吗?

  1. CMMotionManagerstartDeviceMotionUpdates。这给出了CMCalibratedMagneticFieldfield 属性(x,y,z) (0.0, 0.0, 0.0) 向量。这似乎没有返回任何有意义的数据,尽管事件快速且持续地触发。

为什么这不返回任何值?

【问题讨论】:

    标签: ios swift core-location core-motion


    【解决方案1】:

    CMMagneticField 似乎是对的,Apple docs 指定它包括“从设备本身及其周围环境引入的偏差”。

    据我所知,当CMMotionManager 返回(0.0, 0.0, 0.0) 的向量时,这意味着它不是properly calibrated。您可以检查准确度值以确保这一点。可以在此StackOverflow answer 中找到校准设备的有用指南。

    注意:CMMotionManager 返回的磁场与磁力计返回的CMMagneticField 不同,因此不包括来自设备的偏置。请参阅var magneticField: CMCalibratedMagneticField 字段within the docs

    【讨论】:

    • 谢谢!一个问题:如果CMMotionManager startDeviceMotionUpdates 显示为未校准,CLLocationManager didUpdateHeading 如何提供良好、干净、准确的结果?我希望他们共享相同的校准。他们有单独的校准配置文件吗?
    猜你喜欢
    • 1970-01-01
    • 2020-11-14
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 2016-05-28
    • 1970-01-01
    相关资源
    最近更新 更多