Dokładność akcelerometru w systemie Android (nawigacja bezwładnościowa)

109

Zastanawiałem się nad wdrożeniem bezwładnościowego systemu nawigacyjnego dla telefonu z Androidem, co jest trudne, biorąc pod uwagę dokładność akcelerometru i ciągłe fluktuacje odczytów.

Na początek położyłem telefon na płaskiej powierzchni i spróbowałem 1000 odczytów akcelerometru w kierunkach X i Y (równolegle do stołu, więc grawitacja nie działała w tych kierunkach). Następnie uśredniłem te odczyty i użyłem tej wartości do skalibrowania telefonu (odejmując tę ​​wartość od każdego kolejnego odczytu).

Następnie przetestowałem system, ponownie kładąc go na stole i próbkując 5000 odczytów akcelerometru w kierunkach X i Y. Spodziewałbym się, biorąc pod uwagę kalibrację, że te przyspieszenia powinny sumować się do 0 (w przybliżeniu) w każdym kierunku. Jednak tak nie jest, a całkowite przyspieszenie ponad 5000 iteracji nie jest nawet bliskie 0 (średnio około 10 na każdej osi).

Zdaję sobie sprawę, że nie widząc mojego kodu, odpowiedź może być trudna, ale w bardziej ogólnym sensie ...

Czy to po prostu przykład niedokładności odczytów akcelerometru w telefonie komórkowym (HTC Desire S), czy jest bardziej prawdopodobne, że popełniłem błędy w kodowaniu?

woodstock365
źródło
1
webvr-polyfill to świetne źródło inspiracji: github.com/borismus/webvr-polyfill/tree/master/src zobacz, jak wypełniają czujnik VR za pomocą danych akcelerometru: github.com/borismus/webvr-polyfill/blob/master / src /…
SC
Pytanie, które dotyczy również żyroskopu: stackoverflow.com/questions/8264518/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Odpowiedzi:

128

Pozycję uzyskuje się poprzez dwukrotne całkowanie przyspieszenia liniowego, ale błąd jest straszny. W praktyce jest to bezużyteczne.

Oto wyjaśnienie, dlaczego (Google Tech Talk) o 23:20 . Bardzo polecam ten film.

To nie szum akcelerometru powoduje problem, ale biały szum żyroskopu , patrz podrozdział 6.2.3 Propagacja błędów. (Nawiasem mówiąc, będziesz też potrzebować żyroskopów.)

Jeśli chodzi o pozycjonowanie w pomieszczeniach, przydały mi się te:

Oparta na RSSI lokalizacja wewnętrzna i śledzenie za pomocą Sigma-Point Kalman Smoothers

Śledzenie pieszych za pomocą czujników bezwładności montowanych w butach

Zwiększanie wydajności krokomierzy za pomocą pojedynczego akcelerometru

Nie mam pojęcia, jak te metody działałyby w rzeczywistych aplikacjach lub jak zmienić je w fajną aplikację na Androida.

Podobna kwestia jest to .

AKTUALIZACJA:

Najwyraźniej istnieje nowsza wersja od powyższego Olivera J. Woodmana, „Wprowadzenie do nawigacji inercyjnej”, jego praca doktorska:

Lokalizacja pieszych w środowiskach wewnętrznych

