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θ(t−1)+⋯+akθ(t−k)
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 )⋮θ ( k + n )θ ( k - 1 )⋮θ ( k + n - 1 )⋯⋯θ ( 0 )⋮θ ( n )⎤⎦⎥⎥⎡⎣⎢⎢⎢⎢za0za1⋮zak⎤⎦⎥⎥⎥⎥
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.
⎡⎣⎢⎢⎢⎢za0za1⋮zak⎤⎦⎥⎥⎥⎥= ⎡⎣⎢⎢θ ( k )⋮θ ( k + n )θ ( k - 1 )⋮θ ( k + n - 1 )⋯⋯θ ( 0 )⋮θ ( n )⎤⎦⎥⎥+⎡⎣⎢⎢⎢θ^( k )⋮θ^( k + n )⎤⎦⎥⎥⎥
M.+M.k
Możesz przekonwertować to na funkcję przesyłania (znaną również jako transformacja Z w dyskretnej dziedzinie czasu):
Θ^( z)Θ ( z)= a0+ a1z-1+ . . . + akz- k
Aby to anulować, możemy przyjąć odwrotność (gdzie jest naszym nowym oszacowaniem kursu):θ¯( t )
Θ¯(z)Θ^(z)= 1za0+a1z- 1+ ⋯ + akz- k
Konwertowanie z powrotem do dziedziny czasu:
za0θ¯( t ) + a1θ¯( t - 1 ) + ⋯ + akθ¯( t - k ) = θ^( t )
θ¯(t)=θ^(t)−a1θ¯(t−1)−⋯−akθ¯(t−k)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).θ¯
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⃗ (t−1)+Bu⃗ (t−1) ,y⃗ (t)=Cx⃗ (t)
lub:
x⃗ (t)=⎡⎣⎢⎢⎢⎢θ(t)θ(t−1)⋯θ(t−k)⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢A110⋮00A201⋮00⋯⋯⋯⋯⋯000⋮10000⋮01000⋮00⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥x⃗ (t−1)+⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢B0B10⋮00⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥u⃗ (t−1)
y⃗ (t)=[θ^(t)]=⎡⎣⎢⎢⎢⎢a0a1⋮ak⎤⎦⎥⎥⎥⎥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⃗ (t−1)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=⎡⎣⎢⎢⎢⎢10⋮000⋮000⋮0⋯⋯⋯00⋮0⎤⎦⎥⎥⎥⎥Rc=[1]J=∑(x⃗ TQx⃗ +u⃗ TRu⃗ )
Następnie po prostu przeprowadźmy przez algebraiczne równanie Riccati z czasem dyskretnym:
P=Q+AT(P−PB(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)−x⃗ ref(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=Iqq→∞Qo
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
Ż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.
źródło