2017-10-15 4 views
0

Über den Code unten bekomme ich Beschleunigungsmesser Daten, jetzt möchte ich damit arbeiten, um die Bewegung des Benutzers zu verfolgen, insbesondere Geschwindigkeit. Bei der Suche nach Code mit Core Motion auf dem iPhone verwenden sie ein Objekt motionManager, das einen Wert für accelerometerUpdateInterval setzen kann, sowie den Wert .acceleration.x zum Beispiel erhalten. Wie kann ich mit den Rohdaten arbeiten, die mir zurückgegeben werden, so dass ich z.B. wie schnell sich eine Person bewegt oder wie schnell ihr Arm schwingt?Wie arbeitet man mit Beschleunigungsmesserdaten von der 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) 

Edit: Ich fand diese lib, die aussieht, als wäre es perfekt, aber wurde in 3 Jahren nicht aktualisiert ... alles ähnliche, das noch gepflegt wird?

Antwort

0

Ich fand, dass die Verwendung einer CMMotionManager auf der Uhr genauso gut funktioniert wie auf dem iPhone. Auf diese Weise können Sie startAccelerometerUpdates in awake implementieren und erhalten Echtzeitrückkopplung auf Uhrenpositionen für X Y Z -Koordinaten, so dass Sie ein besseres Verständnis der Daten erhalten;

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 { 

       } 
      } 
     } 



    }