Algorytm AHRS przy ciągłych przyspieszeniach liniowych

9

Próbowałem kilku algorytmów, aby uzyskać nachylenie, przechylenie i odchylenie przy ciągłych liniowych przyspieszeniach i wibracjach (mniejszych niż 0,4 g, częstotliwości niższych niż 10 Hz). Żaden z nich nie daje dobrych wyników, ponieważ odczyty albo dryfują, albo zbytnio wpływają na nie przyspieszenia liniowe. Chcę osiągnąć, gdy przyspieszenie zewnętrzne jest mniejsze niż + -0,4 g, błąd skoku i przechylenia powinien być mniejszy niż + -1 stopni.

Wypróbowałem następujące algorytmy:

  1. Algorytm Madgwicka . Gdy wzmocnienie Beta jest ustawione bardzo wysoko, zbieżność jest szybka, ale kąty są bardziej podatne na przyspieszenia liniowe. Zredukowałem go i zmniejszyłem błąd przy przyspieszeniach liniowych do + -0,5 stopnia. Jeśli jednak wibracja jest ciągła, odczyty będą dryfować i zebranie się do prawdziwych wartości zajmie wieczność. Ma to sens, ponieważ przy przyspieszeniach liniowych żyroskop jest bardziej zaufany, a obliczone kąty dryfują, gdy dryfuje integracja żyroskopu.

  2. Algorytm Mahony'ego . W przeciwieństwie do Madgwicka, nie dryfuje wcale, niezależnie od tego, jakich wartości używam dla Ki i Kp. Jednak zawsze na to wpływ mają przyspieszenia liniowe. (Błędy większe niż + -6 stopni)

  3. Tradycyjny filtr Kalmana . Wiele czasu poświęcono na dostrajanie tych ogromnych wektorów R i Q. Do tej pory ma taki sam występ jak Mahony.

Używam razor IMU . Wiem, że za pomocą tanich czujników nie można osiągnąć takiego samego wyniku jak ten .

Istnieje kilka innych opcji, takich jak UKF, ale zrozumienie lub wdrożenie jest trudne.

Wszelkie sugestie są mile widziane.

Timtianyang
źródło
Jak się integrujesz dla Kalmana?
C. Towne Springer
Korzystając z integracji Eulera, ale rotacje są ściśle jedną osią, aby uniknąć DCM. @ C.TowneSpringer
Timtianyang
Czy to powinno działać dobrze? Ostatnim razem, gdy to zrobiłem (ALCM), Euler był nieodpowiedni. Euler jest metodą pierwszego rzędu z lokalnym błędem proporcjonalnym do kwadratu wielkości kroku i ogólnym błędem proporcjonalnym do wielkości kroku. Zastosowaliśmy Runge-Kutta czwartego rzędu z filtrem Kalmana. Wydaje mi się, że Newton-Feynman lub Euler zgadną, jak zacząć Runge-Kutta. Czy masz procesor do obsługi tego przy dobrym tempie aktualizacji?
C. Towne Springer
Dziękuję za sugestię. Lokalny błąd metody integracji eulera został przeoczony. Planujemy przeprowadzić filtrowanie w poście, więc nie mamy większych ograniczeń co do złożoności obliczeń. @ C.TowneSpringer
Timtianyang

Odpowiedzi:

3

Po pierwsze, upewnij się, że rozumiesz tutaj dwa kluczowe punkty:

  1. Określenie postawy na podstawie samych danych IMU jest z natury niejednoznaczne w obecności przyspieszenia liniowego . Bez dodatkowej wiedzy o naturze przyspieszeń zawsze będzie górna granica dokładności, którą można osiągnąć.

  2. Dokładność jest ograniczona dryfem w zintegrowanych pomiarach żyroskopowych . Dzięki doskonałym danym żyroskopowym i integracji dane akcelerometru nie byłyby wcale potrzebne. Im bardziej zbliżasz się do perfekcji, tym bardziej możesz ignorować przyspieszenia.

Wybór algorytmu orientacji jest tutaj w dużej mierze nieistotny. Wszystkie działają na tej samej zasadzie: wykorzystując kierunek przyspieszenia grawitacyjnego do dryfu poprawiają zintegrowane dane żyroskopu, z pewną zmienną wagą między nimi. Jeśli próbowałeś dostroić parametry i nie osiągnąłeś pożądanych rezultatów, prawdopodobnie nie będziesz w stanie lepiej zastosować innego algorytmu.

Istnieją dwie rzeczy, które możesz zrobić.

  1. Popraw dokładność integracji żyroskopu.
  2. Jakoś modeluj naturę przyspieszeń liniowych.

Druga opcja jest trudna do omówienia, ponieważ zależy od szczegółów badanego ruchu. Istnieje kilka prostych sztuczek, takich jak odrzucanie lub wyważanie przyspieszeń poza określonym zakresem. Zasadniczo sprowadzają się one do modelowania przyspieszeń liniowych jako krótkich przypadków. Jeśli twój system jest w ciągłym ruchu, nie jest zbyt pomocny.

Istnieje jednak kilka rzeczy, które możesz zrobić, aby poprawić integrację z żyroskopem:

  1. Uzyskaj najlepsze możliwe oszacowanie odchylenia żyroskopowego . Wykonuj statyczne odczyty żyroskopu przez kilka sekund bezpośrednio przed użyciem i uśrednij je, aby uzyskać wartości przesunięcia. Nie polegaj na jednorazowej wcześniejszej kalibracji.
  2. Spróbuj zminimalizować znoszenie z powodu temperatury. Pozwól IMU rozgrzać się do stałej temperatury roboczej przed kalibracją / użyciem. Staraj się utrzymywać go w stałej temperaturze podczas pracy.
  3. Popraw swój model kalibracji. Zastanów się nad włączeniem efektów osi i nieliniowości, a także po prostu skalowania i przesunięcia.
  4. Użyj lepszej metody integracji. W komentarzach do twojego pytania jest już kilka pomysłów.
  5. Sprawdź, czy możesz śledzić dryf żyroskopu. Jeśli algorytm orientacji musi konsekwentnie korygować dryft w określonym kierunku, można to wykryć i zastosować do delikatnego dostosowania wartości odchylenia.

Masz rację, że używane czujniki nie są najwyższej dostępnej klasy. Można jednak uzyskać bardzo dobre wyniki z czujników konsumenckich, jeśli są wystarczająco dobrze scharakteryzowane i skalibrowane.

Martin L.
źródło
Jakieś zalecane czujniki konsumenckie?
Timtianyang,