Programowanie Raspberry Pi z użyciem MATLAB i Simulink

Programowanie Raspberry Pi z użyciem MATLAB i Simulink

Wiemy już jak połączyć możliwości środowisk MATLAB i Simulink z Arduino. Pora na kolejny przykład - tym razem z użyciem Rapsberry Pi.

Celem tego projektu było opracowanie systemu wizyjnego, który jest w stanie poruszać kamerą tak, aby śledzony obiekt był w centrum obrazu.

Stale rosnąca popularność tanich platform sprzętowych spowodowała ogromną liczbę pomysłów na ich wykorzystanie. Jedną z najbardziej popularnych oraz dających duże możliwości rozwijania własnych projektów jest Raspberry Pi. Wraz z rosnącą popularnością projektów realizowanych z wykorzystaniem tej platformy rozwijana była warstwa sprzętowa jak i dodawane były kolejne możliwości programowania układu. Wśród najpopularniejszych metod programowania należy wymienić języki C czy Python.

Bardzo istotna jest także możliwość programowania i interakcji z urządzeniem za pomocą środowiska MATLAB® i Simulink®. W artykule przybliżona została metodologia wykorzystania wymienionych programów do stworzenia urządzenia podążającego kamerą (zamocowaną na serwie) za obiektem o określonym kolorze.

Programowanie Arduino z użyciem MATLAB i Simulink
Programowanie Arduino z użyciem MATLAB i Simulink

MATLAB zapewnia wiele potężnych narzędzi idealnych do projektowania robotów mobilnych. Czy… Czytaj dalej »

Sprzęt potrzebny do wykonania projektu

Podstawą tworzonego systemu będzie Raspberry Pi. W tym konkretnym projekcie wykorzystano drugą wersję układu, która jest wyposażona w procesor ARM 900 MHz oraz 1 GB RAM. Wykorzystywano system operacyjny Raspbian.

Projekt dopełniają: kamera Logitech C270, serwomechanizm Hitec HS-485HB oraz konieczne okablowanie i elementy montażowe. Na poniższym zdjęciu widoczna jest platforma testowa oraz zielony, drewniany klocek, który był obiektem śledzonym przez kamerę.

Przykładowa platforma testowa.

Oczywiście warstwy sprzętowej, która została wykorzystana w tym projekcie, nie musimy traktować jako docelowe środowisko działania rozwiązania. Oprogramowanie przygotowane z użyciem Raspberry Pi może także przenieść później na inną platformę sprzętową.

Oprogramowanie

Do zaprojektowania i implementacji oprogramowania sprawującego kontrolę nad układem użyte zostało środowisko MATLAB i Simulink. Dzięki temu całość prac projektowych prowadzona była w ramach modelu Simulinka oraz włączanego do niego kodu w języku MATLAB.

System opracowany został z wykorzystaniem dwóch bazowych narzędzi MATLABa i Simulinka. Metoda identyfikacji obiektu na obrazie nie jest bardzo zaawansowana, gdyż celem było przedstawienie pełnego workflow - od założeń projektowych do działającego systemu, a nie poszukiwanie najlepszej metody z dziedziny przetwarzania obrazów.

Oczywiście zastosowane algorytmy mogą być rozwijane w dalszych pracach lub mogą być zastąpione bardziej zaawansowanymi metodami. W dziedzinie przetwarzania obrazów, sieci neuronowych czy deep learning pomocne mogą być narzędzia:

  • Image Processing ToolboxTM
  • Computer Vision System ToolboxTM
  • Statistics and Machine Learning ToolboxTM
  • Neural Network ToolboxTM

Rozwój układów i algorytmów sterownia może być wspomagany przez:

  • Control System ToolboxTM
  • System Identification ToolboxTM
  • Simulink Control DesignTM
  • Simulink Design OptimizationTM

Pakiety wsparcia sprzętowej

Na etapie implementacji sprzętowej projektu również wykorzystywane było środowisko MATLAB i Simulink. Było to możliwe dzięki współpracy tego oprogramowania z zestawem różnego rodzaju platform sprzętowych. Współpraca taka jest realizowana poprzez pakiety wsparcia sprzętowego dostarczane przez MathWorks. Jedną ze wspieranych platform jest oczywiście Raspberry Pi, więcej informacji na ten temat można znaleźć na stronie producenta.

Współpraca pomiędzy Raspberry Pi oraz Simulinkiem wymaga pobrania, zainstalowania oraz konfiguracji pakietu wsparcia sprzętowego. Wszystkie te operacje możemy wykonać za pomocą wbudowanych w MATLABa narzędzi. Jedno z nich, Add-Ons Explorer (pozwalający zarządzać instalacjami pakietów), widoczne jest na poniższym zrzucie ekranu.

Współpracę oprogramowania MATLAB i Simulink ze sprzętem zapewniają dedykowane pakiety wsparcia (Hardware Support Packages).

Pakiet wsparcia sprzętowego zapewnia:

  • zestaw bloków do obsługi interfejsów urządzenia (widoczny poniżej),
  • automatyczną generację kodu C z modelu Simulinka,
  • komunikację z systemem operacyjnym, co pozwala na automatyczne przeniesienie programu na docelową platformę,
  • możliwość pracy w trybie external, co pozwala na szybkie prototypowanie rozwiązania na sprzęcie (poprzez podgląd sygnałów i ustawianie parametrów w trakcie działania programu).

