Úvod do RoboCup na FIIT
Obsah |
Celkový koncept pohybovania agenta
Agent na ihrisku je riadený kódom, ktorý sa skladá z viacerých modulov navzájom prepojených. Moduly sú v hierarchií a každý má inú funkcionalitu.
Podrobný opis je dostupný v dokumente Podrobný koncept fungovania
Stručný opis od tímu High5 je dostupný na stránke Návod
Pomocní opis k plánovaniu a vyknávaniu pohybov od tímu High5: Plánovanie_a_vykonávanie_pohybov
Plánovač
Na vrchu hierarchie je plánovač, ktorý riadi celkové správanie sa agenta. Plánovač vytvára inštancie vyšších pohybov a aktivuje ich na základe stavu hry a hráča. Hlavný cyklus beží po inicializácii a načítaní agenta a obsahuje v sebe aj pustenie plánovača.
Planovač: Planovac
Vyššie pohyby – high skills
Vyššie pohyby sa taktiež rozhodujú na základe stavov agenta. V tomto prípade ale ide o špecifické stavy vzhľadom na daný high-skill. Napríklad v prípade high-skillu „Choď k lopte“ sa vyhodnocuje stav agenta voči lopte. Tieto stavy sa vyhodnotia niekoľko krát počas vykonávania high-skillu.
Vyššie pohyby: HighSkill pohyby
- Vykonávanie high-skillov
V high-skilloch použité nižšie pohyby musia mať aspoň jednu fázu, ktorá je označená ako konečná fáza, t.j. fázu v ktorej low-skill končí. High-skill na základe stavu agenta sa rozhoduje, ktorý low-skill bude zavolaný. Low-skill volá funkciou pickLowSkill. V prípade zistenia stavu, ktorý v danom high-skill nie je ošetrený, high-skill končí a vráti NULL pre plánovač. Plánovač sa následne rozhodne ako ošetriť vzniknutý stav.
Nižšie pohyby – low-skills
Nižšie pohyby sú vytvorené jednoduchou štruktúrou. Sú poskladané z radov natáčaní kĺbov NAO robota združené do stavov a fáz.
Všeobecný opis nižších pohybov: Low_skill
Typy low-skillov
- Chôdza
Chôdza je viacmenej už high-skill pohyb, ktorý sa skladá z opakovania jedného kroku (resp. dvoch). Low-skill chôdze obsahuje krok, ktorý sa má opakovať a tak vytvoriť chôdzu. Aktálne sa používajú dve chôdze smerom dopredu a jedna smerom dozadu. Vytvorené sú aj funkčné chôdze s otáčaním. Ichpoužívanie zefektívni prídenie hráča ku cieľu. Pre ich používanie ale chýba potrebný high-skill.
- Kopanie
Kopania môžu byť vykonané rôznou silou. Ani sila ani iné parametre nemôžu byť low-skillu podané, preto pre každý typ kopnutia je vytvorený zvlášť pohyb. Aktuálne používame 3-4 kopnutia, ktoré sa líšia najmä v sile kpnutia. Najsilnejšie kopnutie sa líši nielen silovo, ale aj spôsobom pohybu. Hráč pred kopnutím si spraví veľký krok aby nabral väčšiu rýchlosť počas kpnutia.
- Úkroky
Úkroky slúžia na správne nastavenie hráča k cieľu. Vytvorili sme dva typy úkrokov a to úkroky do strán a úkroky po kružnici. Existujú väčšie aj menšie úkroky pre oba typy úkrokov. Samotný pohyb úkrokov je rovnakého charakteru a tak nedochádza ku stratu stability pri ich kombinácií.
- Otáčania
Otáčania slúžia taktiež pre správne smerovanie a nastavenie hráča. Vytvorili sme úpne nový súbor otáčaní postupne od 4,5 až 90 stupňov. Použitím týchto otáčaní je možné vykombinovať potrebné otočenie väčšinou použitím dvoch pohybov.
- Pády a sadanie
pády využívajú hráči pre bránenie. Samotné pády sú veľmi jednoduchého charakteru. Sú spoľahlivé a rýchle.
- Vstávanie
Vstávanie je implementované tak aby sa hráč vedel postaviť aj z brucha aj z chrbta jedným pohybom. V prípade ležania na boku sa hráč samotným pohybom vstávania prehodí na chrbát alebo brucho a opakovaným pohybom sa postaví.
Aktuálny zoznam low-skillov
Diagram tried pohybov
XML súbory nižších pohybov a ruby skripty vyšších pohybov figurujú v zdrojovom kóde nasledovne: Niektoré z tried existujú aj v Jave a rovnaké alebo podobné triedy sú aj v Ruby skriptoch:
- LowSkill (java)- trieda sk.fiit.jim.agent.moves.LowSkill
- HighSkill (java) - trieda sk.fiit.jim.agent.skills.HighSkill
- LowSkill (ruby) - trieda LowSkill z scripts/high_skills/low_skill.rb, ktorá dedí triedu Ruby-HighSkill
- HighSkill (ruby) - trieda RubyHighSkill z scripts/high_skills/ruby_high_skill.rb, ktorá dedí triedu Java-HighSkill
Stavy agenta
Stavom hráča sa v minulosti zaoberalo viacero tímov na našej fakulte. Prvé tímy, ktoré sa ním zaoberali sa venovali ešte 2D robotickému futbalu. Z tímov, ktoré riešili 3D robotický futbal to sú tímy Agenty 007 a Robocopy. O ich práci bižšie informuje stránka: Analýza_stavu_agenta
Stavy agenta v súčasnosti sa určujú pomocou údajov z Modela sveta. Určuje sa absolútna poloha agenta na ihrisku, poloha lopty a ostatných hráčov. Určuje sa relatívna poloha agenta a lopty voči iným objektom na ihrisku. Ďalej sa určuje natočenie agenta atď. Údaje sú získané pomocou receptorov agenta z jednotlivých častí modelu sveta:
- Agent model - obsahuje určovanie pozície hráča a stranu tímu hráča. Ďalej obsahuje metódu na výpočet pohybového vektora. Vracia informácie o tom či agent stojí, alebo je na zemi, o natočení a pozícii.
- Environment model - ukladá statické informácie o stave súčasného sveta okolo agenta, ako herný čas, simulačné časy, režim prehrávania, verziu servera, veľkosť ihriska a lopty.
- World model, dynamicObject - stavy objektov na ihrisku, ako hráči lopta atď. Ukladá ich pozíciu a rýchlosť.
- Senzory
Ďalší pohľad na stav agenta ponúka akcelerometer a gyroskop. Podrobná analýza týchto senzorov je dostupná na: Analýza_výstupov_z_gyroskopu_a_akcelerometra
Diagram konceptu fungovania
Model sveta
Model sveta zhromažďuje informácie, ktoré sú potrebné pri vývoji a testovaní agenta. Model sveta možno rozdeliť na:
- Súčasný stav agenta: pozície kĺbov, globálna poloha a rotácie vzhľadom na globálnu os.
- Súčasný stav okolia: stav hry, mód hry, hrací čas, simulačný čas a verzia servera.
- Stav sveta: pozície ostatných hráčov a lopty.
Návrch na vylepšenie modelu sveta od tímu High5: Návrh_na_vylepšenie_modelu_sveta
Zdrojový kód
Model sveta je v kóde zahrnutý pod komponentou Models. Je rozdelený do nasledujúcich častí:
- AgentModel – stav agenta
- EnvironmentModel – stav okolia
- WorldModel - stav sveta
Triedy modela sveta: Triedy_Model_sveta
Graf dát
V modeli sveta figuruje viacero dát, na základe ktorých samotný model sveta funguje. Jednotlivé dáta sú spracované do grafu dát. Graf dát predstavuje informácie, ktoré dokáže agent o svete získať. Informácie sú na rôznych stupňoch abstrakcie. Najnižšiu vrstvu predstavujú tie, ktoré prichádzajú zo servera a predstavujú dáta, ktoré agent dostáva zo snímačov. V grafe sú to uzly, do ktorých nevchádza žiadna hrana.
Podrobý graf dát aj s opisom nájdete na: Graf_dát_Model_sveta
TestFramework
Test Framework slúži na získanie spätnej väzby od hráča. Hlavným zámerom je zostrojiť robotického futbalového trénera, ktorý by dokázal učiť hráčov novým taktikám a pohybom automaticky. Zatiaľ je vypracovaný len vo fáze pozorovateľa hráčov.
Komunikácia z hráčom je podrobne opísaná na stránke TestFramework: Spätná väzba od hráča a na stránke Komunikácia_agenta_s_test_frameworkom
Funkcionality podporujúce pozorovanie sú tvorba anotácií podrobne opísaná v Anotácie pohybov.
Modelovanie situácie je možné pomocou testcase. Podrobný návod na vytvorenie testcase nájdete na Test Case.
Testcase sú prispôsobené tak, aby mohli byť použité na vyhodnocovanie disciplín turnaja "RoboCup at FIIT". Vykonané zmeny testcase-ov pre turnaj sú popísané v TestFramework: Príprava na turnaj
Návody na nastavenie a spustenie hráča nájdete na Spúšťanie hráča a Nastavennie TestFrameworku.
V grafickom rozhraní testovacieho frameworku sa ľahko zorientujete podľa GUI: Testovací framework.
Ak Vám nefunguje pridanie hráča cez testframework, tak pravdepodobne nemáte v priečinku Jim/scripts/ prázdny priečinok testframework/
Zdrojové kódy
RoboCup Library
Používa sa len veľmi málo, jeho existencia je viacmenej nepotrebná, ale aby mohol byť odstránený, je potrebný refactoring kódu.
Jim
Vysvetlenie role a funkcionality....(DOPÍSAŤ)
Popis balíkov: (podrobný popis tímu A55 kickers)
- sk.fiit.jim - Nastavuje globalne spravanie kódu. Môže zmeniť defaultné nastavenia hry. Obsahuje základné nastavenia v prípade, ze sa tie nenachádzajú v súbore ./scripts/config/settings.rb
- sk.fiit.agent - Stav agenta, hry, lopty, plánovanie adt. Stav hráča voči vlajkám na ihrisku. Určuje referenčné hodnoty niektorých stavov hráča a hráča voči lopte. Vracia hodnoty o pozícií hráča a lopty a hráča voči lopte. Taktiez tieto stavy o tímoch (vlastný, oponenti).
- sk.fiit.agent.communication -Implementuje low-level komunikáciu so serverom.
- sk.fiit.agent.model - Dátová štruktúra obsahujúca stav agenta. Polohy, narocenia. Ďalej výpočty z accelerometra pre zistenie ci agent stojí alebo nie.
- sk.fiit.agent.moves - Hodnoty natočenia kĺbov. Spracovanie low-level pohybu z XML
- sk.jim.init - sluzi na vlozenie agenta na server, na nacitanie ruby scriptov
- sk.fiit.jim.gui - to maličké GUI s tromi tlačidlami
- sk.fiit.jim.annotation.data - Stara sa o nacitanie anotacii. Parsuje XML a vytvara Annotation.
TestFramework
Vysvetlenie role a funkcionality (DOPÍSAŤ!!).
Popis balíčkov: (Pordobný popis balíčkov)
- sk.fiit.testframework.init - nastavenie default.prperties do inštancie triedy C z RubyScriptov
- sk.fiit.testframework.monitor - pridavanie odoberanie vlakien pre agentov, zistovanie listenerov agentov,pridavanie a odoberanie listenerov na spravy agentom
- sk.fiit.testframework.communication.agent - rozhranie pre komunikaciu agentov, kontroluje beziacich agentov a procesy
- sk.fiit.testframework.communication.robocupserver - trieda predstavuje trenera, ktory sa snazi posielat prikazy do RoboCup 3D simulacneho futbaloveho servera s cielom nastavit specificky stav na serveri.
- sk.fiit.testframework.annotator.serialization - megatrieda, ktora parsuje xml pohybov
- sk.fiit.testframework.annotator - trieda zodpovedna za dynamicke vytvaranie pohybov, zabezpecuje testovanie pohybov z xml suborov.
Editor pohybov
Editor pohybov zjednodušuje prácu pri vytváraní pohybov robota. Pomocou editora sa dá efektívne pracovať na ich tvorbe a následne sa dajú vytvorené pohyby aj odsimulovať v prostredí 3D futbalu. Výhodou editora je vlastné grafické rozhranie, ktoré sprehľadní štruktúru XML súborov pohybov.
Podrobnejšie o vytváraní pohybov v editore: Vytvorenie_pohybu_v_editore
Inštalácia editora: