2012-05-08 10 views
6

Ich versuche, eine Kinect und iPhone basierte Anwendung zu bauen.Wie interpretiere ich die Beschleunigungsmesser Messwerte von iPhone

Ich versuche, die Beschleunigung meiner Hände im Laufe der Zeit auf jeder der X Y und Z-Achse basierend auf der vom Kinect zurückgegebenen Trajektorie zu berechnen. Grundsätzlich wähle ich ein Standard Zeitintervall von 0,5 Sekunden oder 15 Frames (dt) und 3 Punkte, (x0, x1 und x2) über die Zeit, die durch 0,5 Sekunden getrennt sind. Zuerst sollte ich erwähnen, dass die Position der 3 Punkte in Metern angegeben ist. Unter Verwendung dieser Punkte berechne ich zwei Geschwindigkeiten (v0 = (x1 - x0)/dt und v1 = (x2 - x1)/dt). Schließlich berechne ich unter Verwendung dieser Geschwindigkeiten die Beschleunigung zwischen x1 und x2 als acc = (v1 - v0)/dt.

Ich wiederhole diese Berechnung bei jedem Rahmen und ich erhalte eine Reihe von Beschleunigungen.

Wie gesagt, ich habe auch ein iPhone und ich möchte sehen in welcher Hand ich mein iPhone habe, linke Hand oder rechte Hand. Ich möchte dies tun, indem ich versuche, die Beschleunigungen meiner Hand mit den Beschleunigungen des iPhone in der richtigen Position zu synchronisieren, so dass ich das gleiche Achsensystem habe.

Das einzige Problem ist, dass es einen großen Unterschied zwischen meinen Beschleunigungen und den Beschleunigungen des Telefons gibt.

Die Anzeigen der Telefonakceleration liegen irgendwo zwischen -2 und 2 für jede Achse, während meine zwischen -10 und 10 liegen. Wie soll ich die Beschleunigung des iPhones interpretieren, um ähnliche Messwerte wie Meter in Sekunden zu erhalten?

+0

Grundsätzlich habe ich den Summenquadratfehler zwischen den Lesungen des iPhone für ein bestimmtes Intervall und die Kinect-Beschleunigungen berechnet. Angesichts der unterschiedlichen Größe der Werte sind die erhaltenen Ergebnisse jedoch nicht so zuverlässig. – Simon

+0

Ja, das macht Sinn –

Antwort

2

Beschleunigungsmesser Daten auf dem iPhone wird in Einheiten von g-Force zur Verfügung gestellt. Die X-Achse ist an der Oberkante des Telefondisplays ausgerichtet, die Y-Achse ist an der linken Kante ausgerichtet und die Z-Achse kommt direkt aus dem Bildschirm zu Ihnen, wenn Sie sie betrachten. Wenn Ihr Telefon also auf dem Tisch liegt, sollten Sie die Werte (0, 0, -1) für die x-, y- und z-Achse erhalten. Wenn Sie Ihr Telefon fallen lassen, während es im freien Fall ist, sollten Sie (0, 0, 0) erhalten.

Angenommen, Sie das Telefon wie diese ausgerichtet halten, wie Sie es sich frei bewegen, die 3-Dimensional Beschleunigung in Metern erhalten pro Sekunde zum Quadrat:

- (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration 
{ 
    float g = 9.80665f; 
    float x = acceleration.x * g; 
    float y = acceleration.y * g; 
    float z = (acceleration.z + 1.0f) * g; 
    // x, y, and z now hold the absolute acceleration in ms^-2 
} 

Beachten Sie, dass die Wirkung der Erdanziehung, um subtrahieren müssen um die Beschleunigung relativ zu Ihrem Wohnzimmer anstatt relativ zur 4-dimensionalen Raumzeit zu erhalten.

Seien Sie sich auch bewusst, dass der iPhone Beschleunigungssensor ziemlich laut ist und diese Werte zittern, selbst wenn das Telefon statisch ist, also sollten Sie etwas Glättung anwenden. Wenn Sie jedoch eine ähnliche Technik wie die Positionsdaten verwenden und die Werte für jeden Frame in ein Array setzen, um einen gleitenden Durchschnittswert für die letzten 0,5 Sekunden zu erhalten, werden die Daten für Sie bereits geglättet.

Eine andere Sache zu beachten ist, dass der iPhone Beschleunigungsmesser bei etwa 2,3 g Gipfel. Diese g-Kräfte sind nicht schwer zu erreichen (zum Beispiel, wenn Sie Ihre Hände zusammen klatschen), so dass Sie sie überschreiten können und Techniken, die Daten sammeln, werden nicht sehr zuverlässig sein.

Verwandte Themen