Jakie są metody radzenia sobie z opóźnieniem kompasu (histereza zależna od prędkości)?

12

Mam robota napędzanego bieżnikiem, z enkoderami kół o niskiej precyzji do śledzenia odległości i elektronicznym kompasem do określania kierunku. Kompas ma znaczne (> 1 sekundę) opóźnienie, gdy robot obraca się szybko, np. Po osiągnięciu punktu trasy - obraca się w miejscu, aby wskazać nowy kurs.

Jakie są sposoby radzenia sobie z opóźnieniem? Wydaje mi się, że można wykonać wiele pomiarów i modelować odpowiedź kompasu. Wydaje się to jednak problematyczne, ponieważ jest zależne od stawki i nie znam stawki chwilowej.

Jako proste, ale powolne podejście, mam obrót robota, aż zostanie on z grubsza skierowany we właściwym kierunku, a następnie wykonuję bardzo małe skręty przyrostowe z krótkimi przerwami pomiaru, aż zostanie skierowany we właściwą stronę. Czy istnieją inne sposoby radzenia sobie z tym?

ViennaMike
źródło

Odpowiedzi:

12

Opóźnienie w kompasie wynika z filtra dolnoprzepustowego, który tłumi szumy o wysokiej częstotliwości.

  • Istnieją droższe magnetometry, które mają mniejszy hałas, a zatem mniejsze opóźnienie.
  • Możliwe jest również użycie żyroskopu w celu poprawy dokładności. W rzeczywistości to właśnie robią jednostki pomiaru bezwładnościowego (IMU). Można to osiągnąć za pomocą filtra Kalmana. Poprawa dokładności pomaga zmniejszyć opóźnienie, ponieważ zwiększona dokładność zmniejsza zależność od filtra dolnoprzepustowego w celu tłumienia hałasu. Filtr Kalmana łączy dane z magnetometru, a także żyroskopu (który mierzy szybkość zmian kursu).

