Framework na na vyyváranie anotácií pohybov
Z RoboCupTP wiki
Obsah |
Reprezentácia pohybov – framework na tvorbu anotácie
Analýza
Aby sa vedel hráč rozhodovať, ktorý pohyb naplánovať v danej hernej situácii, bezpodmienečne musí byť informovaný o tom, čo robí ktorý pohyb (aký bude mať vplyv jeho naplánovanie na budúcnosť, ktorý z pohybov je vhodné vybrať v danej situácii). Preto je potrebné vyrobiť anotáciu pre pohyby, vďaka ktorej bude možné automatizovať ich plánovanie.
Požiadavky na anotácie:
- strojová spracovateľnosť (počítač musí vedieť robiť rozhodnutia na základe anotácie)
- obšírnosť (čím viac informácií hráč má, tým lepšie sa vie rozhodovať)
- automatizovateľnosť (vlastnosti pohybov by malo byť možné vypĺňať automaticky, analýzou ich reálneho behu, s minimálnym prispením človeka)
- zrozumiteľnosť (je možné, aby im porozumel aj človek – mohol ich vytvárať, čítať a editovať)
- všeobecnosť (množina atribútov reprezentujúcich pohyby by mala byť pre všetky pohyby rovnaká – táto vlastnosť zaručí jednoduchosť práce s anotáciami)
Počas analýzy sme identifikovali niektoré základné atribúty, ktoré musí anotácia obsahovať:
- typ pohybu – hráč si na základe neho môže pre danú situáciu vyselektovať množinu teoreticky použiteľných pohybov (napr. ak sa potrebuje presunúť z jedného miesta na druhé, bude vyberať spomedzi pohybov typu „chôdza“, v inej situácii typ „kop“).
- zmena pozície a natočenia hráča počas trvania pohybu – táto znalosť je potrebná pri výbere pohybu, ak sa hráč potrebuje presunúť alebo otočiť. Môže byť rozhodujúca aj za okolností, že posunutie ši otočenie hráča v danej situácii nie je vítaná vlastnosť pohybu.
- dĺžka trvania pohybu – na jej základe si môže vybrať napr. najrýchlejší dostupný pohyb s potrebnými vlastnosťami.
- pravdepodobnosť pádu počas vykonávania pohybu - na jej základe si môže vybrať napr. najspoľahlivejší dostupný pohyb s potrebnými vlastnosťami.
- predpodmienky – hráč si vyberie taký pohyb, ktorý nadväzuje na jeho aktuálny stav.
- stav po vykonaní pohybu – umožňuje hráčovi plánovanie ďalších pohybov do budúcnosti, skladanie pohybov.
- sledovanie lopty - na základe vzdialenosti od lopty sa hráč rozhodne, či do nej môže kopnúť a ak áno, tak ako ďaleko a v ktorým smerom ju dokáže kopnúť.
Je dôležité si uvedomiť, že rovnaký pohyb je vykonaný vždy trochu inak – preto je potrebné pre popísanie pohybu používať priemerné hodnoty z viacerých behov daného pohybu.
Pri počítaní zmeny pozície hráča v dôsledku vykonania pohybu je dôležité si uvedomiť, že hráč vie počítať zmenu svojej pozície iba z pohľadu ihriska, nás ale zaujíma zmena pozície z pohľadu hráča. Preto je potrebné túto hodnotu počítať na základe kombinácie informácií o zmene pozície na ihrisku a otočenia hráča pred vykonaním pohybu.
Na druhú stranu potom hráč bude musieť vedieť pri plánovaní pohybu prepočítať na základe anotácie a svojho otočenia, aký bude mať vplyv vykonanie daného pohybu na jeho pozíciu v rámci ihriska.
Návrh
Reprezentácia údajov
Na základe uvedených požiadaviek sme sa rozhodli ukladať anotácie k pohybom v samostatných súboroch typu XML. Takto dostupné anotácie je možné pomerne jednoducho spracovávať a meniť tak človekom ako i strojom. V prípade potreby je možné takúto reprezentáciu anotácie vložiť priamo do XML súboru pohybu. V tabuľke 1 sú popísané všetky podstatné atribúty anotácie.
Proces automatizácie vytvárania anotácie
Napriek tomu, že človek musí vyplniť niektoré logické atribúty anotácie (typ pohybu, poznámka), väčšina je spracovateľná automaticky a naopak, pre človeka je náročné takého hodnoty zisťovať (napr. priemerné otočenie hráča počas pohybu). Preto navrhujeme nasledovný spôsob automatizácie vytvárania anotácie (Obrázok 1) zložený z 3 krokov:
- Zbieranie údajov:
- Framework vie na základe monitorovania servera presné údaje o stave ihriska (kde je hráč, ako je otočený a pod).
- Hráč plánuje svoje pohyby, preto vie presne povedať, kedy začal a kedy skončil vykonávanie akého pohybu.
- Vyhodnocovanie údajov: Framework takéto informácie z oboch zdrojov dokáže spájať v zmysle zisťovania vlastností jednotlivých pohybov a exportovať na základe nich súbory s XML anotáciou pohybu (priemerné hodnoty pre každý použitý pohyb).
- Spracovanie anotácie: Hráč dokáže takto vytvorenú XML anotáciu využiť pri plánovaní pohybov.
Vysvetlivky k XML reprezentácii anotácie
Značka | Význam |
<annotation> | Koreňová značka |
<name> | Meno pohybu, na ktorý sa anotácia vzťahuje |
<checksum> | Kontrolná suma vzťahujúca sa na XML anotovaného pohybu, aby sa zabránilo nekonzistentnosti anotácie a pohybu v dôsledku jeho zmeny. |
<description> | Predstavuje opis pohynu, obsahuje značky <duration>, <rotation>, <move>, <fall>, <ball_move> |
<duration> | Priemerná dĺžka trvania pohybu v milisekundách. |
<rotation> | Priemerná zmena natočenia hráča počas vykonania pohybu. Sú v ňom vnorené značky určujúce hodnoty otočenia po jednotlivých osiach v stupňoch. (Hodnoty otáčania okolo osi X a Y sú zatiaľ nepovinné, keďže ich využitie je momentálne nepravdepodobné) |
<move> | Zmena polohy hráča počas vykonania pohybu. Sú v ňom vnorené značky určujúce hodnoty posunu po jednotlivých osiach z pohľadu hráča v metroch.(Hodnota posunu hráča po osi Z je zatiaľ nepovinná, keďže jej využitie je momentálne nepravdepodobné) |
<fall> | Priemerný počet pádov hráča počas 100 vykonaní daného pohybu. |
<ball_distance> | Akú vzdialenosť prekonala lopta počas vykonávania pohybu. Najmenšia vzdialenosť, najväčšia a priemerná. |
<max_ball_distance_position> | Z akého iniciálneho miesta lopta prešla najväčšiu vzdialenosť.
|
<ball_move> | Zmena polohy lopty po vykonaní pohybu. Sú v ňom vnorené značky určujúce hodnoty posunu po jednotlivých osiach z pohľadu hráča v metroch. |
<note> | Poznámka autora stručne opisujúca daný pohyb v ľudskej reči. |
<preconditions> | Obsahuje informácie o predpodmienkach pre vykonanie daného pohybu (v akom stave sú kĺby a aká je poloha hráča na začiatku pohybu). Obsahuje značky <joints> a <lying> |
<end_state> | Obsahuje informácie o stave hráča po vykonaní daného pohybu. Obsahuje značky <joints> a <lying>
|
<joints> | Obsahuje značky označujúce jednotlivé kĺby a hodnotu ich natočenia. Prednastavená hodnota pre každý kĺb je 0. Značky pre jednotlivé kĺby a ich ohraničenia sú kompatibilné so značkami použitými pre pohyb hráča (v prípade potreby dostupné v XSD súbore) |
<ball_positions_circle> | Určuje najmenší kruh, z pohľadu hráča, ktorý obsahuje všetky polohy lopty na XY osiach. Pre začiatočný stav je to kruh obsahujúci iniciálne polohy lopty (ktoré zadáva používateľ pred anotovaním) a pre finálny stav je to kruh vypočítaný na základe "Minimal enclosing circle" algoritmu.
|
<lying> | Informácia o polohe hráča. Môže nadobúdať hodnoty: false, on_back, on_belly, on_side. |
<ball_position> | Poloha lopty z pohľadu hráča vyjadrená vzdialenosťou na jednotlivých osiach v metroch. |
<min><max><avg> | Značky obsahujú minimálnu, maximálnu a priemernú hodnotu niektorých atribútov pohybu. |
Implementácia
Kruhová reprezentácia pozície lopty
V rámci vstupného a výstupného stavu je pozícia lopty reprezentovaná kruhom. Vo pre vstupný stav je tento kruh udávaný používateľom pred spustením automatického anotovania zadaním stredovej súradnice a polomeru. V danom kruhu sa tak inicializuje lopta na rôznych miestach, tie sú určené metódou initPositionsFromCircle(Circle initcircle). Túto je možné meniť ľubovoľne podľa predstáv. Inicializácia bodov v súčasnej implementácii rozmietňuje body iba do stredu kruhu a na 8 bodov na jeho okraji – znázornenie je na nasledovnom obrázku
Na výstupe sa kruhová reprezentácia počíta ako minimálny spoločný kruh bodov, na ktorých zastavila lopta (počítaný prostredníctvom triedy MEC).
Viacero anotácií pre jeden pohyb
Pri vytváraní XML súboru s anotáciou sa program pozerá do používateľom zadaného výstupnéhho priečinka a postupuje nasledovne: 1. nájde všetky anotácie patriace tomu pohybu, ktorý bol práve testovaný, 2. nájde súbor s najvyšším poradovým číslom, 3. vytvorí súbor s poradovým číslo o jeden vyšším. Všetky tieto operácie prebiehajú na úrovni mien súborov, preto si na ne treba dávať pozor a udržiavať ich v nasledovnom formáte: meno_pohybu-poradové_číslo_anotácie.xml.
Popis XML súboru s anotáciami celkovo
Niektoré atribúty, ktoré boli dostupné v anotáciách v minulých verziách už dostupné nie sú (preto, lebo je plánované ich presunutie do XML súboru so samotným pohybom, kde lepšie reprezentujú svoju podstatu – napríklad typ pohybu), chýbajú tiež tie, ktoré boli plánované (napríklad vyššie spomínaný rozptyl uhlov), pretože do dokončenia tohto šprintu neboli presunuté nástroje na tvorbu a čítanie XML súborov do jednej spoločnej knižnice pre framework a hráča. Aby táto práca nemusela byť robená na dva krát, bude toto dokončené neskôr – správne hodnoty sú už ale vo frameworku dopočítané a reprezentované, chýba iba ich zápis do XML. Nakoniec mnohé atribúty je potrebné dopísať ručne.
Z tohoto dôvodu vzniká určitá nekonzistencia medzi tým, čo anotácie majú obsahovať a čo momentálne obsahujú po ukončení automatického anotovania. V nasledovnom zozname je tak popísaná štruktúra XML súboru s tými atribútmi, ktoré sa do neho reálne zapisujú počas automatického anotovania:
annotation (koreňový atribút)
- name (meno anotovaného pohybu)
- description (detailnejší popis)
- duration (trvanie pohybu – aj s pohybom lopty, pokiaľ sa hýbala dlhšie ako hráč)
- rotation (otočenie hráča v stupňoch okolo jednotlivých osí)
- move (posun hráča v rámci jednotlivých osí)
- fall (pravdepodobnost pádu hráča)
- ball_distance (vzdialenosť, ktorú prešla lopta počas pohybu)
- max_ball_distance_position (iniciálny bod, z ktorého lopta prešla maximálnu vzdialenosť)
- ball_move (vzdialenosť, akú lopta prešla po jednotlivých osiach)
- preconditions (vstupný stav)
- ball_positions_circle (vstupný kruh inicializácií lopty zadaný používateľom)
- end_state (výstupný stav)
- ball_positions_circle (minimálny kruh obsahujúci všetky body, ktoré sú koncovými stavmi lopty po vykonaní pohybu )
Príklady anotácií (hodnoty nie su presné): Stare:
Nove: