Jak rośnie błąd trajektorii? Ackermann‑predict w praktyce

Rachunek niepewności i propagacja błędu w modelu ruchu (Ackermann‑predict)

1) Koncepcja obliczania błędów

W poprzednim poście „Pierwsze jazdy” pokazałem wrażliwość wyznaczania trajektorii na stały offset kąta skrętu: nawet +0.5° systematycznie zniekształca tor ruchu. W niniejszym wpisie analizuję inny aspekt — wpływ błędów losowych na estymację trajektorii. Przyjmuję, że odchylenia od nieznanych wartości rzeczywistych wynikają z obecności szumu procesu oraz szumu pomiaru.

Obliczenia prowadzę iteracyjnie w czasie dyskretnym. Ruch pojazdu opisuję modelem kinematycznym 4WS w konfiguracji przeciwfazowej, w którym przemieszczenie realizowane jest po łuku okręgu, a obrót następuje wokół chwilowego środka obrotu (ICR). Punktem wyjścia są równania kroku predykcji stanu:

\[\begin{aligned} x_k &= x_{k-1} + V_k\,\Delta T \cos \Theta_{k-1} \end{aligned}\] \[\begin{aligned} y_k &= y_{k-1} + V_k\,\Delta T \sin \Theta_{k-1} \end{aligned}\] \[\begin{aligned} \Theta_k &= \Theta_{k-1} + \frac{2 V_k\,\Delta T}{L}\,\tan \delta_k \end{aligned}\]

Powyższe równania opisują deterministyczną propagację stanu pomiędzy chwilami $k-1$ i $k$. Interesuje nas jednak, w jaki sposób w tym kroku narasta niepewność estymacji. Błąd stanu w chwili $k-1$ opisany jest macierzą kowariancji $P_{k-1}$. Celem dalszych rozważań jest wyznaczenie macierzy kowariancji stanu po predykcji, $P_k^-$.

2) Błędy stanu i sterowania

Przyjmuję, że rozkłady gęstości prawdopodobieństw błędów mają charakter normalny. Niepewność początkową stanu opisuję macierzą kowariancji:

\[\begin{aligned} P_0 = \mathrm{diag}\!\left( (\sigma_x)^2,\, (\sigma_y)^2,\, (\sigma_\Theta)^2 \right) \end{aligned}\]

Niepewność sterowania (wejść) opisuje macierz kowariancji:

\[\begin{aligned} Q_0 = \mathrm{diag}\!\left( (\sigma_V)^2,\, (\sigma_\delta)^2 \right) \end{aligned}\]

gdzie $\sigma$ to odchylenie standardowe, a $\sigma^2$ wariancja.

3) Linearyzacja kroku (Ackermann‑predict)

Równania ruchu są nieliniowe, dlatego w celu analizy propagacji niepewności stosuję ich liniowe przybliżenie w otoczeniu punktu pracy $x^-$ oraz $u^-$. Umożliwia to zastosowanie prawa propagacji błędu dla transformacji liniowych. W rozważaniach przyjmuję dyskretyzację metodą Eulera w przód oraz stałe sterowanie w obrębie kroku czasowego.

Liniaryzację modelu ruchu można zapisać w postaci:

\[\begin{aligned} x_k \approx f(x^-,\,u^-) + F_k\,(x_{k-1}-x^-) + G_k\,(u_k-u^-) \end{aligned}\]

gdzie wektor stanu ma postać:

\[\begin{aligned} x_k = \begin{bmatrix} x_k & y_k & \Theta_k \end{bmatrix}^\top \end{aligned}\]

Macierz Jacobiego względem stanu Macierz $F_k$ jest Jacobianem funkcji przejścia stanu względem wektora stanu, wyznaczonym w punkcie $(x_{k-1}, u_k)$:

\[\begin{aligned} F_k = \left. \frac{\partial f}{\partial x} \right|_{k-1} \end{aligned}\]

co dla rozważanego modelu prowadzi do postaci:

\[\begin{aligned} F_k = \begin{bmatrix} 1 & 0 & -V_k\,\Delta T\,\sin \Theta_{k-1} \\ 0 & 1 & \ \,V_k\,\Delta T\,\cos \Theta_{k-1} \\ 0 & 0 & 1 \end{bmatrix} \end{aligned}\]

Macierz Jacobiego względem sterowania. Macierz (G_k) jest Jacobianem funkcji przejścia stanu względem wektora sterowania:

\[\begin{aligned} G_k = \begin{bmatrix} \Delta T \cos \Theta_{k-1} & 0 \\ \Delta T \sin \Theta_{k-1} & 0 \\ \dfrac{2\,\Delta T}{L}\,\tan \delta_k & \dfrac{2\,V_k\,\Delta T}{L}\,\sec^2 \delta_k \end{bmatrix} \end{aligned}\]

4) Krok predykcji oparty na pomiarach, nie na sterowaniach

