Program gracza w lidze software-owej
rozgrywek piłki nożnej robotów RoboCup


Autor: Łukasz Szydłowski
Raport opracowany na zaliczenie przedmiotu:
Metody i algorytmy sztucznej inteligencji
Wrocław 28 czerwca 2008r.

Wprowadzenie

RoboCup (czyli Robot World Cup Initiative) jest międzynarodowym projektem mającym wypromować sztuczną inteligencję i robotykę. RoboCup próbuje rozwijać sztuczną inteligencję i badania nad robotyką poprzez analizę problemu, w którym będzie można połaczyć i zbadać szeroki zakres technologii. RoboCup wybrał grę w piłkę nożną jako kluczowy temat badania. Zasadniczym celem projektu RoboCup jest do 2050 stworzenie zespołu wpełni autonomicznych humanoidalnych robotów, który mógłby wygrać mecz z ludzkim zespołem mistrza świata w piłce nożnej.


RoboCup software agent


Author of project : Łukasz Szydłowski
This report has been prepared as a requirement for the course:
Methods and algorithms of artificial intelligence
Wrocław 28 June 2008r.

Introduction

RoboCup (Originally called as Robot World Cup Initiative) is an international joint project to promote AI and robotics. It is an attempt to foster AI and intelligent robotics research by providing a standard problem where wide range of technologies can be integrated and examined. RoboCup chose to use soccer game as a central topic of research, aiming at innovations to be applied for socially significant problems and industries. The ultimate goal of the RoboCup project is By 2050, develop a team of fully autonomous humanoid robots that can win against the human world champion team in soccer.


Opis systemu obsługi ligi software-owej RoboCup

Do rozgrywania meczów RoboCup potrzebne są trzy programy:

Serwer

Serwer dzięki współpracy z pozostałymi programami (klientem i monitorem)pozwala na rozegranie i oglądanie meczu ligi software-owej RoboCup. Po uruchomieniu serwera należy uruchomić monitor, a na końcu klientów, co umożliwi współdzałanie wszystkich programów z serwerem i pozwoli rozegrać mecz. Serwer działa w kilku trybach i w żależności od tego w jakim się znajduje podejmuje odpowiednie działania, wysyła i przyjmuje komunikaty.

Działanie serwera

Po uruchomieniu serwer rozpoczyna działanie w trybie BEFORE_KICKOFF. Jest to tryb w którym serwer oczekuje na zgłoszenia klientów chcących wziąść udział w meczu (w tym trybie serwer przyjmuje polecenie MOVE). Po zgłoszenu drużyn serwer przechodzi do trybu KICKOFF_LEFT, a po dotknieciu piłki przez zawodnika do trybu PLAY_ON, w którym przyjmowane są komunikaty dotyczące ruchów poszczególnych graczy przesyłane przez klientów. W trybie PLAY_ON serwer pracuje sekwencyjnie: przyjmuje komunikaty dotyczące ruchów graczy, generuje nowe dane dotyczące każdego zawodnika i piłki, wysła dane o nowych pozycjach do monitora i do każdego zawodnika.

Zdarzenia na boisku powodują przyjęcie przez serwer jednego z nastąpujących trybów (Play Mode):

Po upłynięciu czasu przeznaczonego na pierwszą połowę, serwer przechodzi ponownie w stan BEFORE_KICKOFF (do klientów wysyłany jest komunikat HALF_TIME). Przebieg drugiej połowy jest identyczny. Na zakończenie meczu wysyłany jest komunikat TIME_OVER.

Monitor

Monitor jest programem, który wyświetla informacje dotyczące wydarzeń na boisku otrzymywane od serwera. Wyświetlanie gry to nie jedyna funkja jaką może pełnić monitor,bo dzieki możliwości przekazywania informacji do serwera może on pełnić funkję sędzigo.Mimo, że serwer umie obsłużyć większość sytuacji takich jak: spalony, aut, gol mogą pojawić się sytuacje sporne, które może rozstrzygnąć człowiek.

Klient

Klient jest programem, który kieruje zachowaniem jednego zawodnika. Klient aby wziąść udział w meczu musi wysłać do serwera komunikat INIT. Jeżeli serwer jest w stanie BEFORE_KICK_OFF akceptuje zgłoszenie klienta. Właściwe zadanie klienta polega na takim sterowaniu zawodnikiem aby jego drużyna strzeliła gola. W tym celu klient wysyła komunikaty sterujące zawodnikiem (np: obróć się (turn),przyspiesz (dash), kopnij piłkę (kick)). Co pewien czas serwer wysyła do klienta komunikat (see) zawierający informację o tym co widzi zawodnik. Na podstawie tych informacji klient powinien podejmować odpwoiednie decyzje. Algorytmy kierujące grą zawodnika mogą być bardzo różne: od biegnij do piłki i kop na bramkę przeciwnika aż po takie w których zawodnicy podzieleni są na formacje, a ich działania zwierają elementy strategii.

Protokół klient-serwer

Można wyróżnić trzy rodzaje komunikatów pomiędzy klientem a środowiskiem symulacyjnym:

Komunikaty dla serwera

Komunikaty dla klienta

Reguły sędziowania przez serwer

Soccerserver kontroluje mecz według naztępujących zasad:

Reguły sędziowania przez człowieka

Jak już wyżej wspomniałem przy opisie monitora funkcję sędziego może przejąć człowiek i rozstrzygnąć sporne sytuacje np. podyktować rzyt wolny w następujących przypadkach:

Implementacja

W realizacji projektu posłużyłem się szkieletem zawodnika RoboCup autorstwa Klausa Dorera. Agent zaimplementowany został w MS Visual C++ 5.0. Wszelkie zadania związane z percepcją zebrane są w klasie TPerception. Odpowiada ona za przetwarzanie komunikatów see, hear i sense_body oraz za przechowywanie i udostępnianie danych na temat widocznych obiektów. Dane obiektów pamięta ona jako obiekty klas TBall, TPlayer, TFlag, TLine oraz TSoccerGoal. Komunikacją z serwerem zajmuje się klasa TViewingAgent, dziedzicząca po CBaseAgent, która dziedziczy po klasie CAgentSocket, a ta z kolei dziedziczy po klasie MFC CAsyncSocket. Zawiera ona także całą logikę zawodnika i decyduje o podejmowanych działaniach. Całość oparta jest na mechaniźmie Single Document Interface.

Wnioski

Stworzenie dobrze grającego zawodnika i do tego wykorzystującego zalety gry w drużynie jest bardzo skomplikowanym zadanie. Do testowania gracza został wykorzystany wspomniany wcześniej zawodnik autorstwa Klausa Dorera, który dzięki swojej prostej taktyce może posłóżyć do testowania innych graczy, wystawiając go sam na sam z innym zawodnikiem.

Materiały źródłowe