WYŻSZA SZKOŁA INFORMATYKI I ZARZĄDZANIA Z SIEDZIBĄ W RZESZOWIE Inteligentne Systemy Autonomiczne Projekt Zaprogramować działanie robota w narzędziu USARSim Prowadzący: Wykonawca: Mgr Daniel Jachyra Paweł Potoniec - 39225 Rzeszów, 2011 r.
Spis treści: Spis treści:... 2 Streszczenie... 3 Teoria... 3 USARSim... 3 USARSim a Unreal... 3 Środowisko robota... 3 Cel, opis i założenia projektu... 3 Dostępne rozwiązania... 4 Pyro... 4 USAR_UI... 4 SimpleUI... 4 MATLAB Toolbox... 4 Rozwiązanie... 5 Mapa... 5 Działanie... 5 Skrypty i implementacja... 5 Implementacja właściwa... 5 Multimedia... 6 Podsumowanie i wnioski:... 9
Streszczenie Niniejszy dokument opisuje sposób w jaki zostało zaprogramowane działanie robota w narzędziu USARSIM, problemy techniczne, analizę dostępnych rozwiązań i właściwe wybrane rozwiązanie Teoria USARSim To skrót od Unified System for Automation and Robot Simulation czyli zunifikowany system dla automatyki i symulacji robotami. Jest to narzędzie pomocne przy analizie działań, potrzeb i zachowania robotów. Opiera się na zachowaniu robotów w środowisku, fizycznej interakcji ze środowiskiem, przystosowaniem się do zmieniających się warunków. USARSim a Unreal USARSim jest narzędziem-modem do gry Unreal Tournament. W zadanym projekcie została użyta wersja 3.1.3 do gry UT 2004. Mod ten to zestaw plików implementujący jako aktorów roboty i nadający im odpowiednie cechy i funkcje. Użytkownik może w trybie widza rozglądać się po mapie, oglądać działanie robota a poprzez aplikację kliencką połączyć się z tym środowiskiem i wysyłać komunikaty do robota. Istnieje również możliwość odczytów aktualnych wskazań różnych sonarów w zależności od użytego robota. Środowisko robota Standardowymi środowiskami dla testów robotów są 3 areny: żółta, pomarańczowa i czerwona różniąca się poziomem trudności progresywnie od najprostszej żółtej do czerwonej najtrudniejszej. Areny te mają swoje odzwierciedlenie w rzeczywistości. Cel, opis i założenia projektu Celem projektu było zaprogramowanie działania robota w środowisku USARSim i to też zostało uczynione. Do realizacji projektu zostały przetestowane różne aplikacje klienckie oraz wybrano jedno z nich, a następnie przygotowano odpowiednie procedury komunikujące się ze środowiskiem Unreal'a i USARSim a konkretnie z danym robotem. Następnie zostało zaprogramowane działanie robota polegające na przejechaniu danej ścieżki unikając jednocześnie zderzenia ze ścianą. Użyty robot to P2AT czterokołowy pojazd posiadający 8 sensorów z przodu i tyle samo z tyłu korpusu.
Dostępne rozwiązania Zgodnie z opisem w dokumentacji USARSim do sterowania robotem będziemy potrzebować Kontroler. Możemy użyć tu m.in. MOAST, Pyro czy bibliotekę Player. Dodatkowo na stronie projektu USARSim znaleźć można kilka narzędzi wspomagających komunikację: USAR_UI, SimpleUI czy ImageSrv. Dla celów projektu wykorzystane zostały następujące narzędzia: Pyro, USAR_UI, SimpleUI. Pyro Pyro jest środowiskiem dla systemu linux. Jednakże Python, język w którym napisane zostało to narzędzie jest językiem wieloplatformowym również i Pyro okazało się posiadać swój port na system Windows. Zatem przystępiono do instalacji środowiska Pyro zgodnie z zamieszczoną w manualu USARSim instrukcją dla systemów Windows. Niestety okazało się, iż Pyro nie jest już więcej wspierane przez USARSim, zatem mogą występować problemy z uruchomieniem PyroBota biblioteki zewnętrznej dla środowiska Pyro integrującej USARSim z Pyro. Tak też się stało. Po próbach znalezienia błędu dalszą pracę z tym narzędziem zaniechano. USAR_UI Jest to aplikacja okienkowa łącząca się z serwerem UT za pomocą której można wysyłać różnorodne wiadomości do środowiska USARSim. Niestety w tej aplikacji nie działał podgląd z kamery ze środowiska gry, pomimo poprawnie działającej ręczniej kontroli robotem tj. ruchem do przodu i do tyłu za pomocą klawiszy nawigacyjnych. SimpleUI Kolejnym narzędziem był program SimpleUI. Jest to bardziej zaawansowana wersja prgoramu USAR_UI, niestety podobnie jak poprzednik nie rerował poprawnie obrazu. Problemem najprawdopodobnie była niezgodność jednej z bibliotek DirectX'a z plikiem dll odpowiedizalnym za wyświetlanie obrazu. Po kilku dniach szukania rozwiązania problemu program ten również został odrzucony MATLAB Toolbox Po kilku dniach straconych dni na poznawanie niedziałających aplikacji skierowano się z pomocą do Prowadzącego: Pana Mgr Daniela Jachyry. Zostało wskazane alternatywne narzędzie na podstawie którego może być oparty projekt - MATLAB Toolbox dla USARSim. Wymagało ono do pełnej pracy całego systemu MATLAB. Jest to zestaw funkcji i skryptów dla MATLABa oraz pakiet zawierający klasy Java do
połączenia się ze środowiskiem USARSim w Unrealu. Po kilku dniach testów pakiet ten został użyty do wykonania niniejszego projektu. Rozwiązanie Mapa Do celów projektu stworzona została specjalna mapa, składająca się z krętej ścieżki ograniczonej ścianami. Celem robota jest przejechanie danej ścieżki bez kolizji. Mapa została stworzona w środowisku UnrealED (dostępna w załączniku) Działanie Robot po uruchomieniu funkcji jedz() porusza się do przodu. Z przodu robota istnieje 8 sensorów, podobnie z tyłu robota. Podczas ruchu robota odczytywane są aktualne wskazania odpowiednich sonarów. Jeśli odległość pomiędzy głownymi sensorami ( o numerach 5 i 6) a wykrytym obiektem jest mniejsza niż 1 (jednostka w środowisku USARSim) zostają zczytane dane z sensorów umieszczonych po bokach pojazdu. Na podstawie tego podejmowana jest decyzja z której strony znajduje się przeszkoda oraz pojazd rozpoczyna skręcanie w odwrotnym kierunku aż nie wykryje kolizji. Następnie ruch do przodu jest wznawiany. Po dojechaniu robota do końca trasy cel zostaje osiągnięty. Skrypty i implementacja Działanie robota zostało zaimplementowane w MATLABie, natomiast za pomocą odpowiednich funkcji pomocniczych zawartych w Toolbox'ie odbywa się komunikacja ze środowiskiem. Pośredniczy tej operacji obiekt Proxy biblioteka która wstrzykuje odpowiedni kod Java do silnika Unreal. Implementacja właściwa Utworzenie nowego robota P2AT: rob = initializerobot('nazwa robota','p2at',[0-2 1.3 ], [0 0 90] ); Ruch i logika wyboru kierunku ruchu robota: skrecam = false; while true sonarreadings = getsonarreadings(rob); i = 3;
skrecam = 0; while i <= 6 if( sonarreadings.range(i) < 1) if( sonarreadings.range(1) > sonarreadings.range(7) ) skrecam = 1; else skrecam = -1; i = i + 1; if( skrecam > 0 ) sdrivecommand(rob, [-30 30] ); else if( skrecam < 0 ) sdrivecommand(rob, [30-30]); else sdrivecommand(rob, [80 80]); pause(0.2); Multimedia Oprócz przygotowania kodu implementującego odpowiednie zachowanie robota ruch po ścieżce przygotowane zostały zrzuty ekranu ze środowiska oraz film pokazujący przejazd robota i jego zachowanie. Zrzuty ekranu:
Plik wideo w załączniku. Materiały zostały przygotowane za pomocą programu Fraps oraz Windows Movie Maker. Podsumowanie i wnioski: Z uwagi na dość ogarniczoną dokumentację USARSim nie było łatwo zaprogramować działanie robota w tym środowisku. Dokumentacja ta co prawda zawierała informacje na temat rozpoznawanych komunikatów, niestety nie wspomniano o żadnych alternatywnych sposobach komunikacji ze środowiskiem np. za pomocą API. Na szczęście dzięki pomocy Prowadzącego polegającej na wskazaniu narzędzia Matlab Toolbox for USARSim projekt został ukończony z zadowalającym sukcesem, a zdobyte doświadczenie w mechanizmach programowania robota zdecydowanie powiększy zakres zainteresowań