【问题标题】:Calculate a short vertical distance traveled by iPhone计算 iPhone 行进的短垂直距离
【发布时间】:2020-05-10 20:41:15
【问题描述】:

目前我正在开发一个需要检测 iPhone 是否启动和停止垂直移动的应用程序。我需要能够检测到一个相当短的(50-100 厘米)垂直距离,即如果一个人进行深蹲。

有没有办法计算Core Motion framework

let motion = CMMotionManager()

if motion.isDeviceMotionAvailable {
    self.motion.deviceMotionUpdateInterval = 1.0 / 60.0
    self.motion.showsDeviceMovementDisplay = true

    self.motion.startDeviceMotionUpdates(using: .xMagneticNorthZVertical, to: .main, withHandler: { (data, error) in
        if let validData = data {
            // Just a random minimum acceleration threshold                    
            if validData.userAcceleration.y > 3 {
               print(validData.userAcceleration.y)
            }
         }
     })
}

【问题讨论】:

  • 核心位置的CLLocationManager 有一个高度属性,它作为CLLocation 对象的一部分返回。但是刚刚注意到你写的是cm 而不是m 我想这不够准确:)
  • 您可以使用数学将加速度转换为速度,然后转换为位置变化。如果你曾经上过微积分课程,你就会知道会有一些讨厌的常数,所以你可能需要一个“校准”步骤,在这个步骤中你会要求用户保持静止,然后测量静态加速度(又名重力),或者您可以使用相机来获取这些额外数据。如果它只是为了深蹲,那么你可能只用数学就可以了。

标签: ios swift iphone cocoa-touch core-motion


【解决方案1】:

有没有办法用 Core Motion 框架计算垂直距离?

Core Motion 可以检测姿态(手机如何定向)和加速度(手机如何开始或停止移动、加速或减速)。平滑的垂直运动根本不会记录下来。您可能知道运动开始和结束,但不知道这些事件发生的距离。您可能会根据初始加速度(这可以让您计算出我们的行驶速度)和减速前的时间对此进行猜测。但这只不过是一个猜测。

【讨论】:

  • 所以你是说技术上无法检测一个人是否完全蹲下?
  • 您的问题中没有“蹲”。我对此一无所知。我在说我在说什么。手机传感器中没有任何内在的东西可以告诉您手机现在距离地面 2 英尺。如果深蹲足够快且足够突然,您可以感觉到开始和停止作为抽搐,并猜测这是深蹲。你当然可以这些手势。但你不能确定它是深蹲或确切地知道它有多深。
  • 您的编辑不会改变我的回答。你问 CoreMotion 框架能够检测什么,我已经回答了。正如我在回答中所说,您需要将数据收集到缓冲区中并对其进行加速和减速分析,并使用数量和中间时间来猜测这是一个深蹲,以及在那段时间内行进的距离可能是多少。如果我是你,我会先自己做一些深蹲,收集数据,这样你就可以看到数据的样子。
【解决方案2】:

我必须为我之前开发的一个应用程序做一些类似的工作。因此,关键是使用您可以访问的所有传感器。加速度计、陀螺仪、GPS 和磁力计(在您的情况下可能不是 GPS 和指南针)。然后下一步是执行一些全蹲(希望您的办公室对此表示满意:-),因为您希望您的用户在获取数据基线时这样做。然后,您可以在此基础上建立模型。

好吧,如果你想变得厚脸皮,你可以做我们所做的,我们将这些传感器数据发送到 ML API/模型。随着时间的推移,它变得非常准确。现在我们的准确率超过 90%。但是,在您的情况下,这可能是矫枉过正。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 2011-04-03
    • 1970-01-01
    • 2012-03-29
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多