【问题标题】:iOS CoreMotion - Calculating Height DifferenceiOS CoreMotion - 计算高度差
【发布时间】:2016-07-02 11:58:32
【问题描述】:

是否可以使用 CoreMotion 的数据计算 iPhone 移动时的高度差?

例如,保存 iPhone 的初始位置,然后移动 iPhone,从而产生一个新位置。我有兴趣检测 iPhone 的高度是否从其初始位置移动。我不需要绝对单位,只需要一个相对值来指示高度与原始高度相比变化的百分比。

let manager = CMMotionManager()

// Save initial attitude
var initialAttitude = manager.deviceMotion.attitude

if manager.deviceMotionAvailable {
manager.startDeviceMotionUpdatesToQueue(NSOperationQueue.mainQueue()) {
    [weak self] (data: CMDeviceMotion!, error: NSError!) in

    // Get the difference between the initial and new attitude
    data.attitude.multiplyByInverseOfAttitude(initialAttitude)

    // Is there a way to calculate the relative change in height?

    }
}

【问题讨论】:

    标签: ios core-motion


    【解决方案1】:

    在较新的 iPhone 上,确实可以从随附的气压计(适用于 iphone 6)获得相对高度。 Core Motion 已扩展以适应这种情况。

    CMAltimeter - 提供高度变化事件的传递。

    CMAltitudeData - 封装高度变化事件(以米级分辨率)。

    这种东西应该可以的......

     if CMAltimeter.isRelativeAltitudeAvailable() {
         altimeter.startRelativeAltitudeUpdatesToQueue(altimeterQueue,
         withHandler:
             { (  data:CMAltitudeData?,
                 error: NSError?) in
                 if let altitudeData = data {
                     self.timeStamp = altitudeData.timestamp
                     self.relativeAltitude = altitudeData.relativeAltitude
                 }
             }
         )
     }
    

    我们没有得到绝对高度,只有相对高度变化。初始高度被认为是 0。因此您无法真正获得百分比变化(没有任何意义),但您可以获得米级精度的绝对变化。

    【讨论】:

    • 我需要 1 cm 的精度,但我认为 Altitude 的精度是米。所以这不是我所需要的。
    【解决方案2】:

    不,这是不可能的。对不起。

    有一篇很好的论文解释了为什么这是不可能的,但我现在找不到。如果我找到它,我会发布一个链接。

    但是,是的,仅使用加速度计等来测量移动的距离是不可能的……主要是因为双重积分会大大增加噪声。

    编辑

    另外,我认为您混淆了AttitudeAltitude

    前者是使用滚动、俯仰、偏航等描述设备方向的对象...CMDeviceMotionattitude 属性。

    后者是海拔高度,无法通过 iOS 获得。您在 iOS 中唯一可以得到的altitude 是地球上某个特定点高于海平面的高度。但是您无法获取设备高度,只能获取地面高度。

    无论如何,这仍然是不可能的。

    编辑

    这不是纸。这是一个视频。

    https://www.youtube.com/watch?v=_q_8d0E3tDk

    【讨论】:

    • 感谢您的回答。如果您找到那篇论文,请发布链接!
    • @Oak 你去。找到了:D
    • 我真的很感激。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 2020-03-15
    • 2016-05-19
    相关资源
    最近更新 更多