2017-10-15 282 views
0

通过下面的代码,我得到了加速计数据,现在我想用它来跟踪用户的运动,特别是速度。在iPhone上使用Core Motion浏览代码时,他们使用motionManager对象,该对象可以为accelerometerUpdateInterval设置一个值,并获取.acceleration.x值。我如何处理回馈的原始数据以便确定例如一个人的移动速度有多快,或者他们的手臂摆动有多快?如何使用Apple Watch的加速度计数据?

//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

回答

0

我发现在手表上使用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 { 

       } 
      } 
     } 



    }