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?
źródło
Odpowiedzi:
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
źródło
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ł, to
historically, 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życia
divide and conquer
przydzielać 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.
źródło
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.
źródło
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 +/-.
źródło
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.źródło
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.
źródło