Jeśli trzymasz się obecnego kompasu, istnieją dwa możliwe rozwiązania (uwaga, to staje się coraz bardziej zaawansowane, ale opcja 1 powinna być dostępna dla większości ludzi bez zbytniej pracy).

  1. Możesz spróbować anulować filtr. Może to usunąć opóźnienie, ale także zwiększa szum o wysokiej częstotliwości. Po wykonaniu tej czynności możesz spróbować sterować robotem w oparciu o nowe oszacowanie kursu. Aby to zrobić, musisz poeksperymentować z parametrami filtra dolnoprzepustowego. Na przykład w dyskretnym czasie możesz znaleźć:

    θ (t)tθt

    θ^(t)=a0θ(t)+a1θ(t1)++akθ(tk)
    gdzie to szacowany kurs (wyjście kompasu) na czas , to rzeczywisty kurs (podstawowa prawda) w czasie .θ^(t)tθt

    Możesz znaleźć parametry , wykonując eksperyment, w którym mierzysz prawdę gruntową za pomocą innych środków zewnętrznych. Biorąc pod uwagę próbek, masz następujące równanie: n + k + 1 [ θ ( k ) θ ( k + N ) ]ain+k+1

    [θ^(k)θ^(k+n)]=[θ(k)θ(k1)θ(0)θ(k+n)θ(k+n1)θ(n)][a0a1ak]

    I możesz rozwiązać, znajdując: gdzie jest pseudo-inwerso macierz . Nie ma ostatecznego sposobu na wypracowanie , więc prawdopodobnie zgadniesz. W przypadku punktów bonusowych zakłada się, że hałas jest biały i niezależny, ale możesz go najpierw wybielić, aby usunąć błąd, a tym samym poprawić swoje oszacowanie parametrów.

    [a0a1ak]=[θ(k)θ(k1)θ(0)θ(k+n)θ(k+n1)θ(n)]+[θ^(k)θ^(k+n)]
    M+Mk

    Możesz przekonwertować to na funkcję przesyłania (znaną również jako transformacja Z w dyskretnej dziedzinie czasu):

    Θ^(z)Θ(z)=a0+a1z1+...+akzk

    Aby to anulować, możemy przyjąć odwrotność (gdzie jest naszym nowym oszacowaniem kursu):θ¯(t)

    Θ¯(z)Θ^(z)=1a0+a1z1++akzk

    Konwertowanie z powrotem do dziedziny czasu:

    a0θ¯(t)+a1θ¯(t1)++akθ¯(tk)=θ^(t)

    θ¯(t)=θ^(t)a1θ¯(t1)akθ¯(tk)a0

    możemy następnie użyć do sterowania robotem.θ¯

    Będzie to bardzo hałaśliwe, więc przed użyciem możesz nadal przefiltrować przez filtr dolnoprzepustowy (chociaż być może taki, który ma mniejsze opóźnienie).θ¯

  2. Powyższe rozwiązanie wciąż nie jest najlepszym sposobem. Głośne oszacowanie może nie być bardzo przydatne. Jeśli umieścimy to w równaniu przestrzeni stanu, możemy zaprojektować filtr Kalmana i kontroler sprzężenia zwrotnego w pełnym stanie za pomocą LQR (liniowy regulator kwadratowy). Kombinacja filtra Kalmana i kontrolera LQR jest również znana jako kontroler LQG (liniowy kwadratowy gaussian), a do odzyskania dobrego kontrolera wykorzystuje się odzyskiwanie w pętli.

    Aby to zrobić, wymyśl równania przestrzeni czasowej (dyskretne):

    x(t)=Ax(t1)+Bu(t1) ,y(t)=Cx(t)

    lub:

    x(t)=[θ(t)θ(t1)θ(tk)]=[A1A200010000010000010000010]x(t1)+[B0B1000]u(t1)

    y(t)=[θ^(t)]=[a0a1ak]x(t)

    gdzie reprezentuje moc w silnikach do obracania robota, a , , , to wpływ, jaki wpływa na kurs w oparciu o pozycję i prędkość (możesz wybrać wartości niezerowe dla innych elementów macierzy , a także pierwszego rzędu macierzy ).u(t1)A0A1B0B1BA

    Następnie możesz zbudować swojego obserwatora (Filtr Kalmana), wybierając oszacowania hałasu i dla szumu procesowego i szumu pomiarowego. Filtr Kalmana może następnie znaleźć optymalne oszacowanie kursu, biorąc pod uwagę te założenia dotyczące hałasu. Po wybraniu oszacowań hałasu, implementacja zależy tylko od implementacji kodu dla filtru Kalmana (równania można znaleźć na Wikipedii, więc nie będę tutaj go omawiać).QoRo

    Następnie możesz zaprojektować kontroler , tym razem wybierając i reprezentujące wagę przypisaną do regulacji i próbując ograniczyć użycie siłowników. W takim przypadku możesz wybrać i . Dzieje się tak, ponieważ LQR znajduje optymalny kontroler, aby zminimalizować funkcję kosztów:QcRcQc=[100000000000]Rc=[1]J=(xTQx+uTRu)

    Następnie po prostu przeprowadźmy przez algebraiczne równanie Riccati z czasem dyskretnym:

    P=Q+AT(PPB(R+BTPB)1BTP)A

    i rozwiązania dla pozytywnej określonej macierzy .P

    Zatem twoje prawo kontrolne może zostać wydane przez:

    u(t)=K(x(t)xref(t))

    gdzieK=(R+BTPB)1(BTPA)

    Wreszcie, samo wykonanie tego nie będzie działać zbyt dobrze i prawdopodobnie będzie niestabilne z powodu hałasu. Rzeczywiście, oznacza to, że opcja 1 prawdopodobnie nie zadziała, dopóki najpierw nie przełączysz przez filtr dolnoprzepustowy (choć niekoniecznie przy tak długim efektywnym czasie opóźnienia). Wynika to z faktu, że chociaż LQR ma zagwarantowaną stabilność, to natychmiast po użyciu filtra Kalmana gwarancja zostaje utracona.θ¯

    Aby to naprawić, wykorzystujemy technikę Loop Transfer Recovery, w której dostosowujesz filtr Kalmana, a zamiast tego wybierasz nową , gdzie to twoja pierwotna macierz , dostrojona tak, aby filtr Kalmana był optymalny . to dowolna dodatnio określona macierz symetryczna, którą można po prostu wybrać jako macierz tożsamości ( ). Następnie wybierz skalar . Wynikowy kontroler powinien stać się (bardziej) stabilny jako , chociaż matryca zostaje dostrojona, co oznacza, że ​​staje się mniej optymalna.Q 0 Q V V = I q q Q oQo=Q0+q2BVBTQ0QVV=IqqQo

    Dlatego po prostu zwiększaj aż będzie stabilny. Innym sposobem, aby spróbować go ustabilizować, jest zwiększenie (lub zmniejszenie ), aby spowolnić kontroler .R c Q cqRcQc

Pojęcia zawarte w tym poście są dość zaawansowane, ale jeśli potrzebujesz rozwiązać takie rzeczy jak równanie Riccati, możesz użyć MATLAB lub innego oprogramowania, aby to zrobić. Być może biblioteki już implementują filtr Kalmana (ponownie, sądzę, że MATLAB również to robi).

W przypadku aplikacji osadzonej może być konieczne samodzielne wdrożenie filtru Kalmana, chociaż prawdopodobnie istnieje implementacja C.

ronalchn
źródło
Dziękuję za doskonałą i dogłębną odpowiedź. Podążam za sednem twojego pierwszego rozwiązania i jestem pewien, że dam radę. Drugi, jak mówisz, jest trudniejszy i będę musiał pracować, aby sprawdzić, czy mogę to wszystko wykonać.
ViennaMike,
4

Żyroskop to prosta odpowiedź. Zawsze słyszałem, żyroskop dla krótkich pomiarów, kompas na długo. I realistycznie filiżanka Kallmana filtruje między nimi przez większość czasu. Cena płyty żyroskopowej 6DOF jest obecnie mniejsza niż 20 USD, zdecydowanie zbyt tania, aby z niej nie korzystać.

Kiedyś pracowałem przez filtr Kallmana innej osoby . i działało. Filtr Kallmana jest w rzeczywistości bardziej podejściem, a nie dokładną implementacją, aw przypadku żyroskopu wynik końcowy nie wymaga użycia matematyki matematycznej. To sprawia, że ​​kod jest znacznie prostszy.

Kolczasty 3
źródło