2011-11-25 13 views
13

Pracuję nad aplikacją na Androida, która może obliczyć ruch urządzenia w 6 kierunkach. Myślę, że mogę używać przyspieszenia jako;Korzystanie z akcelerometru, żyroskopu i kompasu do obliczania ruchu urządzenia w świecie 3D

"x = a.t^2" ale a nie jest stałą wartością. I to jest problem. Jak obliczyć całkowity ruch?

+0

Będziesz musiał sondować wartość "a" i wypracować średnie przyspieszenie i zastosować tę średnią w okresie czasu między ankietami. – Bringer128

+0

Bardzo ciekawy, jak udało ci się rozwiązać ten problem i czy masz go tak precyzyjny, aby umożliwić precyzyjną nawigację. – ina

Odpowiedz

18

Przyspieszeniomierz zapewnia trzy kierunki (x, y, z). Są to pomiary przyspieszenia, które utrudniają określenie pozycji urządzenia. Ale należy pamiętać, przyspieszenie jest związane z pozycji poprzez integrację:

a(t) = a[x] 
v(t) = a[x]t + c 
x(t) = a[x]t^2 + ct + d 

Problem jest, że nie może wiedzieć, c lub d bo jak wziąć pochodną stałe rezygnują. Jest więc pewna ilość, której nie można uzyskać z brakiem c i d. Możesz spróbować zrekompensować, pamiętając wartości używane dla nich ostatnio. Po pobraniu 3 próbek można rozpocząć obliczanie pozycji.

Istnieje wiele informacji na temat interpretacji danych z czujników. Jak ustalenie, gdzie grawitacja służy do orientacji, i odejmowanie grawitacji, aby uzyskać liniowe przyspieszenie.

http://developer.android.com/reference/android/hardware/SensorEvent.html

Oto sposób wymyślić pozycji za pomocą akcelerometru wraz z algorytmem znajdowania pozycji w szczegółach:

http://www.freescale.com/files/sensors/doc/app_note/AN3397.pdf

+2

Szczególnie drugie ogniwo to dla mnie złota kopalnia. Wielkie dzięki. – kubudi

+0

Po prostu ostrzeżenie: otrzymasz straszne błędy integracyjne. – Ali

+0

To będzie. Poczekaj. – kubudi

4

To prawda, masz pozycję dzięki zintegrowaniu przyspieszenie liniowe dwukrotnie. Ale błąd jest okropny. W praktyce jest bezużyteczne.

Oto an explanation why (Google Tech Talk) o 23:20. Gorąco polecam ten film.

Nie jest to hałas przyspieszeniomierza, który powoduje problem, ale gyro white noise, patrz podrozdział 6.2.3 Propagacja błędów. (Nawiasem mówiąc, będziesz potrzebował także żyroskopów.)

Podobnym pytaniem jest Distance moved by Accelerometer.

+0

dzięki, ale myślę, że nie potrzebuję żyroskopu. Czy możesz wyjaśnić, dlaczego Twoim zdaniem konieczne jest przesunięcie odległości? – kubudi

+0

The SensorManager potrzebuje żyroskopy, jeśli używasz przyspieszenia liniowego. Jeśli chodzi o zaakceptowaną odpowiedź, mam nadzieję, że wiesz, że wynik, jaki otrzymasz, będzie bardzo słaby. O wiele gorsze, niż się spodziewasz. – Ali

+0

Dlaczego? Gyro zwraca Ci prędkość kątową. Potrzebujesz tego do przyspieszenia. Naprawdę tego nie rozumiem. – kubudi