Ú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ý 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

Aktualne_pohyby

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

Diagram tried pohybov.png

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

Robocupdiag.png

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:

Osobné nástroje
Menné priestory

Varianty
Operácie
Navigácia
Nástroje