W mojej implementacji nie korzystam z sygnałów sterujących jako wejść do kroku predykcji. Powód jest natury praktycznej: opóźnienia pomiędzy wydaniem komendy a rzeczywistą odpowiedzią serwomechanizmów i silników są istotne, zmienne w czasie i trudne do wiarygodnego modelowania. W konsekwencji wektor sterowania $u_k$ nie reprezentuje faktycznego ruchu pojazdu w danym kroku czasowym.

Takie sformułowanie kroku predykcji odpowiada podejściu znanemu w literaturze jako dead‑reckoning driven by measured inputs, w którym estymacja ruchu opiera się na mierzonych wielkościach kinematycznych zamiast sygnałów sterujących.

Zamiast tego krok predykcji opieram bezpośrednio na pomiarach prędkości $V_k$ oraz kąta skrętu $\delta_k$, pochodzących z enkoderów serwomechanizmów oraz czujników prędkości kół (po przeliczeniu do jednostek SI). Innymi słowy, wielkości, które w klasycznym ujęciu traktowane są jako sterowania, pełnią tutaj rolę obserwowanych zmiennych kinematycznych, uwzględniających już wewnętrzną dynamikę aktuatorów oraz ich opóźnienia.

W tej konwencji:

równania propagacji stanu pozostają bez zmian, jednak wielkości $V_k$ oraz $\delta_k$ traktowane są jako pomiary obarczone niepewnością, a nie sygnały sterujące,

W efekcie propagacja stanu i niepewności w kroku predict przyjmuje postać:

\[\begin{aligned} \hat{x}_k^- &= f\!\left(\hat{x}_{k-1},\, z_k\right) \end{aligned}\] \[\begin{aligned} P_k^- &= F_k\,P_{k-1}\,F_k^\top + G_k\,Q_k\,G_k^\top \end{aligned}\]

gdzie \(\begin{aligned} z_k = \begin{bmatrix} V_k & \delta_k \end{bmatrix}^\top \end{aligned}\)

Dlaczego takie podejście?

Eliminuje ono błąd modelowania wynikający z nieznanych i zmiennych opóźnień wykonawczych. Predykcja opiera się na tym, co faktycznie wydarzyło się w pojeździe w danym kroku czasowym, a nie na intencji sterowania, która mogła zostać zrealizowana z opóźnieniem lub w zmienionej postaci.

5) O przyszłej fuzji

W kolejnych etapach projektu planuję dołożyć niezależne źródło informacji o położeniu z wizji (mapa wizualna / SLAM, w tym wariant monokularny). Po określeniu niepewności lokalizacji pochodzącej z mapy obrazów możliwe będzie połączenie „trajektorii kinematycznej” (z enkoderów) z „trajektorią wizualną” metodą bayesowską, z ważeniem obu źródeł zgodnie z ich wiarygodnością.

Na obecnym etapie wystarczające jest podkreślenie, że krok predict już uwzględnia niepewność pomiarów $V$ i $\delta$. Dodatkowe czujniki będą w przyszłości wprowadzane jako niezależne obserwacje tego samego stanu, realizowane w kroku korekcji filtru.

6) Przejazd 1

W celu wykonania obliczeń testujących, przyjmuje następujące wartości początkowe odchylenia standardowego położenia i orientacji: współrzędna x: $\sigma_x=0.05$ [m], współrzędna y: $\sigma_y=0.05$ [m], współrzędna $\theta$: $\sigma_\theta=1^\circ$. Błędy sterowania: prędkośc $v$: $\sigma_v = 5$ [obr/min], kąt skrętu kół $\delta$: $\sigma_\delta=1^\circ$. Wykres otrzymanego wyniku szcowania wartości błędu wzdłóż trajektorii przedstawia rys:

Ackermann1

Krzyżykami zaznaczam wybrane punkty trajektorii, w których prezentuję wynik estymaty stanu. Błędy pozycji liczone są w lokalnym układzie pojazdu (w punkcie środkowym), a ich rozrzut w kierunku wzdłużnym i poprzecznym do osi pojazdu przedstawia elipsa 3‑sigma. Niepewność orientacji (kursu) ilustruje czerwona strzałka: im dłuższa i „grubsza”, tym większy błąd kąta. Na wykresie widać, że błąd z czasem rośnie, ale robi to powoli i w przewidywalny sposób. Nie „rozjeżdża się” szybko. Dzięki temu nasza wyznaczona trajektoria pozostaje użyteczna przez dłuższy czas, nawet bez dodatkowych poprawek z innych czujników.

7) Przejazd 2

Rysunek przedstawia wyniki szacowania błędów pozycjonowania i kursu dla przejazdu nr 2.

Ackermann2

Analiza potwierdza wcześniejsze wnioski: niepewność rośnie wzdłuż trasy stopniowo, a wartości pozostają umiarkowane w badanych warunkach prędkości i kątów skrętu.

8) Wnioski

Cele dydaktyczne

Co dalej

W kolejnym wpisie omówie propozycje ćwiczeń dydaktycznych bazujących na przedstawionym dotychczas materiale