Projekt i implementacja systemu kontrolującego zdalnie sterowany pojazd z wykorzystaniem platform Android i Arduino Piotr Szarański Promotor: mgr inż. Zbigniew Rosiek Cel pracy Stworzenie kompletnego i funkcjonalnego systemu zdalnego sterowania, w skład którego wchodzą: Zdalnie sterowany pojazd Kontroler zdalnie sterowanego pojazdu Zakres pracy Projekt i implementacja oprogramowania wbudowanego w pojazd zdalnie sterowany Projekt i implementacja oprogramowania wbudowanego w kontroler pojazdu zdalnie sterowanego Podzespołami pojazdu będzie zawiadywać wybrana platforma Arduino, oprogramowanie sterujące zostanie wykonane w postaci typowego dla tej platformy szkocu w języku programowania C++ Kontrolerem pojazdu zdalnie sterowanego będzie telefon komórkowy „smartphone” z systemem operacyjnym Google Android, oprogramowanie sterujące zostanie zrealizowane w postaci aplikacji APK napisanej w języku programowania Java. Projekt elektroniczny zdalnie sterowanego pojazdu z wyszczególnieniem bloków funkcyjnych i niezbędnych obliczeń W oparciu o projekt zostanie skonstruowany pojazd dla celów demonstracyjnych. Wymagania systemu Zdalnie sterowany pojazd Zrealizowany w oparciu o platformę Arduino - popularną platformę elektronicznego prototypowania Pojazd wyposażony w: Kamerę wideo o rozdzielczości VGA (640x480) osadzoną na ramieniu o dwóch stopniach swobody Sensor napięcia zasilającego Oświetlenie pokładowe Kontroler pojazdu zdalnie sterowanego Telefon komórkowy typu „smartphone” z najpopularniejszym obecnie mobilnym systemem operacyjnym - Google Android Sterowanie pojazdem przy użyciu ekranu dotykowego Napęd pojazdu Kamera i oświetlenie pokładowe Ramię kamery wideo Prezentowanie danych sensorycznych pojazdu przy użyciu ekranu dotykowego Siła sygnału i opóźnienie transmisji danych Obraz z pokładowej kamery wideo Napięcie zasilające pojazdu Wyzwania Budowa systemu zdalnego sterowania pojazdem jako zagadnienie mechatroniczne Informatyka Elektronika Mechanika Opracowanie protokołu wymiany danych sterujących kontroler - pojazd Strumieniowanie obrazu z pojazdu do kontrolera Wybór odpowiedniej metody strumieniowania obrazu - niskie wymagania sprzętowe, małe opóźnienia Wydajna implementacja odtwarzacza strumieni na telefonie Google Android Projekt elektroniczny modułów pojazdu: Napęd Oświetlenie Sterowanie ramieniem kamery Zasilanie Analiza Przegląd pojazdów zdalnie sterowanych Budowa Komunikacja Sterowanie Pojazd zdalnie sterowany w ujęciu mechatronicznym Sensoryka Aktoryka Mechanika Obliczenia Platforma Google Android Dostępne media transmisyjne Przechowywanie danych Metody programowania Platforma prototypowania elektronicznego Arduino Budowa Potencjał elektroniczny Możliwości rozbudowy Metody programowania Strumieniowanie materiału wideo z niskim opóźnieniem Projekt systemu Przypadki użycia Diagramy aplikacji kontrolera i wbudowanej w pojazd: Architektury Klas Maszyny stanowej Aktywności Harmonogramowania Schemat bazy danych aplikacji sterującej Projekt systemu Makiety ekranów aplikacji strującej Projekt systemu Projekt elektronicznych układów pojazdu Moduł napędowy Moduł kamery Moduł oświetlenia Sensor napięcia zasilającego Moduł zasilający Projekt systemu Implementacja Platforma Arduino Yun sterująca działaniem pojazdu zdalnie sterowanego Autorska płyta zawierająca elektroniczne sterowniki modułów wykonawczych pojazdu osadzona na platformie Arduino Yun Sterownik oświetlenia bazuje na tranzystorze bipolarnym NPN w układzie ze wspólnym emiterem Sterownik silników napędowych bazuje na układzie DRV8833 firmy Texas Instruments Silniki krokowe sterowane bezpośrednio z ATMEGA 32u4 Autorski program dla mikrokontrolera Atmel ATMEGA 32u4 zawiadujący pracą podzespołów pojazdu dla platformy Arduino Yun Autorski program dla kontrolera pojazdu na platformę Google Android Komunikacja kontrolera z pojazdem oparta na standardzie WiFi 802.11 b/g/n Gniazdo sieciowe dedykowane komendom kontrolera i danym sensorycznym pojazdu Gniazdo sieciowe dedykowane strumieniowi wideo Problemy na etapie imlementacji Opracowanie wydajnej metody obsługi strumienia wideo na platformie Google Android i Arduino Yun Wykorzystanie kodeka o małych opóźnieniach oraz niskich wymaganiach pamięciowych i obliczeniowych - M-JPEG Opracowanie wydajnego mechanizmu operowania na strumieniu M-JPEG Opracowanie wydajnego mechanizmu dekodowania i prezentowania materiału wideo Opracowanie wydajnej, nieblokującej metody komunikacji kontrolera z pojazdem Wykorzystanie wątków działających w tle aplikacji (polling ekranu dotykowego) Ucieczka przed algorytmem Nagle`a (TCP_NODELAY) Pakiety danych o niewielkiej i stałej długości Unikanie alokacji nowych obiektów z powodu negatywnego wpływu procesu odśmiecania pamięci (Garbage Collection) na płynność działania aplikacji kontrolera Niewystarczająca wydajność prądowa modułu zasilającego Realizacja Realizacja Panel informacyjny: • Opóźnienie sygnału • Napięcie zasilające • Moc odbieranego sygnału Obraz z kamery wideo prezentowany w tle Pole dotykowe sterujące napędem pojazdu Pole włączające i wyłączające oświetlenie Pole włączające i wyłączające kamerę Pole dotykowe sterujące pozycją kamery Realizacja Regulatory napięcia LM2490T 5V z kondensatorami filtrującymi Tranzystor NPN BC548B wraz z rezystorami ograniczającymi prąd i ściągającym do masy Sterownik silników prądu stałego DRV8833 Wyprowadzenia od lewej: do silników prądu stałego, krokowych, oświetlenia, zasilania Testy Testy przeprowadzone osobiście oraz z udziałem osób trzecich Testy funkcjonalne w oparciu o listę przypadków użycia Profilowanie aplikacji kontrolera Śledzenie alokacji pamięci Obciążenie procesora Aktywność Garbage Collectora oraz jego wpływ na płynność aplikacji Profilowanie systemu operacyjnego Linux OpenWRT pojazdu Analiza statystyk interfejsu sieciowego Arduino Yun pod kątem obciążenia, błędów i retransmisji pakietów Analiza statystyk obciążenia procesora i pamięci RAM układu Atheros AR9331 Wnioski z testów Funkcjonalność systemu zgodna z wymaganiami Napęd w stylu gąsienicowym daje duże zdolności manewrowania Niskiej jakości antena WiFi wbudowana w Arduino Yun ogranicza użyteczny dystans między kontrolerem a pojazdem Maksymalny zasięg w terenie otwartym wynosi około 10 metrów Antena o niejednorodnej charakterystyce kierunkowej dodatkowo ogranicza ten dystans Profilowanie aplikacji kontrolera nie wykazuje problemów Mała aktywność Garbage Collectora bez długich pauz w działaniu systemu (<10ms) Niewielka alokacja pamięci Bezpieczny margines obciążenia CPU Profilowanie systemu operacyjnego Linux OpenWRT nie wykazuje problemów Brak błędów i retransmisji pakietów Niskie obciążenie CPU i RAM Dzieci w wieku 8 i 2 lata są zachwycone, dziecko niespełna miesięczne jest niespokojne Podsumowanie i wnioski System operacyjny Google Android jest rozwiniętym i nowoczesnym systemem operacyjnym Bogactwo API i narzędzi wspierających tworzenie aplikacji udostępniane przez Android SDK Programowanie w języku Java, który jest mniej wymagający niż np. w Objective C znanym z platformy Apple IOS Platforma elektronicznego prototypowania Arduino tworzy tanie i dostępne możliwości interakcji z otoczeniem Pozyskiwania danych z otaczającego świata Materializowania pracy programów poza ekranem komputera Wykorzystanie cech obu platform pozwala tworzyć złożone systemy o szerokim spektrum zastosowań i wysokiej użyteczności Prezentacja modelu demontracyjnego