Ali
źródło
2
Zdaję sobie sprawę, że to było dawno temu, ale mam dodatkowe pytanie. Aparat w systemie Android JB ma funkcję „panoramy”, która umożliwia wykonanie zdjęcia panoramicznego poprzez poruszanie telefonem, obracanie go lub liniowe przesuwanie wzdłuż jednej osi. Aby to zrobić, musi stosunkowo dokładnie śledzić położenie telefonu - co najmniej lepiej niż błąd 20 cm / s wspomniany w filmie ta odpowiedź łączy. Jak to się dzieje? Czy można w jakiś sposób poprawić jakość śledzenia bezwładnościowego? A może wykorzystuje sprytne przetwarzanie obrazu, używając tylko aparatu?
Tom
1
@Tom, wierzę w to drugie, telefon łączy razem obrazy wyłącznie za pomocą algorytmów przetwarzania obrazu. Dlaczego myślisz, że telefon musi śledzić swoje położenie, aby utworzyć zdjęcie panoramiczne? Można to było zrobić zwykłymi aparatami jeszcze w latach 90-tych i ewidentnie nie mieliśmy wtedy akcelerometrów w aparatach :) Oczywiście zdjęcia zostały konkatenowane na zwykłych pecetach. Ale nie potrzebujesz do tego pozycji, algorytmy przetwarzania obrazu są wystarczające. Mam nadzieję że to pomoże.
Ali
Jest to coś zupełnie innego niż stara praca polegająca na ręcznym zrobieniu kilku zdjęć, a następnie ich późniejszym zszywaniu. W jakiś sposób śledzi swoją pozycję w czasie rzeczywistym. Trochę trudno to wyjaśnić bez demonstrowania tego. Nie musisz robić zdjęć ręcznie - telefon sam decyduje, kiedy oddalisz się na tyle, aby zrobić kolejne. Podczas robienia zdjęć wyświetla mały pasek u dołu z podglądem panoramy. Jeśli na przykład skierujesz kamerę zbyt nisko (na przykład), zacznie ona emitować sygnał dźwiękowy i wyświetlać strzałkę w górę, aby poinformować, że musisz przesunąć ją z powrotem w górę.
Tom
2
W rzeczywistości wydaje się, że wykorzystuje przetwarzanie obrazu - rozpoczęcie panoramy, a następnie machnięcie ręką przed kamerą bardzo zmyli jego system śledzenia pozycji!
Tom
@Tom OK. Myślę, że wykorzystuje głównie przetwarzanie obrazu (jak sugeruje to również twój ostatni komentarz), ale prawdopodobnie będzie to połączone ze śledzeniem orientacji (ale nie pozycji).
Ali
19

Po prostu głośno myślę, a nie grałem jeszcze z API akcelerometru dla Androida, więc wytrzymaj ze mną.

Przede wszystkim tradycyjnie, aby uzyskać nawigację z akcelerometrów, potrzebujesz akcelerometru 6-osiowego. Potrzebujesz przyspieszeń w X, Y i Z, ale także obrotów Xr, Yr i Zr. Bez danych o rotacji nie masz wystarczających danych do ustalenia wektora, chyba że założymy, że urządzenie nigdy nie zmieni swojego nastawienia, co byłoby dość ograniczające. I tak nikt nie czyta TOS.

Aha, i wiesz, że INS dryfuje wraz z obrotem Ziemi, prawda? Więc to też. Godzinę później w tajemniczy sposób wspinasz się po 15-stopniowym zboczu w kosmos. To przy założeniu, że masz INS zdolny do utrzymywania lokalizacji tak długo, czego telefon jeszcze nie potrafi.

Lepszym sposobem wykorzystania akcelerometrów - nawet z akcelerometrem 3-osiowym - do nawigacji byłoby połączenie z GPS w celu kalibracji INS, gdy tylko jest to możliwe. Tam, gdzie GPS nie działa, INS ładnie komplementuje. GPS może nagle zestrzelić Cię 3 przecznice dalej, ponieważ znalazłeś się zbyt blisko drzewa. INS nie jest świetny, ale przynajmniej wie, że nie uderzył cię meteor.

