如何处理来自 Apple Watch 的加速计数据?
How to work with accelerometer data from the Apple Watch?
通过下面的代码我正在获取加速度计数据,现在我想使用它来跟踪用户的移动,特别是速度。查看在 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)
编辑:我发现这个库看起来很完美,但已经 3 年没有更新了……是否还有类似的东西还在维护? https://github.com/MHaroonBaig/MotionKit
我发现在手表上使用 CMMotionManager
和在 iPhone 上一样好用。这样你就可以在awake
中实现startAccelerometerUpdates
并接收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 {
}
}
}
}
通过下面的代码我正在获取加速度计数据,现在我想使用它来跟踪用户的移动,特别是速度。查看在 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)
编辑:我发现这个库看起来很完美,但已经 3 年没有更新了……是否还有类似的东西还在维护? https://github.com/MHaroonBaig/MotionKit
我发现在手表上使用 CMMotionManager
和在 iPhone 上一样好用。这样你就可以在awake
中实现startAccelerometerUpdates
并接收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 {
}
}
}
}