Úvod do RoboCup na FIIT
Z RoboCupTP wiki
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ý koncept fungovania
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. (Podrobnejšie: TODO: linknúť opis modela sveta alebo opis stavov 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.
Nižšie pohyby: Low_skill
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
TODO: doplniť popisky obrázkov
Stavy agenta
Stavy agenta 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ť.
TODO: link na podrobnú stránku o Stavoch agenta a modelu sveta
Diagram konceptu fungovania
TODO: popisok k obrázku
Nízkoúrovňové pohyby (low skills)
TODO: Pojde to asi na samostatnú stránku stránku, kam bude link z opisu Celkového konceptu
Popis štuktúry XML odkaz na vytvorenie low-skill - bude v "Návody a inštalácie/Vytvorenie low-skill"
Chôdze
Chôdza je viacmenej už high-skill pohyb, ktorý sa skladá z opakovania jedného kroku (resp. dvoch). Aktuálny stav jednotivých chôdzí odzrkadlujú najlepšie výsledky najnovších testov: Analýza chôdze
Stručný popis:
Chôdze sa testovali optickou kontrolou priebehu chôdze. Testy sa vykonávali prejdením polky ihriska a celého ihriska. Pri vhodných chôdzach je vyrátaná reálna rýchlosť chôdze. Popisy hovoria o trajektórií, plynulosti, rýchlosti a stability chôdze. Chôdze s otáčaním boli testované prejdením polkruhu.
Chôdze dopredu:
- walk_fine_fast1 - Pohyb prebratý ešte od tímu Androids. Pohyb sa skladá z veľmi malých krokov a je veľmi pomalý. Pohyb vďaka malým krokom je dosť stabilný, sú ale vidno malé kmitanie počas chôdze, ktoré pôsobojú mierne odchýlenia od rovnej trajektórie. V prípade stabilných krokov pohyb ťahá mierne doľava.
- walk_fine_fast1_optimized - Pohyb je oveľa rýchlejší, ale je vidieť, že vychádza z pohybu walk_fine_fast1 a je iba jeho optimalizovaná verzia, typ krokov je rovnaký. Trajektória chôdze je menej vlnitá, dá sa na to spoliehať, že agent dosiahne druhú stranu ihriska. Počas chôdze agent celkom často stráca rovnováhu, tie malé kroky ale zabezpečujú to, že za 2-3 kroky sa vráti do stabilného stavu. Reálna rýchlosť: cca. 0,26 m/s
- walk_fine_fast2 - Chôdza je málo náchylná na pád, avšak veľmi často dochádza k strate dokonalej rovnováhy a na pár krokov sa rozkmitá dopredu alebo do bokov. Tieto strety rovnováhy majú zlý vplyv na rovnú chôdzu. Bez straty rovnováhy pohyb ťahá mierne doľava. Reálna rýchlosť: 0,18 m/s
- walk_fine_fast2_optimized - Chôdza je veľmi nestabilná, vďaka čomu dochádza k častým pádom. Pády a straty rovnováhy pôsobia veľké zmeny trajektórie a to skoro vždy doľava. Hráč väčšinou nedokázal prejsť celé ihrisko. Reálna rýchlosť (v prípade nestrácania rovnováhy): 0,216 m/s
- walk_fine_fast2_optimized2 - Chôdza v porovnaní s ostanými je pomerne rýchla a stabilná. Pomerne málo krát dochádza k strate stability alebo pádu (detailne v tabuľkách). Chôdza je pekná rovná. Je vhodná na používanie. Reálna rýchlosť: 0,32 m/s
- walk_fine_fast2_optimized2acc - Chôdza je pomerne rýchla a stabilná. Jeho spoľahlivosť a náchylnosť na stratu rovnováhy je približne rovnaká ako chôdze walk_fine_fast2_optimized2. Prípadné strácanie rovnováhy spôsobí vykrivenie doľava. Reálna rýchlosť: 0,32 m/s
- walk_fine_slow - Chôdza je veľmi stabilná a veľmi rovná. Ako aj jeho meno naznačuje ide o pomalú chôdzu. Pohyby sú malá a veľmi isté. Pohyb sa hodí výhradne na krátke stabilné presuny. Reálna rýchlosť: 0,0519 m/s
Chôdze s otáčaním
Chôdza je nestabilná, ale k pádu počas testov ani raz nedošlo. Nestabilita pôsobí stálu zmenu trajektórie a preto opísaný polkruh mal vždy iný priemer. Priemerný čas opísania polkruhu: 1:11 (71s) Priemerný priemer kruhu: 6,615m Priemerná rýchlosť: 0,29 m/s
- walk_turning_right
- walk_turning_left
Chôdze dozadu
Pohyby sú skoro dokonale stabilné a rovné, avšak ich rýchlosť je dosť pomalá.
- walk_fine_back - Chôdza je veľmi stabilná a celkom rovná. Vlnenie trajektórie je veľmi malé. Odchýlka od rovnej chôdze po prejdení pol ihriska bolo v priemere 1,17m. Rýchlosť chôdze je pomalá. Reálna rýchlosť: 0,098 m/s
- walkback_slow - Chôdza je veľmi stabilná a skoro úplne rovná. Rýchlosť chôdze je veľmi pomalá. Maximálna odchýlka od rovnej trajektórie po prejdení pol ihriska bola 0,3m. Reálna rýchlosť: 0,0675 m/s
- waklback2 - Chôdza je veľmi stabilná a extrémne pomalá. Trajektória chodu je dokonalá. Pohyb je vhodný iba na krátke presuny v okolí lopty. Reálna rýchlosť: 0,000955 m/s
- walkback3 - Chôdza je veľmi stabilná vďaka aj práce s trupom. Ďalej je skoro úplne rovná a jej kroky sú pomerne dlhé. Reálna rýchlosť: 0,121 m/s
Kopanie
Popis našich kopaní + odkaz na testy
Iné
Popis ostatných pohybov + odkaz na testy
Vysokoúrovňové pohyby (high skills)
Štruktúra a funkčnosť jednotlivých high skill pohybov je na HighSkill pohyby.
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.
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
AgentModel.java
Trieda, ktorá obsahuje určovanie súčasný stav agenta a to z pohľadu jeho pozície kĺbov, globálnej polohy a rotácie vzhľadom na globálnu os. Ďalej určuje pozíciu hráča, teda na ktorej strane hráč je (člen tímu, súper) metódu na výpočet pohybu vektora okolo vektorov a osí. Výpočty sú vykonávané podľa teórie vektorových pohyb nájdených na internete. Táto trieda spolupracuje s akcelometrom a práve pomocou stavu agenta dokáže identifikovať, či agent stojí alebo leží na zemi. Obsahuje GETY na získanie informácii o tom či hráč stojí, je na zemi, leží na chrbte, leží na bruchu, ďalej o natočení a pozícii samotného hráča. Obsahuje SETY na nastavenie pozície a rotácie kĺbov.
AgentPositionCalculator.java
Trieda, ktorá vypočítava aproximáciu aktuálnej polohy hráča na základe vlajok, ktoré vidí. Na základe zistení vytvára logy. Predpokladá, že rotácie hráča sú vypočítané správne. Výpočet je vykonávaný normalizáciou a odpočtom od pozície zástavy. Keď vnímaná relatívna pozícia je pridaná k známej pozícii vlajky, je možné vypočítať správnu aproximáciu pozície hráča.
AgentRotationCalculator.java
Trieda, ktorá vypočítava natočenia hráča na základe vlajok. Dokáže určiť natočenie agenta z 3 videných vlajok. Určí, ktoré dve z troch použije na vytvorenie osi Y , a ktorú doplní bod na vytvorenie osi Z, kolmej na os Y.
DynamicObject.java
Trieda určuje polohu dynamických objektov, zvyčajne lopty.
EnvironmentModel.java
Trieda, v ktorej sa ukladajú statické hodnoty o stave okolia, ako sú stav hry, mód hry, hrací čas, simulačný čas a verzia servera.
FixedObjects.java
Trieda obsahujúca vlajky videné perceptorom SEE robota. Každá vlajka uchováva informáciu o svojej pozícii. Určuje sa tak veľkosť ihriska.
KalmanAdjuster.java
Trieda, ktorá nastavuje vnímané súradnice lopty a vlajky na ihrisku použitím kalmanovho filtra, čím sa znižuje chybovosť pre ďalšie výpočty.
Player.java
Trieda, ktorá definuje druhého hráča a jeho rolu v hre (druhého hráča, ktorého vidí).
TacticalInfo.java
Trieda, ktorá obsahuje informácie o herných situáciách (útočíme, bránime...) a tiež metódy pre vytvorenie hernej formácie.
WorldModel.java
Trieda, v ktorej sa ukladajú objekty na ihrisku, teda ich pozícia, rýchlosť a priemernú pozorovanú rýchlosť. Počíta pozície ostatných hráčov a lopty.
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.
Dáta
Dáta ktoré figurujú v modeli sveta sú vymenované a popísané nižšie.
Gyroskop
Údaje z perceptora GyroRate v tvare:
(GYR (n <name>) (rt <x> <y> <z>))
Kĺby
Údaje z perceptorov typu HingeJoint a UniversalJoint v tvare:
(HJ (n <name>) (ax <ax>)) (UJ (n <name>) (ax1 <ax1>) (ax2 <ax2>))
Sila odporu
Údaje z perceptorov ForceResistance v tvare:
(FRP (n <name>) (c <px> <py> <pz>) (f <fx> <fy> <fz>))
Sluch
Údaje z perceptorov Hear v tvare:
(hear <time> self/<direction> <message>)
Akcelerometer
Údaje z perceptorov Accelerometer v tvare:
(ACC (n <name>) (a <x> <y> <z>))
Videnie
Údaje z perceptora Vision v tvare:
(See +(<name> (pol <distance> <angle1> <angle2>)) +(P (team <teamname>) (id <playerID>) +(<bodypart> (pol <distance> <angle1> <angle2>))) +(L (pol <distance> <angle1> <angle2>) (pol <distance> <angle1> <angle2>)))
Stav hry
Údaje z perceptora GameState v tvare:
(GS (t <time>) (pm <playmode>))
Pozícia bránky
Relatívna pozícia bránky vzhľadom na agenta.
Pozícia rohovej zástavy
Relatívna pozícia rohovej zástavy vzhľadom na agenta.
Pozícia lopty
Relatívna pozícia lopty vzhľadom na agenta
Pozícia ostatných hráčov
Relatívna pozícia hráčov vzhľadom na agenta
Pozícia čiar
Relatívna pozícia čiar vzhľadom na agenta
Herný mód
Aktuálny herný mód (priamy kop, penalta, rohový kop...).
Poloha agenta na ihrisku
Poloha agenta na ihrisku. Absolútna poloha.
Pozícia agenta
Pozícia agenta v akej sa nachádza. To je poloha ťažiska a jednotlivých končatín.
Stav agenta
Polohe, ktorej je agent a čo sa s ním deje (Stojí, Leží, Padá).
Poloha lopty na ihrisku
Poloha lopty a jej súradnice v stanovenej súradnicovej sústave. Absolútna poloha na ihrisku.
Poloha ostatných hráčov na ihrisku
Poloha ostatných hráčov na hracej ploche v stanovenej súradnicovej sústave. Absolútna poloha na ihrisku.
Herná situácia
Aktuálna herná situácia odohrávajúca sa na ihrisku(Útočenie, obrana...).
Hráč najbližšie k lopte
Hráč, ktorý je aktuálne najbližšie k lopte.
Voľné plochy na ihrisku
Plochy na ihrisku, kde sa nenachádzajú protihráči.
Posledný hráč z tímu
Hráč, ktorý predstavuje brankára.
Čas
Aktuálny čas.
Skóre
Aktuálny stav zápasu.
História zmien polohy lopty
Polohy lopty za posledných x sledovaných momentov.
Predikcia polohy lopty
Predpokladaná poloha lopty v nasledujúcom momente.
História zmien polohy hráčov
Polohy hráčov za posledných x sledovaných momentov.
Predikcia polohy hráčov
Predpokladaná poloha hráčov v nasledujúcom momente.
Taktika
Taktika, akú budú hráči používať na základe situácie a stavu hry.
Kto má loptu?
Ktorý hráč má loptu.
Možnosti prihrávky
Všetky aktuálne možnosti na prihrávku spoluhráčovi.
Tiesniaci hráči
Všetci hráči v nebezpečnej vzdialenosti od agenta.
Na dostrel bránky?
Overenie či je konkrétny agent vo vzdialenosti odkiaľ dokáže dostreliť na bránku.
Údaje o type a formáte prichádzajúcich dát zo servera sú zo stránky: http://simspark.sourceforge.net/wiki/index.php/Effectors, tiež je tam možné nájsť detailnejšie informácie k jednotlivým efektorom a popis k formátu dát.
Plánovač
TODO: Pojde to asi na samostatnú stránku stránku, kam bude link z opisu Celkového konceptu
Popis funkcionality a prepojenia low a high skills Popis štruktúry odkaz na vytvorenie plánovača - "Návody a inštalácie/Vytvorenie - používanie plánovača" odkaz na podrobnú dokumentáciu konkrétnych plánovačov (keď sú)
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á v TestFramework: Spätná väzba od hráča
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.
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.
Anotácie
Popis funkcionality. odkaz na návody v "Návody a inštalácie/Anotácie" odkaz na podrobnú dokumentáciu
Zdrojové kódy
Popis prepojenia Ruby + Java. odkaz na import zdrojákov v "Návody a inštalácie/Importovanie zdrojovýck k."
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
Popis funcionality. odkaz na vytvorenie low-skill v editore - bude v "Návody a inštalácie/Vytvorenie low-skill/Editor" odkaz na simuláciu pohybu z editoru resp. pustenie agenta z editoru - bude v "Návody a inštalácie/Pustenie agenta/Editor" odkaz na stiahnutie odkaz na podrabný návod používania.