Możesz zarejestrować dane akcelerometru telefonu i wiele z nich. Warte tygodni. Porównaj to z dobrymi (mam na myśli naprawdę dobrymi) danymi GPS i użyj przetwarzania danych do ustalenia korelacji trendów między danymi akcelerometru a znanymi danymi GPS. (Wskazówka od profesjonalisty: będziesz chciał sprawdzać almanach GPS przez kilka dni z dobrą geometrią i dużą liczbą satelitów. Czasami możesz mieć tylko 4 satelity, a to nie wystarczy). idzie z telefonem w kieszeni, dane akcelerometru rejestrują bardzo specyficzny wzorzec. Na podstawie gromadzenia danych ustalasz profil dla tego urządzenia, z tym użytkownikiem i jaką prędkość reprezentuje ten wzorzec, kiedy ma dane GPS. Powinieneś być w stanie wykryć zakręty, wchodzenie po schodach, siadanie (kalibracja do czasu prędkości 0! ) i różne inne zadania. Sposób trzymania telefonu musiałby być traktowany jako osobne dane wejściowe. Czuję sieć neuronową używaną do eksploracji danych. Innymi słowy, coś ślepego na znaczenie danych wejściowych. Algorytm szukałby tylko trendów we wzorcach i tak naprawdę nie zwracałby uwagi na rzeczywiste pomiary INS. Wszystko, co by wiedział, tohistorically, when this pattern occurs, the device is traveling and 2.72 m/s X, 0.17m/s Y, 0.01m/s Z, so the device must be doing that now.I odpowiednio przesunąłby utwór do przodu. Ważne jest, aby był całkowicie ślepy, ponieważ samo włożenie telefonu do kieszeni może być zorientowane w jednej z 4 różnych orientacji i 8, jeśli zmienisz kieszenie. Telefon można też trzymać na wiele sposobów. Mówimy tutaj o dużej ilości danych.

Oczywiście nadal będziesz mieć dużo dryfu, ale myślę, że w ten sposób będziesz miał więcej szczęścia, ponieważ urządzenie będzie wiedzieć, kiedy przestałeś chodzić, a dryf pozycyjny nie będzie utrwalał się. Wie, że stoisz w miejscu na podstawie danych historycznych. Tradycyjne systemy INS nie mają tej funkcji. Dryf utrwala się we wszystkich przyszłych pomiarach i związkach wykładniczo. Bezbożna dokładność lub posiadanie dodatkowej nawigacji do sprawdzania w regularnych odstępach czasu jest absolutnie niezbędne w przypadku tradycyjnych INS.

Każde urządzenie i każda osoba musiałyby mieć swój własny profil. To dużo danych i dużo obliczeń. Każdy porusza się z różnymi prędkościami, różnymi krokami, wkłada telefony do różnych kieszeni itp. Z pewnością wdrożenie tego w prawdziwym świecie wymagałoby obsługi przetwarzania liczb po stronie serwera.

Jeśli używałeś GPS do początkowej linii bazowej, część problemu polega na tym, że GPS ma własne migracje w czasie, ale nie są to błędy utrwalające. Umieść odbiornik w jednym miejscu i zarejestruj dane. Jeśli nie ma poprawek WAAS, możesz łatwo uzyskać poprawki lokalizacji dryfujące w przypadkowych kierunkach 100 stóp wokół ciebie. Z WAAS, może nawet do 6 stóp. W rzeczywistości możesz mieć więcej szczęścia z systemem RTK poniżej metra w plecaku, aby przynajmniej obniżyć algorytm SSN.

Nadal będziesz mieć dryft kątowy z INS, używając mojej metody. To jest problem. Ale jeśli posunąłeś się tak daleko, aby zbudować sieć SSN, która przez tygodnie przelewałaby dane GPS i INS między n użytkowników i faktycznie działało do tego momentu, oczywiście nie masz nic przeciwko big data. Podążaj dalej tą ścieżką i wykorzystaj więcej danych, aby rozwiązać problem dryfu kątowego: ludzie są stworzeniami z przyzwyczajenia. Robimy prawie to samo, jak chodzenie po chodnikach, drzwiach, wchodzeniu po schodach i nie robimy szalonych rzeczy, takich jak chodzenie po autostradach, ścianach czy balkonach.

