Kursy • Poradniki • Inspirujące DIY • Forum
Samodzielna budowa robota mobilnego wymaga przygotowania zarówno warstwy sprzętowej jak i oprogramowania. W dziedzinie sprzętu mamy do wyboru szeroką gamę platform, które pozwalają na realizację zaawansowanych programów sterujących i obsługę różnego rodzaju czujników czy elementów wykonawczych. Dla wielu z nich, jak Arduino czy Raspberry Pi, dostępne są także liczne materiały pomocne w pracy nad projektem.
Jeśli chodzi o oprogramowanie, potrzebne są narzędzia, które pozwolą wykonać implementację programu sterującego robotem. Środowisko MATLAB i Simulink daje możliwości prostej i szybkiej implementacji projektu oraz uruchomienia go na platformie docelowej.
W poniższym artykule zaprezentowany jest projekt robota mobilnego, który utrzymuje zadany dystans do przeszkody (np. podąża za ręką). Został on zrealizowany w oparciu o oprogramowanie MATLAB i Simulink.
Wykorzystywany sprzęt
Do wykonania robota mobilnego wybrana została platforma sprzętowa Arduino Due. Jest to platforma wyposażona w 32-bitowy mikroprocesor ARM, 54 wejścia/wyjścia cyfrowe oraz 12 wejść analogowych. Pozwala to na realizację dość zaawansowanych algorytmów sterowania oraz obsługę licznych peryferii. Właściwości układu Arduino Due poszerzone zostały poprzez zastosowanie Arduino Motor Shield, który daje możliwości sterownia silnikami DC.
Projekt bazuje na podwoziu wyposażonym w dwa silniki prądu stałego z przekładniami, koła, podporę oraz zestaw baterii zasilających. Całość uzupełniona została czujnikami odległości, enkoderami dla pomiaru prędkości silników oraz przyciskiem pozwalającym na manualne uruchomienie lub zatrzymanie robota.
Oprogramowanie
Do zaprojektowania i implementacji algorytmu kontrolującego pracę robota użyte zostały narzędzia firmy MathWorks, które pozwalają na realizację pełnego projektu w oparciu o model wykonany w Simulinku. Wykorzystana została również funkcjonalność oprogramowania w dziedzinie identyfikacji silników i doboru ich regulatorów (System Identification Toolbox, Simulink Control Design, Simulink Design Optimization). Pomocna okazała się również możliwość integracji w modelu diagramów Stateflow, które są wygodnym sposobem reprezentacji logiki w projekcie.
Implementacja projektu przygotowanego w Simulinku dla platformy Arduino wykonywana jest automatycznie, co pozwala uniknąć pisania ręcznie kodu C. Takie podejście pozwala skoncentrować się na tworzeniu algorytmu sterującego, bez angażowania sił w realizację implementacji programistycznej.
Poza generacją programu sterującego dla Arduino, mamy również możliwość uruchamiania go bezpośrednio z Simulinka, a także modyfikacji parametrów i podglądu sygnałów w trakcie pracy robota. Współpraca z Arduino jest możliwa dzięki pakietowi wsparcia sprzętowego dedykowanego dla tej platformy. Jest on darmowym dodatkiem dla użytkowników Simulinka. Więcej informacji można znaleźć na stronie producenta.
Współprace oprogramowania MATLAB i Simulink ze sprzętem zapewniają dedykowane pakiety wsparcia (Hardware Support Packages).
Zastosowane oprogramowanie pozwoliło szybko zrealizować projekt. Decydując się na rozwiązanie bazujące na modelu w Simulinku uzyskaliśmy również czytelną reprezentację programu sterującego. Ułatwia to przekazanie zrealizowanego zadania innej osobie czy też kontynuację pracy w późniejszym terminie.
Program sterujący robotem mobilnym
Całość systemu sterowania robotem została zrealizowana na bazie modelu przedstawionego poniżej. Do wykonania projektu wykorzystane zostały możliwości budowy modeli hierarchicznych.
W widoku głównym widzimy tylko dwa podsystemy. Pierwszy z nich reprezentuje układ sterowania, a drugi obiekt, czyli robota mobilnego. Wewnątrz tego podsystemu umieszczone zostały bloki odpowiedzialne za bezpośrednie sterownie silników, obsługę czujników czy pomiary prędkości. Wyniki uzyskane w tej części modelu zwracane są do pierwszego podsystemu, który na ich podstawie wyznacza aktualne sterowanie.
W ten sposób zrealizowana została pętla sprzężenia zwrotnego. Każdy z wymienionych podsystemów zawiera w sobie inne elementy, w tym także kolejne podsystemy. Pełna struktura modelu jest widoczna po lewej stronie okna w Model Browser. W ten sposób można realizować złożone projekty przy jednoczesnym zachowaniu przejrzystości i czytelności modelu.
Obiekt Plant_mobile_robot zawiera w sobie podsystemy odpowiedzialne za:
- odczyt informacji z czujników odległości i przycisku Stop/Start,
- algorytm wyliczający prędkości kół, na podstawie sygnałów odczytanych z enkoderów,
- odometrię, która pozwala na wyznaczenie położenia i kąta obrotu robota na podstawie informacji o prędkości kół.
Cześć poświęcona sterowaniu (widoczna na poniższym rysunku) zawiera kolejne podsystemy:
- układy regulacji prędkością obu silników wykorzystujące regulatory PID,
- wstępną obróbkę sygnałów pochodzących z sensorów,
- układ logiczny decydujący o trybie pracy robota oraz jego ruchu.
Interface sprzętowy
Projektant tworzący rozwiązanie w Simulinku nie musi pisać ręcznie kodu C. Dotyczy to także sterowników sprzętowych. W systemie wykorzystywane są wejścia i wyjścia cyfrowe, wejścia analogowe, a także wyjścia PWM. Ich obsługa realizowana jest z wykorzystaniem bloków, które są dostarczane przez pakiet wsparcia dla Arduino.
Konfiguracja bloku odbywa się przez przygotowany interfejs. Parametry dostępne do modyfikacji różnią się w zależności od typu wejścia/wyjścia. W przypadku, widocznej na poniższym rysunku, konfiguracji wejścia cyfrowego dostępne paramenty to numer wejścia oraz czas próbkowania (jego wartość określa zmienna Ts, będąca globalną wartością czasu próbkowania dla modelu).
Interfejs sprzętowy zrealizowany z wykorzystaniem bloków z pakietu Arduino Support from Simulink (otwarte okno konfiguracji wejścia cyfrowego).
Gotowe sterowniki w postaci bloków Simulinka znacznie przyspieszają i ułatwiają prace nad projektem. Bloki sprzętowe mogę być wykorzystane zarówno do wdrożenia rozwiązania, jak i do prototypowania, w czasie którego mamy podgląd sygnałów w Simulinku.
Logika sterująca ruchem
Głównym elementem decydującym o zachowaniu robota jest układ logiczny, wykonany z wykorzystaniem diagramu Stateflow. Realizacja tego układu widoczna jest na kolejnym rysunku.
Dwa podstawowe stany umieszczone w diagramie to power_on i power_off, odpowiadające stanom pracy i wyłączenia robota. Stanem początkowym jest power_off, który wewnątrz zawiera instrukcje ustawiające prędkości silników na 0.
Przejście pomiędzy tymi dwoma stanami następuje
po wciśnięciu przycisku podłączonego do Arduino.
Wewnątrz stanu power_on widoczne są trzy stany realizujące poszczególne elementy ruchu robota. Są to kolejno:
- start – prędkość kół wynosi 0, a robot czeka na informacje z czujników,
- goFurther – prędkość kół ustawiona na 8 [rad/s] oraz kierunek ruchu do przodu,
- goBack – prędkość kół ustawiona na 8 [rad/s] oraz kierunek ruchu do tyłu.
Przejścia pomiędzy ruchem naprzód, a stanem początkowym oraz ruchem wstecz, a stanem początkowym odbywają się w zależności od wartości forward i backward. Zmienne te są wejściami do diagramu. Ich wartość zależna jest od informacji przesłanych przez czujnik odległości. Jeśli odległość od przeszkody wynosi więcej niż 20 cm następuje ruch naprzód, jeśli odległość jest mniejsza niż 12 ruch wstecz.
Sprawdzanie tych warunków odbywa się
z wykorzystaniem bloków Simulinka, poza diagramem.
Dzięki temu, że stan power_on jest nadrzędny względem stanów decydujących o ruchu robota, w każdej chwili możliwe jest przejście do power_off, jeśli tylko nastąpi naciśnięcie przycisku. Tak wykonana logika pozwala osiągnąć efekt ruchu robota, który utrzymuje dystans do przeszkody (np. ręki) w przedziale 12-20 cm.
Realizacja logiki zarządzającej ruchem robota jest prostsza i bardziej przejrzysta w przypadku zastosowania diagramu Stateflow, niż realizacja z wykorzystaniem języka C. Dodatkową zaletą jest też możliwość uruchomienia modelu w trybie symulacji External. Pozwala to na wykonywanie programu na platformie sprzętowej przy jednoczesnej obserwacji aktualnie aktywnych stanów.
Obserwacja jest możliwa dzięki animacji stanów i przejść pomiędzy nimi
w trakcie symulacji lub wykonania programu na sprzęcie.
Implementacja na sprzęcie
Na etapie projektu, w którym potrzebna będzie implementacja rozwiązania na Arduino, należy przeprowadzić konfigurację modelu. Ma to na celu wskazanie platformy sprzętowej, dla której ma zostać wygenerowany kod. Poza określeniem platformy docelowej mamy możliwość podglądu implementacji poszczególnych typów danych czy modyfikacji opcji uruchomienia programu na Arduino. Okno konfiguracyjne widoczne jest poniżej.
Opisany projekt jest prostym przykładem, który pozwala zobaczyć jak narzędzia MATLAB i Simulink pozwalają na przyspieszenie i ułatwienie pracy nad projektami robotycznymi czy mechatronicznymi. Funkcjonalności oprogramowania pozawalają się skupić na takich elementach projektu jak logika działania czy algorytmika, jednocześnie oszczędzając czas poświęcany na implementację. Duże znaczenie mają także możliwości prototypowania czy testowania rozwiązania (m.in. tryb ‘External’).
Więcej przykładów użycia oprogramowania MATLAB i Simulink można znaleźć w poniższej serii poradników wideo oraz na stronie: http://makerzone.mathworks.com/
Autor: Rafał Płatek
OPROGRAMOWANIE NAUKOWO-TECHNICZNE
ul. Pod Fortem 19
31-302 Kraków
http://www.ont.com.pl
To nie koniec, sprawdź również
Przeczytaj powiązane artykuły oraz aktualnie popularne wpisy lub losuj inny artykuł »
arduino, mathworks, matlab, programowanie, simulink
Trwa ładowanie komentarzy...