Krzysztof Jaskot 1 Krzysztof Jaskot Politechnika Śląska JĘZYK PROGRAMOWANIA W ŚRODOWISKU WIELOAGENTOWYM Streszczenie. W artykule przedstawiono język programowania w środowisku wieloagentowym bazujący na wykorzystaniu automatów skończonych jako efektywnego narzędzia do budowy skomplikowanych zachowań. Omówiono sposób jego wykorzystania do sterowania zespołem robotów mobilnych. Opisano warstwową strukturę systemu sterowania. Przedstawiono zbiór funkcji ściśle związanych ze sprzętem. Zaprezentowano wyniki działania języka Qscript. Omówiono sposób wykorzystania automatów skończonych jako narzędzia zarządzania sztuczną inteligencją. 1. Wprowadzenie Programowanie robotów jako przedmiot badań istnieje od kilkunastu lat. W wielu pracach poruszana jest tematyka programowania robotów oraz specjalistycznych języków wspomagających ten proces [1,2,3]. W pracach tych najczęściej opisywane są języki programowania robotów przemysłowych. Obserwowany od kilku lat dynamiczny rozwój robotyki mobilnej zmusza badaczy do intensywnych poszukiwań nowych narzędzi programistycznych ułatwiających implementację algorytmów sterowania w środowisku wielu robotów a w szczególności robotów mobilnych. Dość nowym obszarem badawczym, w którym mamy do czynienia ze sterowaniem grupą robotów mobilnych jest piłka nożna robotów [4,5,6]. Jest to dobry przykład odwzorowania problemów świata rzeczywistego. Sterowanie grupą robotów mobilnych zwanych agentami w dynamicznie zmieniającym się otoczeniu wiąże się z wieloma zagadnieniami, do których należą: planowaniem działań, generowaniem bezkolizyjnych trajektorii ruchu robotów, konieczność działania na podstawie niepewnej i niekompletnej informacji. W systemach wieloagentowych duże znaczenie ma podział zadań i planowanie działań grupowych, występowanie zarówno współzawodnictwa pomiędzy zespołami jak i kooperacji między zawodnikami tego samego zespołu w celu realizacji określonego zadania i czy to będzie gra w piłkę czy inny
2 język programowania w środowisku wieloagentowym problem wymaga to stworzenia odpowiednich algorytmów sterowania. Program sterowania dla każdego robota (agenta) można podzielić na kilka niezależnych podprogramów, realizujących podstawowe zachowania a następnie uzyskać globalny system sterowania poprzez składanie takich zachowań. Jednym ze sposobów formalizowania i opisu takiego systemu są automaty skończone [7]. W niniejszym artykule prezentowany jest język programowania Qscript służący do implementacji algorytmów sterowania agentami oraz środowisko programistyczne w którym jest on wykorzystywany. 2. Architektura systemu sterowania Oprogramowanie sterujące zostało zrealizowane w oparciu o strukturę warstwową która przedstawiona jest na rys. 1. Warstwa wewnętrzna (hardware on-line, off-line) odpowiedzialna jest za bezpośrednią komunikację z robotami (rzeczywistymi lub wirtualnymi) oraz obsługę systemu wizyjnego. Warstwa środkowa systemu sterowania jest pomostem między algorytmami sterowania a obsługą sprzętu. Jej zadaniem jest kompilacja programów przygotowanych w języku Qscript do natywnego kodu wykonywalnego procesora (asembler) oraz odpowiedzialna jest za wizualizację procesu sterowania rys. 2. Rys. 1 Struktura warstwowa systemu sterowania
Krzysztof Jaskot 3 Warstwa wewnętrzna umożliwia także wyprowadzenie na ekran dowolnego zestawu zmiennych do tzw. dziennika logów, który może zostać wykorzystany jako narzędzie debugowania programów napisanych w języku Qscript. Metoda ta nazywana jest także profilowaniem kodu, który jest jednym ze stałych elementów przy tworzeniu i testowaniu oprogramowania [8]. Możliwość podglądania zmiennych sterujących w programie obsługi agenta daje możliwość usuwania błędów, które pojawiają się w czasie tworzenia programu sterującego pracą robota. Warstwa zewnętrzna jest językiem programowania służącym do implementacji algorytmów sterowania. Zewnętrzny język programowania zapewnia ogromną elastyczność w trakcie tworzenia programów sterujących agentami, możliwa jest dowolna zmiana parametrów wpływających na proces sterowania bez ponownej kompilacji kodu całego systemu sterowania. Rys. 2 Wygląd systemu sterowania w środowisku wieloagentowym 2.1. Model kinematyki robota Do opisu kinematyki robota mobilnego w systemie sterowania SoccerSystem wykorzystano zależności przedstawione na rys. 3. Dokładny opis kinematyki robotów mobilnych można znaleźć w [9]. Dodatkowym założeniem było przyjęcie, że robot porusza się bez poślizgów. Przedstawiony model kinematyki jest podstawą do generowania
4 język programowania w środowisku wieloagentowym sterowania robotem mobilnym w trybie wirtualnym i rzeczywistym. Wektor prędkości opisany jest równaniem (1), gdzie V C prędkość środka robota, ω prędkość kątowa, V l V r prędkość lewego i prawego koła, D rozstaw kół. Rys. 3 Model kinematyki cos 0 vr vl V c cos S sin 0 2 Vc sin (1) vr vl 0 1 D 3. Język programowania QScript Język QScript został zaprojektowany w ramach prac badawczych związanych ze sterowaniem grupą robotów mobilnych w celu łatwej i szybkiej implementacji automatów skończonych obsługujących system wieloagentowy. Z innym podejściem do programowania robotów w środowisku wieloagentowym można zapoznać się w [10]. Głównym założeniem przyjętym w fazie projektowania języka była prostota składni, która została zrealizowana przez sięgnięcie do analogów syntaktycznych rodem z C++. Razem z kompilatorem/interpreterem języka znajdującym się w warstwie wewnętrznej systemu sterowania została stworzona pokaźna biblioteka zorganizowanych hierarchicznie funkcji, tak matematycznych, jak również specjalizowanych w wykonywaniu działań specyficznych dla systemu wieloagentowego np. odczyt pozycji i orientacji robotów, ustawienie prędkości poruszania się itp. Dzięki mechanizmowi callback programy mogą symulować funkcjonalność, której brakuje w danej implementacji kodu rzeczywistego agenta, tzn. istnieje prosta metoda testowania nowych funkcji agenta przed ich fizyczną implementacją w sterowniku robota, w sposób praktycznie przezroczysty dla aplikacji automatu skończonego.
Krzysztof Jaskot 5 3.1. Automaty skończone Automat skończony definiowany jest najczęściej jako piątka X A,, x, F, 0, gdzie: X - skończony zbiór stanów, A- skończony zbiór symboli wejściowych, - funkcja przejść, x 0 X stan początkowy, F stan końcowy [7]. Ogólna definicja automatu stanów opisuje każdy model, który zawiera system sterowany zdarzeniami. Zachowania systemu opisane są zbiorem stanów automatu, zbiorem zdarzeń wejściowych i funkcjami przejścia. Choć automat stanów może sterować w zasadzie dowolnym obiektem, najczęściej wykorzystuje się go w programowaniu sztucznej inteligencji. Za wykorzystaniem automatów skończonych jako narzędzia zarządzania zachowaniem agentów przemawia wiele cech. Automat stanów zmniejsza złożoność zachowań, dzieląc je na prostsze fragmenty, którymi łatwiej manipulować. Automaty stanów na ogół wykorzystywane są do sterowania obiektami, gdyż umożliwiają selektywne wykonywanie kodu obiektu w zależności od jego aktualnego stanu. Automat może zapewniać synchronizację sztucznej inteligencji z zewnętrznymi zdarzeniami, na przykład pojawieniem się sygnału z sensorów. Automaty stanów są łatwiejsze w testowaniu i usuwaniu z nich błędów, zawsze wiemy co wydarzy się w określonych warunkach, ponieważ przejścia stanów zostały zdefiniowane wcześniej i się nie zmieniają. Program sterujący działaniem agenta zrealizowany jako automat stanów nie wyklucza stosowania logiki rozmytej, sieci neuronowych i innych technik sztucznej inteligencji. Zapewnia on po prostu ogólny interfejs, który można rozszerzać według potrzeb. Lista funkcji które powinien spełniać automat stanów: 1. Automat stanów może mieć dowolną liczbę stanów, 2. Stany można łatwo określić i ustawić, 3. Gdy wchodzisz do stanu, masz możliwość wykonywania dowolnego kodu inicjalizującego 4. Gdy wychodzisz ze stanu, masz możliwość wykonania dowolnego kodu czyszczącego 5. Może wysłać komunikat do dowolnego agenta nawet samego siebie
6 język programowania w środowisku wieloagentowym 3.2. Definiowanie automatu tworzenie algorytmu sterowania Każdy program w języku QScript jest w istocie podaną explicite definicją automatu skończonego. Automat taki złożony jest z listy definiującej poszczególne stany układu. Na definicję każdego stanu składają się trzy procedury, wywoływane przy wchodzeniu do danego stanu, przy jego aktualizacji, oraz przy wychodzeniu z niego. Każda procedura może zawierać instrukcje nakazujące zmienić stan na inny. Ponadto automat może zawierać definicje procedur niezwiązanych z konkretnym stanem a dostępnych z dowolnego miejsca kodu. Pozwala to na strukturalizację programu i czyni kod bardziej przejrzystym, ponadto likwiduje konieczność duplikowania podobnych fragmentów kodu występujących w różnych stanach. W definicji automatu mogą znaleźć się również definicje zmiennych globalnych. Na rys. 4 przedstawiona jest przykładowa realizacja algorytmu sterującego robotem z wykorzystaniem jednego stanu. Dokładny opis struktury języka Qscript oraz biblioteki wspomagającej sterowanie robotami można znaleźć w [11]. W automacie skończonym można w każdej chwili wskazać jeden z dostępnych stanów jako stan bieżący, tzn. stan, którego kod jest wykonywany podczas kolejnych aktualizacji automatu, do chwili jego zmiany. Aktualizacja automatu stanów w systemie SoccerSystem następuje raz na klatkę, czyli 30 razy na sekundę. start_state stmain { void OnEnter() // wejście do stanu { Robot1Moveto(0.5,0.5); // Robot 1 na pozycję 0.5,0.5 [m] } void OnUpdate() { Robot1.SetVelocity(10,20); // Ustawienie prędkości kół } } void OnExit() { } // wyjście ze stanu Rys. 4 Przykładowy kod programu w języku QScript
Krzysztof Jaskot 7 3.3. Przykładowe funkcje realizujące sterowanie robotem Implementacja języka QScript w systemie SoccerSystem zawiera pokaźną bibliotekę funkcji wbudowanych. Poniżej przedstawione jest kilka wybranych funkcji bezpośrednio związanych ze sterowaniem robotem: Robot.GetAngle() pobiera orientacje robota, Robot.GetPositionX() pobiera pozycję x robota, Robot.GetPositionY() pobiera pozycję y robota, Robot.GetSenorReading(kąt, zakres, 1) odczyt danych z wirtualnych sensorów, Robot.Rotate(kąt) obraca robota o zadany kąt, Udostępnienie bogatego zestawu funkcji do obsługi specyficznych elementów systemu pozwala na dostarczenie interfejsu, w którym nie jest wymagana znajomość programowania na poziomie sprzętowym. 4. Wyniki Prezentowane oprogramowanie sterujące SoccerSystem razem z programami napisanymi w języku Qscript zostało wykorzystane do sterowania zespołem trzech robotów. Podstawą konstrukcji testowych robotów (rys. 5) jest aluminiowy korpus, w którym osadzona jest nieruchoma oś oraz 2 wysokoobrotowe silniki napędowe prądu stałego o mocy 4.55[W] każdy, dwa przetworniki obrotowo-impulsowe (enkodery) 512 [imp./obr.], akumulatorowe źródło zasilania Ni-Cd o pojemności 450[mAh] i napięciu 7.2[V]. Napęd na koła przenoszony jest za pomocą przekładni zębatych. Robot rozwija prędkość ok. 150[cm/s]. Oprócz części mechanicznej robot wyposażony jest w sterownik pokładowy. Zadaniem sterownika jest: sterowanie silnikami napędowymi, pomiar prędkości obrotowej kół, przetwarzanie danych pomiarowych oraz obsługa komunikacji ze sterownikiem nadrzędnym.
8 język programowania w środowisku wieloagentowym Rys. 5 Rob oty wyk orz ysta ne w teśc ie Na rys.6 przedstawiono trajektorie robotów jakie otrzymano w czasie realizacji algorytmów sterowania zaimplementowanych w języku Qscript. Rysunek lewy przedstawia realizację algorytmu nawigacyjnego point to point. Wykorzystano tu tylko wbudowane w język Qscript możliwości sterowania robotami. Rysunek prawy przedstawia połączenie sieci neuronowej realizującej omijanie przeszkód sterowanie reaktywne [12] (linia kropkowana, linia przerywana) i nawigacji point to point (linia ciągła). Rys. 6 Przykładowe trajektorie Prezentowany język Qscript został porównany z implementacją automatów skończonych zrealizowanych w języku C++. Do testów wykorzystano automat stanów który realizował tylko proces przełączania się między stanami. Nie testowano specyficznych właściwości języka Qscript do sterowania robotami ze względu na brak ich implementacji w języku C++. Wyniki zostały przedstawione w tabeli 1. Porównanie implementacji algorytmów Tablica 1
Krzysztof Jaskot 9 Liczba stanów QScript C++ 5 0,16s 0,35s 15 0,5s 1,1s 25 0,83s 1,7s Wydajność implementacji algorytmu sterowania zależy od rozmiaru automatu. W przypadku kompilatora C++ konstrukcja switch użyta do budowy automatu rozwijana jest do instrukcji if-then-else, co jest bardzo trudne w optymalizacji. Dla automatu posiadającego n stanów program potrzebował wykonać około 2n porównań if-then-else by znaleźć właściwą funkcję. Odpowiada to około dwukrotnemu zwiększeniu czasu potrzebnego do realizacji zadania. Analiza powyższych wyników pozwala nam stwierdzić że specjalizowany język programowania przeznaczony do implementacji algorytmów sterowania z wykorzystaniem automatów skończonych jest bardziej efektywny w porównaniu z implementacją wykonaną w C++. 5. Podsumowanie Prezentowany język programowania umożliwia implementację algorytmów sterowania bazujących na automatach skończonych. Każdy ze stanów automatu oprócz opisu w postaci zbioru poleceń do wykonania może zawierać realizację logiki rozmytej, sieci neuronowych lub innych technik sztucznej inteligencji. Omawiane środowisko dzięki modułowi profilowania pracującemu w czasie rzeczywistym pozwala na testowanie i wyszukiwanie błędów w czasie realizacji algorytmu sterowania. Niniejsza praca finansowana była z funduszu KBN 4T11A 01223 w latach 2002/04. LITERATURA: 1. Craig J. J. : Wprowadzenie do robotyki, WNT, Warszawa 1995. 2. Zieliński C. : Robot programming methods, Elektronika z. 107, Politechnika Warszawska, 1995. 3. Morecki A., Knapczyk J. : Podstawy robotyki, WNT, Warszawa 1994.
10 język programowania w środowisku wieloagentowym 4. www.robocup.org - Strona internetowa organizacji RoboCup 5. www.fira.net - Strona internetowa organizacji FIRA (Federation of International Robotsoccer Association). 6. Dorobczyński D., Dutkiewicz P., Jedwabny T., Kozłowski K., Majchrzak J., Niwczyk G.: Mobile robot soccer, Proc. of sixth International Conference on Methods and Models in Automation and Robotics, Międzyzdroje 2000, pp. 599-604. 7. Cichosz P. : Systemy uczące się, WNT Warszawa 2000. 8. Treglia D.: Perełki programowania gier. Tom 3, Helion, Gliwice 2003. 9. Tchoń K., Mazur A., Dulęba I., Hossa R., Muszyński R.: Manipulatory i roboty mobilne, Akademicka Oficyna Wydawnicza PLJ, Warszawa, 2000. 10. La Rosa de J., Oller A., Vehi J., Puyol J.: Soccer team based on agent-oriented programming, Robotics and Autonomous System 21 (1997), pp.167-176. 11. Jaskot K., Skrzypek M., Smoliński M.: Język Qscript, raport techniczny Politechnika Śląska, Gliwice 2003-2004. 12. Jaskot K.: Zastosowanie sieci neuronowych do sterowania robotem mobilnym. Zeszyty Naukowe Politechniki Śląskiej z.138 s. Automatyka, Gliwice 2003, pp. 111-210. Recenzent: A PROGRAMMING LANGUAGE IN THE MULTIAGENT SYSTEM Abstract: In the paper we consider problem of using new programming language Qscript to implementation finite state automaton. Three layers of control system - inner (virtual and real hardware), middle (offline and online software) and external (Qscript programming language) - are presented (Fig.2). Using Qscript programming language to control of a team of mobile robots is described. Results of real application are also shown fig. 6 and table 1.