Powiedzmy, że bierzesz stronę z Big Brother i zaczynasz przechowywać dane o tym, dokąd się udają. Możesz rozpocząć mapowanie miejsc, w których ludzie powinni chodzić. Można się założyć, że jeśli użytkownik zacznie wchodzić po schodach, znajdzie się u tej samej podstawy schodów, co osoba przed nią. Po 1000 iteracjach i kilku korektach metodą najmniejszych kwadratów Twoja baza danych prawie wie, gdzie znajdują się te schody z dużą dokładnością. Teraz możesz skorygować odchylenie kątowe i lokalizację, gdy osoba zaczyna chodzić. Kiedy uderza w te schody, skręca w dół korytarza lub jedzie chodnikiem, każdy dryf można skorygować. Twoja baza danych zawierałaby sektory ważone według prawdopodobieństwa, że ​​ktoś tam chodził lub że ten użytkownik przeszedł tam w przeszłości. Przestrzenne bazy danych są zoptymalizowane pod kątem tego użyciadivide and conquerprzydzielać tylko sektory, które mają znaczenie. To byłoby coś w rodzaju tych projektów MIT, w których robot wyposażony w laser zaczyna od czarnego obrazu i maluje labirynt w pamięci, wykonując każdy obrót, oświetlając miejsca, w których są wszystkie ściany.

Obszary o dużym natężeniu ruchu otrzymałyby większą wagę, a obszary, w których nikt nigdy nie miał wagi 0. Obszary o większym natężeniu ruchu mają wyższą rozdzielczość. W gruncie rzeczy skończyłbyś z mapą wszędzie, gdzie ktokolwiek był, i użyłby jej jako modelu przewidywania.

Nie zdziwiłbym się, gdyby za pomocą tej metody można było określić, jakie miejsce w teatrze zajmuje dana osoba. Biorąc pod uwagę wystarczającą liczbę użytkowników chodzących do kina i wystarczającą rozdzielczość, będziesz mieć dane mapujące każdy rząd kina i szerokość każdego rzędu. Im więcej osób odwiedza lokalizację, tym większa dokładność, z jaką można przewidzieć, że dana osoba się znajduje.

Ponadto, gorąco polecam zakup (bezpłatnej) subskrypcji magazynu GPS World, jeśli jesteś zainteresowany obecnymi badaniami tego rodzaju. Każdego miesiąca się z tym upajam.

RyanJMcGowan
źródło
„Byłoby to połączenie z GPS w celu kalibracji INS, kiedy tylko jest to możliwe. Tam, gdzie GPS nie działa, INS ładnie komplementuje.” O ile rozumiem, po to jest filtrowanie Kalmana. Łączy w sobie mocne strony każdej metody, aby wyeliminować słabości drugiej
endolith
8

Nie jestem pewien, jak duże jest twoje przesunięcie, ponieważ zapomniałeś uwzględnić jednostki. („Około 10 na każdej osi” niewiele mówi.: P) To powiedziawszy, nadal jest to prawdopodobnie spowodowane niedokładnością sprzętu.

Akcelerometr jest odpowiedni do takich rzeczy, jak określanie orientacji telefonu względem grawitacji lub wykrywanie gestów (potrząsanie telefonem lub uderzanie nim itp.)

Jednak próba obliczenia martwego przy użyciu akcelerometru może narazić Cię na wiele złożonych błędów. W przeciwnym razie akcelerometr musiałby być niesamowicie dokładny, a to nie jest powszechny przypadek użycia, więc wątpię, aby producenci sprzętu optymalizowali go.

Trevor Johns
źródło
Dziękuję za odpowiedź. Akcelerometry odczytują około -0,8 ms ^ -2 na obu osiach X i Y podczas postoju, więc użyłem tego jako mojego przesunięcia. Przez bit "Około 10" miałem na myśli, że ponad 5000 iteracji, sumując każde z przyspieszeń na jednej osi z czujnika, nie sumuje mniej więcej 0 ms ^ -2 (tak jakby wahał się równomiernie powyżej i poniżej przesunięcia wartość), ale zamiast tego rejestrował przyspieszenie bardziej w jednym kierunku, co po podwójnej integracji w celu znalezienia pozycji działało, gdy telefon poruszał się około 3 m na minutę.
woodstock365
+1 za użycie terminu nawigacyjnego w lotnictwie „martwe obliczenie”. Chociaż martwe obliczenie lepiej pasowałoby do nawigacji z kamerą niż INS.
RyanJMcGowan
7

