Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania SYSTEMY CZASU RZECZYWISTEGO (SCR) Temat: Implementacja i weryfikacja algorytmu sterowania z regulatorem PID, umożliwiającego realizację zadania podążania autonomicznego pojazdu mobilnego ZumoRoboKiss2 za czarną linią Ćwiczenie Laboratoryjne nr 4 Opracowanie: Tomasz Rutkowski, dr inż. Gdańsk, 2016 1/7
Wprowadzenie Przed przystąpieniem do zajęć laboratoryjnych należy zapoznać się z opisem dydaktycznych pojazdów ZumoRoboKiss2 zawartym w pliku: SCR_Lab_04_opis_ZumoRoboKiss2.pdf W trakcie zajęć pojazdy ZumoRoboKiss2 programowane będą w środowiskach: Matlab/Simulink (R2014 lub R2015!!!), oraz Arduino IDE. Dla dotychczas niewtajemniczonych w programowanie w środowisku Arduino IDE zalecana jest lektura materiału związanego z szybkim wprowadzeniem w programowanie w środowisku Arduino IDE, do którego przykładowe linki umieszczono w wyżej wspomnianym dokumencie SCR_Lab_04_opis_ZumoRoboKiss2.pdf (pozycje [7] i [8]). Kolejne zadania do realizacji w trakcie zajęć laboratoryjnych dają możliwość szczegółowego przeanalizowania sposobu programowania ZumoRoboKiss2 oraz niezbędnych elementów dedykowanych bibliotek w środowiskach Matlab/Simulink i Arduino IDE, w celu realizacji zadania głównego laboratorium: implementacji i weryfikacji algorytmu sterowania z regulatorem PID, umożliwiającego realizację zadania podążania autonomicznego pojazdu mobilnego ZumoRoboKiss2 za czarną linią. Plik programu dla Matlab/Simulink (pliki *.slx), który umożliwia realizację Zadania 1 można odnaleźć w dołączonym archiwum SCR_ZumoRoboKiss2_ZADANIA.zip. Również pliki projektów dla środowiska Arduino IDE (pliki tekstowe *.ino), które umożliwiają realizację zadań 2, 3, 4 i 5 można odnaleźć w archiwum SCR_ZumoRoboKiss2_ZADANIA.zip. Podłączenie układu Arduino UNO przewodem USB do komputera PC powoduje przypisanie temu urządzeniu odpowiedniego portu COM w systemie operacyjnym - można to zweryfikować w Windows za pomocą Menadżera urządzeń, Odpowiednia identyfikacja tego portu jak i poprawne odwoływanie się do niego z poziomu aplikacji narzędziowych (Matlab/Simulink, Arduino IDE) umożliwia poprawne wgranie skompilowanych w trakcie zajęć laboratoryjnych programów do układu Arduino UNO oraz komunikację szeregowo z tym układem. 2/7
Zadanie 0 Przeanalizować (burza mózgów) w jaki sposób można by wykorzystać odbiciowe czujniki koloru (para: fototranzystor i podczerwona dioda nadawcza) w projektowanym algorytmie sterowania, realizującym zadanie podążania robota za czarną linią. Należy, rozważyć trzy następujące przypadki: wykorzystanie jednego odbiciowego czujnika koloru, wykorzystanie dwóch obiciowych czujników koloru, wykorzystanie trzech i więcej odbiciowych czujników koloru. Następnie przeanalizować w jaki sposób można by wykorzystać jeden sygnał sterujący wypracowany przez regulator PID by sterować dwoma silnikami pojazdu, napędzającymi odpowiednio koła/gąsienice z jego lewej i prawej strony. Należy zwrócić uwagę na rozstawienie odbiciowych czujników koloru, na grubość czarnej linii na planszach znajdujących się w laboratorium oraz na sposób interpretowania danych dostarczonych przez zestaw czujników (osobne dane z każdego z czujników, czy jedna dana/informacja wypracowana na podstawie odczytów ze wszystkich czujników). Pamiętając, że silniki (urządzenia wykonawcze) mają swoje rzeczywiste ograniczenia (np. napięcie zasilania) zaproponować metodę/metody ograniczenia wartości ich sygnałów sterujących tak by były one akceptowalne przez urządzenia wykonawcze. Zadanie 1 Matlab/Simulink Przeanalizować i eksperymentalnie zweryfikować przykładową implementacją algorytmu wykorzystującego regulator PID, który umożliwia pojazdowi ZumoRoboKiss2 realizację zadania podążania za czarną linią (np. w postaci ścieżki o kształcie - odpowiednie plansze do wykorzystania udostępni prowadzący). Strukturę zaproponowanego algorytmu zapisano w projekcie Matlaba/Simulinka SCR_Zad_01_MS_PID.slx, który można odnaleźć w archiwum SCR_ZumoRoboKiss2_ZADANIA.zip. W zadaniu należy: a) zapoznać się ze strukturą pliku SCR_Zad_01_MS_PID.slx oraz sposobem działania zaproponowanego algorytmu (Rys. 1), b) zapoznać się z opisem bloków ZumoMotors oraz ZumoReflectanceSensor, przy czym szczególną uwagę należy zwrócić na ich możliwości konfiguracyjne (Rys. 2), c) eksperymentalnie zweryfikować jakość poruszania się pojazdu po czarnej linii w zależności od wartości parametrów: regulatora PID: Kp, Ki i Kd, bazowej mocy pracy obu silników: mootor_sp, okresu próbkowania listwy czujników odbiciowych: SamplingTime_ZRS, kroku procedury numerycznej: SampleTime_Solver. 3/7
W sprawozdaniu należy: a) zapisać wartości dobranych parametrów regulatora PID (Kp, Ki, Kd,) dla których zadanie podążania za czarną linią realizowane jest najlepiej, przy czym należy również zdefiniować słownie przyjęte kryterium/kryteria oceny jakości realizacji tego zadania, b) dla przypadku opisanego w poprzednim podpunkcie wypisać również wartości parametrów: line_sp, mootor_sp SamplingTime_ZRS oraz SampleTime_Solver, c) na podstawie obserwacji zachowania pojazdu mobilnego ZumoRoboKiss2 w trakcie eksperymentów, uzasadnić dobór wartości parametrów SamplingTime_ZRS oraz SampleTime_Solver. Przed kompilacją projektu w Simulinku należy wybrać typ platformy dla której ma zostać wygenerowany kod. W tym przypadku po kliknięciu lewym przyciskiem myszy na ikonę w głównym oknie projektu (czerwony kwadrat na Rys.1), otworzy się okno parametrów symulacji, w którym z listy po lewej stronie należy wybrać opcję Run on Target Hardware a w prawym oknie parametr Target Hardware ustawić na wartość Arduino Uno. W parametrach symulacji należy też wybrać solver ode1 ze stałym krokiem Fxed-step, którego wartość Fxed-step size zdefiniowana jest jako parametr SampleTime_Solver. Aby poprawnie skompilować plik projektu SCR_Zad_01_MS_PID.slx w Workspace głównym Matlaba należy zdefiniować następujące zmienne i przypisać im odpowiednie wartości: line_sp, Kp, Ki, Kd, mootor_sp, SamplingTime_ZRS, SampleTime_Solver. Kompilacja projektu w Simulinku i zaprogramowanie układu Arduino Uno w pojeździe ZumoRoboKiss2, następuje po kliknięciu lewym przyciskiem myszy na ikonę w głównym oknie projektu (czerwone kółko na Rys.1). Poszczególne testy, z poruszającym się robotem, należy przeprowadzać bezpośrednio w kojcu bezpieczeństwa, w miejscu wskazanym przez prowadzącego. Dopiero gdy robot znajduje się w kojcu można zmienić stan przycisku głównego zasilania na płycie głównej ZumoRoboKiss2 z pozycji OFF na pozycję ON! Rys. 1. Struktura pliku SCR_Zad_01_MS_PID.slx Mataba/Simulinka 4/7
Rys. 2. Opis bloku ZumoMotors Rys. 3. Opis bloku ZumoReflectanceSensor 5/7
Kolejne Zadania od 2 do 5 są jedynie środkiem do realizacji Zadania 6!!! Zadanie 2 - Arduino IDE Przeanalizować działanie przykładowego kodu SCR_Zad_02_button_led.ino przedstawiającego podstawowe możliwości oprogramowania przycisku użytkownika i diody Led pojazdu ZumoRoboKiss2. Testy przeprowadzać bezpośrednio na stanowisku laboratoryjnym (przycisk głównego zasilania na płycie głównej ZumoRoboKiss2 w pozycji OFF). Zadanie 3 - Arduino IDE Przeanalizować działanie przykładowego kodu SCR_Zad_03_button_led_buzzer.ino przedstawiającego podstawowe, dodatkowe możliwości (względem Zadania 2) oprogramowania buzzera pojazdu ZumoRoboKiss2. Testy przeprowadzać bezpośrednio na stanowisku laboratoryjnym (przycisk głównego zasilania na płycie głównej ZumoRoboKiss2 w pozycji OFF). Zadanie 4 - Arduino IDE Przeanalizować działanie przykładowego kodu SCR_Zad_04a_reflectance_sensor.ino oraz kodu SCR_Zad_04b_reflectance_sensor.ino przedstawiającego podstawowe, dodatkowe możliwości (względem Zadań 2 i 3) oprogramowania listwy czujników odbiciowych oraz interfejsu komunikacji szeregowej pojazdu ZumoRoboKiss2. W kodzie 4a przedstawiono sposób czytania stanu poszczególnych czujników odbiciowych i wysyłania informacji przez interfejs szeregowy. Natomiast, w kodzie 4b przedstawiono sposób estymacji położenia czarnej linii względem listwy czujników odbiciowych na podstawie ważonego, średniego stanu wszystkich czujników. Testy przeprowadzać bezpośrednio na stanowisku laboratoryjnym z wykorzystaniem kartek z czarnymi liniami (przycisk głównego zasilania na płycie głównej ZumoRoboKiss2 w pozycji OFF). 6/7
Zadanie 5 - Arduino IDE Przeanalizować działanie przykładowego kodu SCR_Zad_05_button_motors.ino przedstawiającego podstawowe, dodatkowe możliwości (względem Zadań 2, 3 i 4) oprogramowania pracy silników napędowych pojazdu ZumoRoboKiss2. Testy, z poruszającym się robotem, przeprowadzać bezpośrednio w kojcu bezpieczeństwa w miejscu wskazanym przez prowadzącego (gdy robot znajduje się w kojcu następuje zmiana stanu przycisku głównego zasilania na płycie głównej ZumoRoboKiss2 z pozycji OFF na pozycję ON). Pojazd powinien ruszyć dopiero po 5 sekundach!!! Zadanie 6 - Arduino IDE - Regulator PID Na podstawie doświadczeń z realizacji poprzednich zadań, należy opracować i zaimplementować algorytm, oparty o dyskretną wersję regulatora PID z Zadania 1, realizujący zadanie podążania robota ZumoRoboKiss2 za czarna linią. W zadaniu należy: zaimplementować algorytm oparty o dyskretną wersję regulatora PID, z odpowiednimi ograniczeniami sygnałów sterujących, oszacować czas trwania głównej pętli programu realizującej algorytm regulatora PID (w tym celu można wykorzystać funkcje millis() lub micros(), natomiast uśrednioną wartość czasu trwania głównej pętli programu można wysłać z układu Arduino Uno do komputera PC za pomocą interfejsu komunikacji szeregowej), w fazie eksperymentalnej weryfikacji opracowanego algorytmu, dobrać eksperymentalnie parametry zaimplementowanego regulatora PID, tak aby jakość podążania za czarną linią realizowana była jak najlepiej (w tym celu należy wykorzystać doświadczenie wynikające z realizacji Zadania 1). Zwrócić uwagę na ograniczenia związane z pracą silników <-400, 400>. Testy, z poruszającym się robotem, przeprowadzać bezpośrednio w kojcu bezpieczeństwa w miejscu wskazanym przez prowadzącego (gdy robot znajduje się w kojcu następuje zmiana stanu przycisku głównego zasilania płyty ZumoRoboKiss2 z pozycji OFF na pozycję ON). Pojazd powinien ruszyć dopiero po 5 sekundach!!! W sprawozdaniu należy: a) naszkicować ogólną strukturę układu sterowania robotem ZumoRoboKiss2 w zadaniu podążania za czarna linią, b) zapisać w postaci pseudokodu algorytm zaimplementowanego dyskretnego regulatora PID, c) zapisać dobrane eksperymentalnie parametry zaimplementowanego dyskretnego regulatora PID, d) zapisać oszacowany, uśredniony czas trwania głównej pętli programu. 7/7