High skill

Z RoboCupTP wiki
Prejsť na: navigácia, hľadanie

Obsah

Pravidlá pre XML súbory (low skilly)

XML súbory s low skillmi a fázami musia pre použitie v high skilloch okrem vyššie uvedených požiadaviek spĺňať nasledovné:

  • každý musí mať aspoň jednu fázu s isFinal=true

Priebeh vykonávania

Pri skončení každej isFinal fázy sa volá pickLowSkill. V prípade, že sa vráti null (čo značí koniec celého high skillu), alebo iný než súčasný low skill, finalizuje sa súčasný low skill a následne sa vyberie nový. V prípade že pickLowSkill vráti súčasný low skill, pokračuje sa next fázou a finalizácia sa nevykoná. Ak sa začiatočná fáza ďalšieho low skillu rovná poslednej fáze súčasného lowskillu, tak sa rovno začne vykonávať ďalší low skill bez ukončenia súčasného low skillu. Vykonávanie high skillov sa riadi plánovačom.

Existujúce High Skilly

Ruby-LowSkill vždy pri druhom a ďalšom volaní pickLowSkill vracia null, takže vždy finalizuje pohyb pri prvej príležitosti. Toto dokonca viedlo k odtráneniu isFinal vlastností z mnohých XML súborov - tie tam treba vrátiť.


Na testovanie cyklických pohybov ako je chôdza bol vytvorený nový HighSkill s názvom CyclicHighSkill, ktorého metóda pickLowSkill vždy vracia ten istý lowSkill. Tiež som vytvoril testovací high skill s názvom LinkedHighSkill, ktorý používa pole pohybov, ktoré sa napĺňa pri incializácií high skillu.


GetUp high skill pri inicializácií uloží si validačnú metódu z parametra inicializácie, získa informácie o agentovi a o modeli sveta. V metóde pickLowSkill zisťuje či agent leží na bruchu alebo na chrbte, kde zavolá potrebný low skill na vstatie. Ak agent stojí tak nič neurobí len povie, že stojí. A ak nevie v akej pozícii je agent, tak sa pokúsi vykonať low skill na vstatie z chrbta.


Kick high skill zistí poslednú pozíciu lopty. Ak loptu nevidí viac ako 3s, alebo je príliš ďaleko, alebo agent je na zemi, tak nič agent nerobí iba oznámi stav. Ak je lopta v určitej vzdialenosti pred ním, vľavo alebo vpravo, tak príde k lopte alebo ukročí k lopte. Ak je lopta tesne pred ním viac do ľava kopne ľavou nohou ak je viac doprava kopne pravou nohou. Sila kopu sa vyberá podľa vzdialenosti medzi loptou a požadovanou pozíciou. Požadovaná pozícia je udávaná ako parameter high skillu.


Goto high skill má za úlohu prísť do určeného cieľa (pozície vo formácii). V high skille sú napevno určené možné smery pohybu, a vzdialenosti kedy je blízko cieľa a kedy ďaleko. Tento high skill nemá úplne ošetrený prechod stavmi, pri ktorých volá jednotlivé pohyby.
Z Goto vznikli:

  • GoToPosition - high skill, ktorý po zavolaní s parametrom súradníc umožňuje presun hráča na pozíciu, pri ktorej bude nasmerovaný k lopte tak, aby bola medzi ním a zadaným parametrom súradníc. Tento high skill je použiteľný, ak agent chce kopnúť loptu na nejakú pozíciu.
  • FormationHelper - obsahuje metódu „getHighSkillToGoToFormation“, ktorá vracia high skill „GoToPosition“ nastavený na chod hráča do formácie

Podrobnejší opis vzniku týchto dvoch prvkov je na Choď na pozíciu a Drž formáciu


Trajectory high skill využíva Java triedu RelaTimeTrajectory, z ktorej postupne získa názvy low skillov na dosiahnutie cieľa.


Localize high skill otáčaním hlavy a tela agenta zistí pozíciu lopty a otočí hráča v danom smere. V prípade, že hráč loptu nevidí, otočí sa doprava o 90°.


Turn high skill otáča agenta podľa zadaného uhlu.


Walk2Ball je primárny high skill na chôdzu hráča k lopte. Stará sa o fázu od lokalizácie lopty(tá nie je zahrnutá) po príchod k lopte do dostatočnej blízkosti na uskutočnenie kopu.


Walk, Walk2 a WalkOld sú high skilly, v ktorých sú napevno určené možné smery pohybu, a vzdialenosti kedy je blízko cieľa a kedy ďaleko. Nemajú úplne ošetrený prechod stavmi, pri ktorých volajú jednotlivé pohyby. Je potrebné ich prepracovať lebo sú už zastarané.


WalkNew a WalkBehindBall sú high skilly, ktoré využívajú skoro všetky low skilly pri prechode stavmi. Čiže sú zatiaľ najlepšie fungujúce high skilly.


Aktualizácia Low skillov v používaných High skilloch tímom A55 Kickers

Tvorba high skillov

High skilly sa dajú písať v ruby aj v jave. Musia dediť abstraktnú Java triedu HighSkill alebo abstraktnú Java triedu ComplexHighSkill. Implementácia High skillov je riešená ako stavový automat. V triede dediacej od HighSkill sa musia implementovať metódy pickLowSkill() a checkProgress().

Hlavou úlohou je implementácia metódy pickLowSkill. Tá sa bude volať na začiatku vykonávania pohybu a zakaždým, keď skončí fáza s isFinal=true.

Vrátiť musí objekt triedy Java-LowSkill.

Metóda checkProgress sa volá aj počas priebehu fázy, ak fáza ešte neskončila. Vyhodením výnimky by mala môcť ukončiť high skill bez čakania na finalizáciu fázy low skillu. To je použíteľné napríklad ak agent spadol.

V triede HighSkill sú definované stavy high skillov ako enumeračný typ s hodnotami INITIAL_STATE, EXECUTING_STATE, FINALIZING_STATE, END_STATE. Každý high skill prechádza všetkými stavmi. Pri prechode stavmi sa vyberajú low skilly na základe stavu agenta. Stavy agenta sa určujú na základe informácií z modelu sveta hráča a informácií o hráčovi a vyhodnocujú sa implementovanými metódami high skillu.

Tvorba high skillow v Ruby

High skilly písané v Ruby sú uložené v priečinku scripts/high_skills. Pri písaní high skillu v Ruby vytvorte v priečinku súbor s rovnakým menom ako je trieda high skillu ale všetko s malými písmenami. Súbor bude obsahovať kód s nasledujúcou štruktúrou:


require 'high_skills/ruby_high_skill.rb'

include_class Java::sk.fiit.jim.agent.AgentInfo #píšte ak potrebujete použiť nejakú Java triedu a jej metódy


class ClassName < RubyHighSkill #alebo Java::sk.fiit.jim.agent.skills.ComplexHighSkill ak chcete dedit priamo od Java triedy


def initialize

super

# a navyše získanie informácii o modeli sveta agenta a iné testovacie inicializačné hodnoty

end


def pickLowSkill

# kontrola stavov agenta zo získaných informácií pri inicializácii

# a pri každom stave return nil alebo return get_skill('názov_low_skillu')

end


def checkProgress

# logovanie postupu high skillu

end

end

# ClassName.new #ak chcete vytvoriť inštanciu high skillu a otestovať

Príklad na skutočný kód High Skill pohybu: Médiá:High_skill_example.rb

Osobné nástroje
Menné priestory

Varianty
Operácie
Navigácia
Nástroje