Przyspieszenie, gdy urządzenie jest przechylone

13

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ł.

Mam nadzieję, że to pomaga

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.

jumbojohn
źródło
2
Dlaczego po prostu nie zmierzysz, kiedy nie dzieje się interesujące przyspieszenie, i wykorzystasz to jako punkt porównawczy?
PlasmaHH
Myślę, że to nie zadziała. Jeśli urządzenie jest idealnie nieruchome, osie X i Y wynoszą 0 g, a oś Z 1g. Pochylenie powoduje, że odczyt osi X wynosi od -1g do 1g w zależności od pochylenia, jak już powiedziałem. Hamowanie powoduje zmniejszenie wartości mierzonej osi X (przyspieszenie ujemne, więc samochód zwalnia). Jeśli na przykład urządzenie jest już pochylone w dół, więc jest to coś pomiędzy 0g - (-1g), skąd mam wiedzieć, że nie jest to przyspieszenie spowodowane hamowaniem?
jumbojohn
Dlaczego nie obliczasz całkowitego przyspieszenia trzech osi zamiast tylko osi Y? Myślę, że rozważenie wszystkich trzech osi jest czymś podstawowym !? Coś w tym stylu
charansai
LSM6DSM nie ma magnetometru. Skąd masz te informacje? Myślę, że w rzeczywistości korzystają z planszy X-NUCLEO-IKS01A1 z ST, który posiada zarówno LSM6DSM Gyro / akcelerometr oraz do LIS3MDL magnetometr.
MrGerber
@MrGerber Dziękujemy za zauważenie tego. To było moje złe, że źle odczytałem arkusz danych czujnika.
jumbojohn

Odpowiedzi:

18

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

A=X2+Y2+Z2

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).AAA

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.

Brian Drummond
źródło
Właściwie nigdy wcześniej nie pracowałem z akcelerometrem / żyroskopem, więc duży obraz nie jest w pełni jasny, jak te rzeczy działają, a matematyka nie jest jedną z moich najsilniejszych umiejętności, więc dziękuję za wskazówki / wyjaśnienia.
jumbojohn
Chociaż słusznie mam poważne podejrzenie, że marginesy błędów będą ważne. Nie zapominaj również, że przyspieszenie pionowe zniekształci kulę (np. Nierówności prędkości, dziury), więc może być konieczne rozwiązanie tego problemu w zależności od zastosowania.
Chris H
Ale grawitacja nie jest stała, jeśli spojrzysz wystarczająco mocno . Podczas gdy najwyższa droga w USA zmniejsza tylko $ g $ o około 0,1%, przejście od bieguna do równika daje różnicę 0,5%. Geologia może również wpływać na ten rząd wielkości . Prawdopodobnie nie zmienia gry, ale nie zaniedbuj kalibracji
Chris H
Musisz tylko zmodyfikować promień kuli G zgodnie z twoją lokalizacją lub zmierzyć ją przed włączeniem silnika; to nie jest problem. Zgadzam się, że nierówności prawdopodobnie należy poradzić sobie z płozami i układem kierowniczym.
Brian Drummond
Kalibracja przed uruchomieniem silnika była czymś, o czym myślałem. Kalibracja była szybka, jeśli konstruktor nie był wtedy użytkownikiem końcowym.
Chris H
9

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ą.

Ale moim problemem jest to, że gdy urządzenie jest w pozycji pochylonej (0g, gdy nie ma pochylenia), przyspieszenie wynosi pomiędzy (w dół) 0g -> - 1g lub między (w górę) 0g-> 1g.

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.

Olin Lathrop
źródło
Czy (zmierzone) przyspieszenie ziemskie nie będzie w kierunku „do góry”? W tej chwili odczyt, jaki otrzymujesz z urządzenia w spoczynku w grawitacji ziemskiej, będzie taki sam, jak na zewnątrz jakiegokolwiek pola grawitacyjnego, ale przyspieszy w kierunku „w górę” (względem urządzenia)?
psmears,
@psmears: Tak, masz rację. Siła jest w dół, ale pozorne przyspieszenie jest w górę. Naprawiony.
Olin Lathrop
5

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.

Phil Frost
źródło
3

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.

Marko Buršič
źródło
3

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 rawjest wektorem zawierającym pomiary X, Y i Z i accjest przyspieszeniem samochodu bez grawitacji. Następnie

void correct_for_gravity(float *raw, float *acc)
{
   const float k = 0.9;
   static float gravity[3];

   gravity[0] = k * gravity[0] + (1 - k) * raw[0];
   gravity[1] = k * gravity[1] + (1 - k) * raw[1];
   gravity[2] = k * gravity[2] + (1 - k) * raw[2];

   acc[0] = raw[0] - gravity[0];
   acc[1] = raw[1] - gravity[1];
   acc[2] = raw[2] - gravity[2];
}

accPrzechylenie ma wpływ na poszczególne elementy , ale norma wektorowa nie jest:

norm_acc = sqrt(acc[0]*acc[0] + acc[1]*acc[1] + acc[2]*acc[2]);

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.

Dmitrij Grigoriew
źródło
1

Odpowiedź leży w precyzyjnej definicji „spowolnienia” .

Z twojego pytania:

Urządzenie będzie znajdować się w samochodzie i powinno mierzyć przyspieszenie, gdy samochód zwalnia (hamulec).

Jednak spowolnienie nie oznacza hamowania . Istnieją dwie możliwe definicje:

  1. Prędkość samochodu względem podłoża maleje.
  2. Hamulce samochodowe są stosowane.

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:

  1. 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ę.

  2. 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.

jpa
źródło
0

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.

Guill
źródło