通过下面的代码,我得到了加速度计数据,现在我想用它来跟踪用户的移动,特别是速度。在iPhone上使用Core Motion查看代码时,他们使用motionManager
对象,可以为accelerometerUpdateInterval
设置值,例如获取.acceleration.x
值。我如何处理我给出的原始数据,以便我可以确定,例如一个人移动的速度有多快或手臂摆动的速度有多快?
//Record the data
if CMSensorRecorder.isAccelerometerRecordingAvailable() {
print("Accelerometer available")
recorder.recordAccelerometer(forDuration: 20 * 60) // Record for 20 minutes
}
//Read the data
if CMSensorRecorder.isAccelerometerRecordingAvailable() {
let accelerometerData = recorder.accelerometerData(from: startDate, to: endDate)
for (index, data) in (accelerometerData?.enumerated())! {
print(index, data)
}
}
Prints:
0 388, 208409.082611, 529770182.607276, (0.038574, -0.762207, -0.652832)
1 388, 208409.102722, 529770182.627387, (0.027588, -0.763184, -0.660889)
2 388, 208409.122863, 529770182.647528, (0.027100, -0.763184, -0.661865)
3 388, 208409.142974, 529770182.667639, (0.030029, -0.756836, -0.661865)
4 388, 208409.163116, 529770182.687781, (0.026611, -0.764648, -0.665039)
编辑:我发现这个lib看起来很完美但是3年内还没有更新......类似的东西仍然保留了吗? re.findall()
答案 0 :(得分:0)
我发现在手表上使用CMMotionManager
的效果与在iPhone上的效果一样好。通过这种方式,您可以在startAccelerometerUpdates
中实施awake
并在X Y Z坐标的观察位置接收实时反馈,以便您可以更好地掌握数据;
var motionManager = CMMotionManager()
override func awake(withContext context: Any?) {
super.awake(withContext: context)
manager.accelerometerUpdateInterval = 0.2
manager.startAccelerometerUpdates(to: OperationQueue.current!) { (data, error) in
if let myData = data {
print("x: \(myData.acceleration.x) y: \(myData.acceleration.y) z: \(myData.acceleration.z)")
if myData.acceleration.x > 1.5 && myData.acceleration.y > 1.5 {
}
}
}
}