Biblioteka "Simulink Support Package for Raspberry Pi Hardware".

Zastosowane oprogramowanie pozwoliło na szybką implementację rozwiązania, bez konieczności ręcznego pisania kodu C. Realizacja w graficznym środowiska Simulinka pozwala też na czytelną reprezentację projektu.

Tworzenie programu

Całość oprogramowania widoczna jest na poniższym zrzucie ekranu. Dzięki graficznej reprezentacji programu bardzo łatwo możemy odczytać strukturę i przenalizować działanie tworzonego rozwiązania.

Model główny, prezentujący oprogramowanie stacji monitoringu.

Punktem początkowym pracy modelu jest obraz z kamery USB podłączonej do Raspberry Pi. Do jej obsługi wykorzystywany jest blok V42L Video Capture z pakietu wsparcia sprzętowego. Kluczowe ustawienia to wskazanie źródła czyli urządzenia, ustawienie rozdzielczości i czasu próbkowania.

Konfiguracja sterownika kamery.

Informacje uzyskane z kamery przekazywane są do analizy oraz wizualizacji. Ścieżka wizualizacyjna nie jest rozbudowana. Sygnały wygenerowane z bloku sterownika kamery przekazywane są do bloku Mark image. Bloki tego typu pozwalają na integrację kodu w języku MATLAB w modelach Simulinka. Funkcja wykonywana przez Mark image to oznaczenie na obrazie zidentyfikowanego punktu środka śledzonego obiektu.

Kod umieszczony wewnątrz wykonywanej funkcji:

Wyjścia bloku MATLAB Function przekazują sygnały bezpośrednio do SDL Video Display, który jest odpowiedzialny za wyświetlanie obrazu w Simulinku.

Ścieżka analizy obrazu jest trochę bardziej rozbudowana. W podsystemie ObjectDetection zawiera binaryzację obrazu z wyodrębnieniem elementów zielonych. W dalszej kolejności znajduje się MATLAB Function, która realizuje wyznaczenie środka znalezionego obiektu.

Kod napisany w języku MATLAB zamieszczony jest poniżej:

Zwrócone przez funkcję wartości są przekazywane do wizualizacji w celu oznaczenia środka obiektu. Jednocześnie dane te przekazane są do sterowania serwomechanizmem. Na ich podstawie następuje odpowiednie pozycjonowanie kamery. W celu wyznaczenia pozycji, w której powinna się znaleźć kamera, do podsystemu servo przekazywane są informacje o rozmiarze pobranego obrazu, pozycji środka obiektu oraz potwierdzenie, czy w ogóle obiekt został znaleziony.

Zadaniem podsystemu sterownia jest wyznaczenie pozycji i ustawienie sygnałów sterujących na wyjściach układu. Wyliczenie pozycji polega na ustaleniu, w jakiej odległości od środka obrazu znajduje się zidentyfikowany obiekt. Wyznaczenie kierunku ruchu serwomechanizmu, tak aby utrzymywać obiekt w centrum, realizowane jest poprzez kod funkcji servoDirection:

Wyznaczony kierunek ruchu serwomechanizmu przekazywany jest do bloku Discrete-Time Integrator, który ustala narastającą (lub malejącą) wartość sterowania. Dodatkowo, w przypadku zniknięcia śledzonego obiektu z pola widzenia kamery, pozycja serwomechanizmu jest resetowana. Realizowane jest to dzięki wejściu External reset w integratorze, które jest podłączone do sygnału niosącego informację o zidentyfikowaniu obiektu. Połączenia bloków widoczne jest poniżej:

Podsystem sterownia serwomechanizmem.

Wartość wyznaczoną przez integrator wykorzystujemy jako pozycję serwomechanizmu i używamy w bloku drivera. Standard Servo Write to blok dostarczony z pakietem wsparcia sprzętowego, pozwalający na kontrolę serwomechanizmu. Sterownik oczywiście musi być odpowiednio skonfigurowany poprzez wskazanie pinu czy ustawienia związane z generacją sygnału PWM.

Konfiguracja sterownika serwomechanizmu.

Implementacja na sprzęcie

Po przeprowadzeniu wszystkich prac związanych z przygotowaniem algorytmu oraz budową i konfiguracją modelu, można przejść do fazy implementacji. Dzięki współpracy oprogramowania MATLAB i Simulink z platformą Raspberry Pi wdrożenie rozwiązania odbywa się bez konieczności pisania kodu w C lub innym języku. Kod jest generowany automatycznie, kompilowany i uruchamiany na platformie. Dzięki temu możemy włączyć symulację w trybie external i na bieżąco, z poziomu modelu Simulinka, obserwować efekt pracy systemu czy też modyfikować jego parametry.

Przykład działania programu w praktyce oraz więcej informacji na temat tego rozwiązania znaleźć można w poniższym materiale wideo:

Podsumowanie

Informacje o tym oraz innych projektach z wykorzystaniem tanich platform sprzętowych można znaleźć w webinarium Wykorzystanie tanich platform sprzętowych z oprogramowaniem MATLAB i Simulink”.

Autor: Rafał Płatek

OPROGRAMOWANIE NAUKOWO-TECHNICZNE
ul. Pod Fortem 19
31-302 Kraków
http://www.ont.com.pl

kamera, MATALB, RaspberryPi, simulink, śledzenie

Komentarze

Dodaj komentarz