Robot śledzący linię¶
Cel ćwiczenia¶
Zapoznanie się z działaniem regulatora PID. Nauka dostrajania parametrów regulatora.
Opis teoretyczny¶
Wstęp¶
Robot śledzący trasę (,,line following robot’’ albo ,,line follower’’) jest to samobieżny pojazd autonomiczny, który potrafi rozpoznać wyznaczoną trasę i poruszać się wzdłuż niej. Trasa może istnieć fizycznie (w najprostszym wariancie linia wymalowana na podłodze, bardziej skomplikowane - wiele przecinających się różnokolorowych linii) lub być wyznaczona wirtualnie, np. z pomocą markerów magnetycznych lub laserowych.
Niektóre roboty potrafią również reagować na przeszkody. W przypadku zablokowania trasy robot rozpoznaje przeszkodę, omija ją, znajduje dalszy ciąg trasy i kontynuuje jazdę.
Roboty śledzące trasę są powszechnie używane w przemyśle (dostarczanie materiałów do stanowiska montażowego w hali produkcyjnej), logistyce (zautomatyzowane magazyny), służbie zdrowia (np. transport chorych w szpitalu, dostarczanie leków do łóżka pacjenta) a nawet usługach (automatyczne wózki zakupowe czy wózki do przewozu dzieci w centrach handlowych).
Parametry modelu¶
W modelu regulatora stanem układu x jest położenie robota względem linii. Sygnałem wyjściowym y jest odczyt czujnika koloru (w trybie rozpoznawania intensywności światła odbitego). Sygnałem wymuszającym r jest położenie równowagi względem linii. Sygnałem wejściowym u jest moc silników (prędkości kół). Uchybem e \((e=r-y)\) będzie odchylenie od położenia równowagi.
Rozpoznawanie linii¶
Śledzenie linii oznacza w praktyce, że robot śledzi granicę między linią a tłem. Położenie równowagi będzie wtedy, gdy pole obserwacji czujnika będzie obejmowało w połowie linię a w połowie tło. Tak więc wartość sygnału wymuszającego r powinna być średnią arytmetyczną pomiędzy odczytem tła a odczytem linii.

Poniższy pseudokod przedstawia algorytm funkcji kalibrującej położenie równowagi:
function CALIBRATE
print "WHITE?"
Wait for user input
white = Read Light_Sensor
print "BLACK?"
Wait for user input
black = Read Light_Sensor
r = (white + black)/2
done function
Regulatory dwustawny i proporcjonalny¶
Regulator dwustawny (dwustanowy) realizuje następujący algorytm:
Algorytm głównej pętli programu dla regulatora dwustawnego (on-off) wygląda następująco:
repeat
y = read Light_Sensor
e = r - y
if e < 0 then
motor_angle = alfa
else
motor_angle = -alfa
done if
done repeat
W przypadku regulatora proporcjonalnego algorytm jest jeszcze prostszy:
repeat
y = read Light_Sensor
e = r - y
motor_angle = k * e
done repeat
Regulator PID¶
Regulator PID oprócz członu proporcjonalnego P (kompensującego bieżącą wartość uchybu) zawiera również człon całkujący I (kompensujący akumulację uchybów z przeszłości) oraz człon różniczkujący D (kompensujący z wyprzedzeniem przewidywane uchyby w przyszłości):
Procedura optymalizacji parametrów regulatora PID¶
Istnieje wiele metod optymalizacji (dostrajania) parametrów \(K_p\), \(K_i\) i \(K_d\) regulatora PID. Jedną z najprostszych jest metoda ręczna (heurystyczna):
Ustawiamy niską wartość \(K_p\) oraz \(K_i=K_d=0\)
Zwiększamy stopniowo wartość \(K_p\) aż do pojawienia się oscylacji.
Zmniejszamy (mniej-więcej dwukrotnie) wartość \(K_p\), zwiększamy stopniowo \(K_i\) aż do osiągnięcia ,,gładkiej’’ reakcji.
Na końcu zwiększamy \(K_d\) aby przyśpieszyć reakcję.
Wykonanie ćwiczenia¶
Zbuduj robota educator z czujnikiem koloru zamocowanym w pionie (strony 69-72 w instrukcji). Dopuszczalne są modyfikacje konstrukcji według własnej inwencji.
Zaprogramuj robota tak, aby jechał wzdłuż krawędzi czarnej linii i zatrzymał się po dojechaniu do czerwonego pola. Wykorzystaj regulator dwustawny zgodnie z algorytmem przedstawionym w części teoretycznej.
Dobierz odpowiednie parametry (prędkości silników) tak, żeby robot w jak najkrótszym czasie pokonał zadaną trasę. Zapisz najlepszy czas przejazdu w tabelce. Uwaga! Robot powinien pokonać całą trasę i zatrzymać się na czerwonej linii.
Zaprogramuj robota wykorzystując regulator proporcjonalny.
Dobierz odpowiednie parametry (współczynnik \(K_p\) i prędkości silników) tak, żeby robot w jak najkrótszym czasie pokonał zadaną trasę. Najlepszy czas przejazdu zapisz w tabelce.
Zaprogramuj robota wykorzystując regulator PID (zgodnie z opisem implementacji przedstawionym na wykładzie).
Dobierz odpowiednie parametry (współczynniki \(K_p\), \(K_i\) i \(K_d\) oraz prędkości silników) tak, żeby robot w jak najkrótszym czasie pokonał zadaną trasę. Najlepszy czas przejazdu zapisz w tabelce.
Zdecyduj, który z programów (typów regulatorów) najlepiej się sprawdza i przygotuj robota do wyścigu (konkurencji z pozostałymi robotami z grupy).
Po zakończeniu wyścigu, jeśli modyfikowano konstrukcję robota – doprowadź go do oryginalnego stanu.
Opis sprawozdania¶
Sprawozdanie z ćwiczenia powinno zawierać:
Opis modyfikacji konstrukcji robota (jeśli były).
Listingi programów (pliki .py i/lub .ev3) z optymalnymi wartościami parametrów.
Tabelka z wynikami.
Rezultaty wyścigu.
Wnioski – dyskusja wyników.