Obecnie pracuję na urządzeniu, które wykorzystuje zawsze włączony akcelerometr 3D (przy użyciu skali + -2g) i czujnik żyroskopowy 3D (przy użyciu skali + -250g).
Potrafię odczytać każdy możliwy wektor (X, Y, Z) i ich przyspieszenie (g) i szybkość kątową (dps), a także kąt, w którym aktualnie znajduje się urządzenie. Ale moim problemem jest to, że gdy urządzenie jest w pozycji pochylonej (0 g, gdy nie ma przechyłu), przyspieszenie wynosi pomiędzy (w dół) 0g -> - 1g lub między (w górę) 0g-> 1g, w zależności od tego, jaki kąt jest obecnie urządzenie. Poniżej znajduje się zdjęcie, które, mam nadzieję, usuwa pomysł.
Urządzenie będzie znajdować się w samochodzie i powinno mierzyć przyspieszenie, gdy samochód zwalnia (hamulec). Jeśli jednak urządzenie jest już w trakcie pochylania, akcelerometr mierzy pewne przyspieszenie, które powoduje pochylenie, co utrudnia stwierdzenie, czy urządzenie ma naprawdę jakieś przyspieszenie, czy to tylko pochylenie powoduje przyspieszenie.
X i Y-Osi wytwarzają 0 g, a oś Z wynosi 1 g, gdy urządzenie nie ma przechyłu i znajduje się na płaskiej powierzchni. Pochylenie powoduje, że odczyt osi X idzie w kierunku 1 g, jeśli przechylenie jest w górę, i -1 g w dół. + -1g osiąga się, gdy urządzenie jest ustawione na 90 * stopni od pierwotnej pozycji
Zastanawiałem się, jak wyeliminować to przyspieszenie, które powoduje pochylenie, i zmierzyć tylko rzeczywiste przyspieszenie urządzenia, ale po prostu nie mogę wymyślić rozwiązania tego problemu dzięki następującym danym, które mogę wytworzyć.
Zasadniczo myślę, że gdybym mógł zmierzyć tylko przyspieszenie osi X (obraz), nawet jeśli czujnik jest pochylony jak na zdjęciu.
Mam nadzieję, że ta wiadomość nie jest zbyt trudna do zrozumienia ze względu na moje umiejętności angielskiego i sposób, w jaki staram się wyjaśnić mój problem.
źródło
Odpowiedzi:
Tylko szkic rozwiązania.
Weź pod uwagę wszystkie 3 osie.
Przyspieszenie ziemskie, niezależnie od pochylenia, zawsze będzie wynosić 1G, jako suma wektorowa X, Y, Z, bez względu na pochylenie. Możesz wyobrazić sobie przyspieszenie w spoczynku lub ustalonym ruchu jako punkt na kuli o promieniu 1G. (Jeśli jesteś idealnie poziomy, ten punkt będzie (0, 0, -1), tj. Bezpośrednio pod tobą).
Przyspieszenie spowodowane hamowaniem spowoduje zniekształcenie samej kuli; suma wektorów X, Y, Z nie będzie już wynosić 1G.
Więc
daje całkowite przyspieszenie. Jeśli jest równy G, jesteś w spoczynku; w przeciwnym razie przyspieszasz, a jest sumą wektorów G i prawdziwego przyspieszenia.A
Teraz musisz znaleźć prawdziwe przyspieszenie, które zwykle będzie wektorem w kierunku do przodu (lub do tyłu), co wyjaśnia różnicę między i G. Musisz odjąć jakiś punkt na kuli G od , aby znaleźć (mam nadzieję, że unikalny rozwiązanie) wektor tylko ze składnikiem X (do przodu / do tyłu). To jest twoje przyspieszenie. (Pozostawię trygonometrię jako prostą łamigłówkę, mam nadzieję, że pomysł jest jasny).AA A
Chyba że skręcasz lub ześlizgujesz się, więc potrzebujesz pewności informacji z kierownicy i ABS; staje się to problemem łączenia danych. Takie podejście zapewni oszacowanie przyspieszenia. Aby sprawdzić poczytalność i udoskonalić tę ocenę, połącz ją z innymi (również zawodnymi) źródłami danych, jak w odpowiedzi Phila Frosta, używając filtra Kalmana.
źródło
Twoim głównym błędem jest nie traktowanie przyspieszenia jako pojedynczego wektora. Gdy samochód jest w spoczynku, ten wektor będzie zawsze wynosił 1 g w górę. Nie patrz tylko na składnik X surowych danych akcelerometru. Zrób prawdziwą matematykę wektorową.
Nie. O to chodzi. To, co mówisz, może być prawdą w przypadku składnika X mocy wyjściowej akcelerometru, ale nie jest prawdą w przypadku przyspieszenia, gdy samochód jest w spoczynku.
Idealnym zmierzonym przyspieszeniem będzie zawsze rzeczywiste przyspieszenie samochodu (względem ziemi), plus przyspieszenie 1 g spowodowane grawitacją. Ten ostatni jest zawsze w górę. Jeśli znasz orientację samochodu, możesz odjąć 1 g ze względu na grawitację, aby znaleźć przyspieszenie, którego faktycznie szukasz.
Należy zauważyć, że w takich odczytach występuje znaczny błąd, zwłaszcza z tanich czujników MEMS. Chociaż powinieneś być w stanie uzyskać dobry pomysł na temat krótkoterminowych zdarzeń, takich jak gwałtowne przyspieszenie lub gwałtowne hamowanie, dane te nie są wystarczająco dobre, aby prowadzić nawigację bezwładności przez co najmniej kilka sekund.
źródło
Jak stwierdzono w innych odpowiedziach, akcelerometr zapewnia trójwymiarowy wektor, który jest sumą grawitacji i innego przyspieszenia w samochodzie spowodowanego silnikiem, hamulcami lub innymi siłami działającymi na samochód. Twoim celem jest odjęcie przyspieszenia grawitacyjnego od mocy akcelerometru, aby znaleźć pozostałe pozostałe siły.
Aby uzyskać najlepszą dokładność, nie można zakładać, że grawitacja jest zawsze „zmniejszana” w stosunku do akcelerometru. Na przykład samochód może znajdować się na wzgórzu. Wszystkie obliczenia muszą być wykonane za pomocą trójwymiarowej matematyki wektorowej, a także musisz mieć przybliżoną orientację samochodu, aby znać kierunek wektora grawitacji do odjęcia.
Filtr Kalmana jest wspólne podejście tutaj. Chodzi o to, aby wziąć wszystkie dane, które mogą zmienić orientację samochodu, a następnie wykonać średnią ważoną pomiarów, połączyć to z tym, co wiesz o fizyce działającej na samochód, aby uzyskać probabilistyczną ocenę nowa orientacja samochodu i kierunek „w dół”.
Im więcej masz danych i im dokładniej możesz modelować fizykę samochodu, tym dokładniejsza może być ta ocena.
Na przykład, jeśli masz żyroskop i mierzysz nachylenie samochodu, możesz przewidzieć, że wektor grawitacji będzie się obracał w kierunku tyłu samochodu. W krótkim okresie, powiedzmy, gdy samochód właśnie zaczął podjeżdżać pod górę, może to pomóc wektorowi grawitacji szybko przyjąć prawidłową orientację.
Możesz również założyć, że samochód średnio nie hamuje ani nie przyspiesza. Zatem filtrowane dolnoprzepustowo wyjście akcelerometru może być wykorzystane do oszacowania, jaki jest kierunek „w dół”. Zapewnia to pomiar długoterminowy niepodlegający dryfowi bezwładnościowemu.
Łączenie danych z akcelerometru i żyroskopu w celu oszacowania kierunku grawitacji zapewnia w ten sposób dokładniejsze oszacowanie niż w przypadku każdego z samych pomiarów.
Możesz dodatkowo uwzględnić to, co wiesz o możliwej obwiedni operacyjnej pojazdu. Na przykład samochód nie może wjeżdżać ani zjeżdżać ze wzniesień, które są zbyt strome, więc gdy akcelerometr wskazuje tak ekstremalne kąty, możesz go mniej obciążać, zakładając, że większość jego mocy jest spowodowana hamulcami lub silnikiem, a nie grawitacją.
Wiesz, że jeśli kierowca uderzy w hamulce, spowoduje to przesunięcie wektora przyspieszenia i możesz go odjąć od szacowanego składnika „w dół”.
Lub jeśli masz dane GPS i mapy, możesz uwzględnić oszacowanie nachylenia samochodu na podstawie lokalizacji. Jeśli masz dane o wysokiej dokładności, możesz dokładnie wiedzieć, na jakim wzniesieniu znajduje się pojazd. Jeśli masz tylko dane o niskiej dokładności, może to być nadal przydatne. Na przykład, jeśli samochód jest w Kansas, wzgórza są mało prawdopodobne. Jeśli samochód znajduje się w San Francisco, wzniesienia są bardziej prawdopodobne i możesz przypisać akcelerometrowi mniejszą wagę.
Jeśli masz dane na temat zużycia paliwa i prędkości, wiedząc, że przy jeździe pod górę zużywa się więcej paliwa, możesz użyć tego do oszacowania, że samochód jest podnoszony lub obniżany na podstawie zużycia paliwa.
I tak dalej. Im więcej wiesz, tym lepsza może być Twoja ocena.
źródło
Będziesz potrzebował algorytmu syntezy jądrowej i używałbyś akcelerometru 3D, żyroskopu 3D i czujników magnetycznych 3D. Dzięki temu algorytmowi łączenia uzyskujesz nastawienie, grawitacja ziemi pomaga jako odniesienie w wykrywaniu horyzontów - nachylenie / odchylenie / kąty przechyłu. Pozostałe dwa czujniki mag / żyroskop pomagają odfiltrować ruch dynamiczny. Gdy samochód skręci również w lewo / w prawo, siła odśrodkowa zostanie dodana. Po ustaleniu położenia można odjąć wektor grawitacyjny i zdemontować wynikowe przyspieszenie we wszystkich trzech osiach.
źródło
Jako bardzo podstawowe podejście, możesz użyć filtra górnoprzepustowego, aby wyeliminować stałą część przyspieszenia (która odpowiada grawitacji) i zachować zmienną część z powodu dynamiki samochodu. Załóżmy, że
raw
jest wektorem zawierającym pomiary X, Y i Z iacc
jest przyspieszeniem samochodu bez grawitacji. Następnieacc
Przechylenie ma wpływ na poszczególne elementy , ale norma wektorowa nie jest:Oczywiście ta metoda nie jest bardzo precyzyjna, szczególnie jeśli nachylenie zmienia się w szybkim tempie. To tyle, ile naiwna matematyka cię prowadzi. Jeśli potrzebujesz większej precyzji, dowiedz się, jak korzystać z filtra Kalmana.
źródło
Odpowiedź leży w precyzyjnej definicji „spowolnienia” .
Z twojego pytania:
Jednak spowolnienie nie oznacza hamowania . Istnieją dwie możliwe definicje:
Różnica ta jest znacząca w przypadku podjazdów i zjazdów. W zjazdach prędkość samochodu wzrośnie, jeśli hamulce nie zostaną uruchomione. A podczas podjazdów prędkość może zwolnić, nawet gdy nie hamuje.
Okazuje się, że wykrycie 1. jest znacznie trudniejsze niż 2. Zdefiniujmy osie w stosunku do orientacji samochodu: X: kierunek przód-tył, Y: kierunek lewo-prawo, Z: kierunek góra-dół. Wszystkie osie wyrównane do samochodu.
Rozwiązania:
W przypadku definicji 1. najlepszym podejściem jest założenie, że prędkość samochodu może się zmieniać tylko w kierunku X. Następnie zmierzone przyspieszenie a = g + v, gdzie g jest przyspieszeniem wywołanym siłami przeciwdziałającymi grawitacji, a v jest przyspieszeniem spowodowanym zmianą prędkości. Możesz założyć, że długość g jest zawsze równa 9,8 m / s² i że v jest zawsze w kierunku X. Więc (g_x + v_x, g_y, g_z) = (a_x, a_y, a_z) , co daje v_x = a_x - sqrt ((9,8m / s²) ² - g_y² - g_z²) . Działa to tylko tak długo, jak | v | jest mniejsza niż | g |lub innymi słowy przyspieszenie spowodowane silnikiem lub hamulcami jest mniejsze niż 1G. To powinno być całkiem bezpieczne założenie, chyba że twój samochód ma rakietę.
W przypadku definicji 2. możesz bezpośrednio odczytać oś X. Jeżeli samochód nie przyspiesza ani nie hamuje, jedyną działającą na niego siłą przeciwdziałającą grawitacji jest normalna siła powierzchni drogi. Siła ta jest zawsze w kierunku Z względem samochodu, więc nie zmienia odczytu osi X. Hamulce i silnik działają tylko w kierunku x i będą bezpośrednio widoczne w tym czytaniu.
źródło
Wygląda na to, że używasz w swojej aplikacji urządzenia „nadmiernego zabójstwa”. Powinieneś użyć urządzenia, które mierzy tylko przyspieszenie X i Y, w ten sposób pochylenie nie będzie miało mierzalnego efektu. Chociaż całkowite przyspieszenie może być mniejsze lub większe, z powodu przechyłu urządzenie mierzy tylko komponenty x i y przyspieszenia na płaszczyźnie, na której znajduje się pojazd.
źródło