Akcelerometr systemu Android jest cyfrowy, pobiera próbki przyspieszenia przy użyciu tej samej liczby „wiader”, powiedzmy, że jest ich 256, a akcelerometr może wykrywać od -2 g do + 2 g. Oznacza to, że wynik byłby kwantyzowany w kategoriach tych „pojemników” i przeskakiwałby wokół jakiegoś zestawu wartości.

Aby skalibrować akcelerometr z Androidem, musisz pobrać próbki z dużo ponad 1000 punktów i znaleźć „tryb”, wokół którego zmienia się akcelerometr. Następnie znajdź liczbę punktów cyfrowych według wahań sygnału wyjściowego i użyj tego do filtrowania.

Zalecam filtrowanie Kalmana po uzyskaniu trybu i fluktuacji +/-.

Alex Stone
źródło
1
Szukałem metod kalibracji. Wygląda na to, że potrzebuję twojej sugestii. Muszę tylko potwierdzić. Kiedy znajdę tryb, powiem, że to 0.5. Nie otrzymałem opcji „Następnie znajdź liczbę punktów cyfrowych według wahań sygnału wyjściowego i użyj tego do filtrowania”. Czy mógłbyś szerzej to rozwinąć.
Nazerke
1
Powiedzmy, że twój akcelerometr ma 256 punktów wyjściowych i waha się o 0,015 m / s ^ 2 między odczytami. Gdy położysz urządzenie na stole, wydajność może wahać się nawet w postaci wielokrotności 0,015 m / s ^ 2. Powiedzmy, że otrzymujesz odczyt 0 +/- (X * 0,015). Musisz znaleźć X (który byłby liczbą parzystą). Na przykład mój X może wynosić 3. W tym przypadku zignorowałbym zmiany odczytu akcelerometru, które są mniejsze niż 0,045 m / s ^ 2
Alex Stone
więc akcelerometry w telefonach z Androidem nie są jeszcze takie dobre… prawda?
Techsin
4

Zdaję sobie sprawę, że jest to dość stare, ale omawiana kwestia nie została poruszona w ŻADNEJ z udzielonych odpowiedzi.

To, co widzisz, to liniowe przyspieszenie urządzenia, w tym efekt grawitacji. Jeśli położysz telefon na płaskiej powierzchni, czujnik zgłosi przyspieszenie spowodowane grawitacją, które jest przybliżone 9.80665 m/s2, dając tym samym 10, które widzisz. Czujniki są niedokładne, ale nie są TAKIE niedokładne! Zobacz tutaj przez kilka przydatnych linków i informacji o czujniku może być po.

Simon O'Hanlon
źródło
17
Nie - myślę, że źle odczytałeś pytanie: „... odczyty w kierunkach X i Y (równolegle do stołu, więc grawitacja nie działa w tych kierunkach)”. 9,8 / s2 byłoby na osi Z.
czajniczek 7
0

Zakładasz, że odczyty akcelerometru w kierunkach X i Y, które w tym przypadku są całkowicie szumem sprzętowym, utworzą rozkład normalny wokół twojej średniej. Najwyraźniej tak nie jest.

Jedyną rzeczą, którą możesz spróbować, jest narysowanie tych wartości na wykresie i sprawdzenie, czy pojawi się jakikolwiek wzór. Jeśli nie, to szum jest statystycznie losowy i nie można go skalibrować - przynajmniej dla konkretnego sprzętu telefonu.

Sarsaparilla
źródło