2011-08-12 9 views

Odpowiedz

2

Teoretycznie można to zrobić; w praktyce nie.

Musiałbyś założyć, że znasz początkową prędkość, ale zakładając, że zaczynasz od 0 prędkości, nie jest to takie złe założenie.

Należy również znać rzeczywistą orientację urządzenia przez cały okres. W przeciwnym razie nie można rozróżnić zmiany przyspieszenia ze względu na rzeczywiste przyspieszenie w stosunku do samego obrotu urządzenia.

(Pamiętaj, trzeba wyjąć przyspieszenie ziemskie od odczytów!)

Wreszcie, błędy będą sumować się od jakiegoś czasu, nie tylko dlatego, że miarą przyspieszenia jest niedoskonały, ale dlatego, że tylko uzyskać dyskretne próbki w czasie.

Oprócz tych wszystkich rzeczy, oczywiście, to działa! Interfejs API informuje, w jakich jednostkach znajdują się odczyty (m/s^2). Możesz poprosić czujnik o bardzo szybkie aktualizacje. Myślę, że byłoby ciekawie zobaczyć, jak to jest (in) dokładne, pisząc aplikację, która to robi, a następnie ustawiając telefon na płasko, a następnie idąc do przodu i zatrzymując się z nim. Jak blisko 0 jest odczyt?

+4

To jeszcze bardziej interesujące (i zabawne) po prostu pozostawienie urządzenia na stole przez pół minuty, odjąć grawitację i zintegrować to, co zostało dwa razy, aby uzyskać zmianę pozycji. Szacuje się, że urządzenie przesunęło się o kilkaset metrów. –

+0

Hah OK, więc jest znacznie gorzej, niż myślałem ... –

+0

Próbowałem to zrobić. Dodałem filtr dolnoprzepustowy do prędkości, aby uniknąć wyprowadzenia ... w tym przypadku nie mam znaczącego ruchu przy użyciu nieruchomego urządzenia. Ale ruch, nawet ruch kilku centymetrów daje wyniki, które wydają się losowe. Prędkość terminalu często jest bardzo różna od 0. – ARLabs

0

Prawdopodobnie nie, ponieważ jeśli poruszasz się z małą stałą prędkością, nie sądzę, że akcelerometr wykryje cokolwiek.

+0

To prawda, chociaż faktycznie wykryje grawitację (tak gra kiedykolwiek używa tej rzeczy, aby poznać orientację urządzenia) w stanie spoczynku lub przy stałej prędkości. –

+0

Mogę określić, czy ktoś się porusza, sprawdzając zmianę przyspieszenia. Powinienem być w stanie rozpoznać duże różnice, które zachodzą, gdy przechodzisz od małych i szybkich zmian, które występują, gdy stoisz nieruchomo. – Fixpoint

+0

2Sean: Android ma czujnik przyspieszenia liniowego, który odejmuje grawitację. – Fixpoint

3

Ogólnie rzecz biorąc, akcelerometr znajdujący się na urządzeniach z systemem Android jest zbyt głośny, aby móc zintegrować sygnał i uzyskać prędkość. Co więcej, potrzebujesz prawie perfekcyjnej oceny orientacji urządzenia, a nawet używając żyroskopu (który ma niewiele urządzeń) jest zwykle zbyt głośny.

Głównym problemem jest odjęcie grawitacji od sygnału akcelerometru, ponieważ siła grawitacji jest zwykle bardzo dużym elementem sygnału. Przy szacowanym przybliżeniu orientacji telefonu grawitacja jest odejmowana w niewłaściwym kierunku. To pozostawia komponenty przyspieszenia w złym kierunku, a twoja prędkość szybko staje się bezużyteczna.

Potrzebny jest zasadniczo sposób na regularne resetowanie wartości prędkości (raz na sekundę lub mniej), gdy wiadomo, że urządzenie się nie porusza. Jednym ze sposobów, aby to zrobić, pod warunkiem, że użytkownik urządzenia chodzi, jest zamontowanie urządzenia na stopie i próba wykrycia, kiedy stopa znajduje się na ziemi (prędkość wynosi zero we wszystkich kierunkach). Jednak montaż urządzenia u stóp użytkownika jest zwykle zbyt ciężkim ograniczeniem dla praktycznego zastosowania.

Istnieją inne sposoby podejścia do śledzenia ruchu. Na przykład, stosując wykrywanie krokowe i żyroskop, byłem w stanie śledzić chodzącą osobę przez minutę lub dwie z dokładnością do kilku metrów.

+0

jak mogę obliczyć detekcję kroku za pomocą akcelerometru Android? @Anton Hansson – Erum

Powiązane problemy