2012-05-08 13 views
6

Próbuję zbudować aplikację opartą na systemie Kinect i iPhone.Jak interpretować odczyty z akcelerometru z iPhone'a

Próbuję obliczyć przyspieszenie moich rąk w czasie na każdej z osi X Y i Z w oparciu o trajektorię zwróconą przez kinect. Zasadniczo wybieram standardowy odstęp czasu wynoszący 0,5 sekundy lub 15 klatek (dt) i 3 punkty, (x0, x1 i x2) z czasem, które są rozdzielane o 0,5 sekundy. Po pierwsze powinienem wspomnieć, że pozycja 3 punktów jest wymieniona w metrach. Korzystając z tych punktów obliczam dwie prędkości (v0 = (x1 - x0)/dt i v1 = (x2 - x1)/dt). Na koniec, korzystając z tych prędkości, obliczam przyspieszenie między x1 i x2 jako acc = (v1 - v0)/dt.

Powtarzam te obliczenia w każdej klatce i otrzymuję tablicę przyspieszeń.

Jak już powiedziałem, mam też iPhone'a i chcę zobaczyć, w której ręce mam iPhone'a, lewą rękę lub prawą rękę. Chcę to zrobić, próbując dopasować przyspieszenia mojej ręki do przyspieszenia iPhone'a trzymanego we właściwej pozycji, tak, że mam ten sam system osi.

Jedyny problem polega na tym, że istnieje ogromna różnica między przyspieszeniami a akceleracją telefonu.

Odczyty Acceelaration telefonu są gdzieś od -2 do 2 dla każdej osi, natomiast moje są między -10 a 10. Jak należy interpretować przyspieszenia iPhone w celu uzyskania podobnych środków do kopalni w metrach/sekundach?

+0

Zasadniczo obliczyłem błąd sumy kwadratów między odczytami iPhone'a dla danego interwału i przyspieszenia Kinect. Jednakże, biorąc pod uwagę różną skalę wartości, uzyskane wyniki nie są wiarygodne. – Simon

+0

Tak, to ma sens –

Odpowiedz

2

Dane dotyczące akcelerometru na urządzeniu iPhone podano w jednostkach g-force. Oś X jest wyrównana do górnej krawędzi ekranu telefonu, oś Y jest wyrównana do lewej krawędzi, a oś Z wychodzi prosto z ekranu w Twoją stronę, jeśli na nią patrzysz. Tak więc z telefonem spoczywającym na stole odkrytym, powinieneś otrzymać wartości odpowiednio (0, 0, -1) dla osi X, Y i Z. Jeśli upuścisz telefon, będąc w stanie swobodnego spadania, powinieneś uzyskać (0, 0, 0).

Zakładając trzymasz telefon wyrównane tak, jak poruszać się wokół, aby uzyskać 3-Dimensional przyspieszenie w metrach na sekundę do kwadratu:

- (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 
} 

Zauważ, że należy odjąć efekt grawitacji ziemskiej w celu aby uzyskać przyspieszenie w stosunku do twojego salonu, a nie w stosunku do 4-wymiarowej czasoprzestrzeni.

Należy również pamiętać, że akcelerometr iPhone'a jest dość głośny i te wartości drgają, nawet gdy telefon jest statyczny, więc należy zastosować wygładzanie. Jeśli jednak użyjesz podobnej techniki do tego, co wydajesz się robić z danymi o położeniu, umieszczając wartości w tablicy dla każdej klatki, aby uzyskać średnią kroczącą w ciągu ostatnich 0,5 sekundy, to już wygładza dane za Ciebie.

Inną rzeczą, o której należy pamiętać, jest to, że przyspieszeniomierz iPhone'a osiąga szczyt około 2,3 g. Te siły ciężkości nie są trudne do osiągnięcia (na przykład, gdy klaszczą w dłonie), więc możesz je przekroczyć, a techniki gromadzenia danych nie będą bardzo wiarygodne.

Powiązane problemy