Úvod do RoboCup na FIIT

Z RoboCupTP wiki

Prejsť na: navigácia, hľadanie

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 Diagram tried pohybov.png

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

Robocupdiag.png

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.


World model.png


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.

Osobné nástroje