计算 iPhone 行进的短垂直距离

Calculate a short vertical distance traveled by iPhone

提问人:Michael Samoylov 提问时间:1/24/2020 最后编辑:Michael Samoylov 更新时间:3/3/2020 访问量:801

问:

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

有没有办法计算 Core Motion 框架

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)
            }
         }
     })
}
iOS Swift iPhone Cocoa-Touch Core-Motion

评论

1赞 Magnas 1/24/2020
Core Location 具有作为对象的一部分返回的 altitude 属性。但是刚刚注意到你写了而不是,我想这还不够准确:)CLLocationManagerCLLocationcmm
0赞 Niall Kehoe 1/24/2020
这有帮助吗?developer.apple.com/documentation/coremotion/cmaltitudedata
0赞 NiñoScript 1/28/2020
您可以使用数学将加速度转换为速度,然后转换为位置变化。如果你曾经上过微积分课程,你就会知道会有一些讨厌的常数,所以你可能需要有一个“校准”步骤,你会要求用户保持静止,然后测量静态加速度(又名重力),或者你可以使用相机来获取这些额外的数据。如果它只是为了深蹲,那么你可能只用数学就可以让它工作。

答:

2赞 matt 1/26/2020 #1

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

Core Motion 可以检测姿态(手机的方向)和加速度(手机如何开始或停止移动、加速或减速)。平滑的垂直运动根本不会注册。你可能知道运动的开始和结束,但不知道这些事件发生了多远。你可能会根据初始加速度(可以让你计算出我们前进的速度)和减速前的时间来猜测一些事情。但这只不过是一个猜测。

评论

0赞 Michael Samoylov 1/26/2020
所以你是说在技术上不可能检测一个人是否做了一个完整的深蹲?
3赞 matt 1/26/2020
你的问题中没有“深蹲”。我对此一言不发。我说的就是我在说什么。手机传感器中没有任何固有的东西可以告诉您手机现在位于离地面 2 英尺的地方。如果深蹲足够快和突然,你可以感觉到开始和停止是抽搐,并猜测这是一个深蹲。你当然可以数一数这些手势。但你不能确定这是一个深蹲,也不能确切知道它有多深。
2赞 matt 1/27/2020
您的编辑不会改变我的答案。你问CoreMotion框架能够检测什么,我已经回答了。您需要将数据收集到缓冲区中并分析其加速和减速,并使用数量和干预时间来猜测这是一个深蹲以及这段时间的行进距离可能是多少,正如我在回答中所说的那样。如果我是你,我会先自己做一些深蹲,收集数据,这样你就可以看到数据是什么样子的。
1赞 razorRun 2/2/2020 #2

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

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