Hvornår: Torsdag d. 22/1
Hvem: Asger, Michael
Varighed: 6 timer
Mål
- Forbedre Drive Towards Ball opførslen
Arbejdsgang
Autonomous behavior model
Vi forsøgte på forskellige måder at forbedre Drive towards ball
opførslen, så den ikke længere ville bruge tid på at køre forvirret
rundt ved siden af bolden (se lab7). Først prøvede vi at tweake
threshold for hvornår agenten skulle skifte mellem at køre ud på siden
af bolden og bag den. Dette hjalp os intet så vi skiftede
strategi. Drive towards ball havde indtil da været en stateless
behavior. Dette var gjort for at agenten bedre kunne følge efter
bolden, hvis den fik at vide fra kameraet at bolden havde flyttet sig,
og havde den utilsigtede bivirkning at robotten kørte forvirret rundt
på siden af bolden.
Vi prøvede nu i stedet at give agenten state. Dette vil sige at når
drive towards ball opførslen startede skulle robotten planlægge hele
sin rute hen til bolden, og følge den indtil den nåede frem eller en
anden opførsel spillede ind. Dette ville betyde at vores robot ikke
ville være nær så fleksibel i forhold til at jagte bolden, men
forhåbentlig blive bedre til at komme hen hvor den mente bolden var og
derfra fortsætte jagten, forhåbentlig tættere på bolden end den startede.
Konklusion
Autonomous behavior model
Vi fik desværre ikke vores state implementation til at virke før
fremlæggelsen, så vi måtte vende tilbage til vores tidligere
implementation.
Vi kan konkluderer at det ikke altid er ligetil at få en agent til at
bevæge sig rundt i et miljø. Vores tilgang til det mht kamera
tracking gør ganske vidst vores robotter alvidende, men alvidende med
en smule forsinkelse, hvilket vi endnu ikke succesfuldt har fået taget
højde for.
Den endelige behavior model
De konkrete behaviors nedarver fra en abstract behavior klasse, som så
implementerede de funktioner som var fælles for alle behaviors. Som
eksempler kan nævnes ikke at udfører deres handling når de var
undertrykt eller fortælle andre behaviors at de ikke længere måtte
køre.
Behavior klassen kan ses her:
http://www.daimi.au.dk/~mkm/LEGO/project/src/legodart/nxt/Behavior.java
Som det ses er hver enkelt opførsel en seperat tråd. Dette er gjort
for at opførsler hurtigt kan undertrykke hinanden, uden at skulle
vente på at hinanden.
Behavior klassens run metode er hvor det hele sker. Så længe opførslen
ikke bliver afbrudt, kører opførslens løkke. Løkken tester først om
opførslen skal udføres ved at kigge på om opførslen ikke er undertrykt
af en anden opførsel og dernæst om opførslens aktion giver mening i
robottens miljø. Hvis detter gælder, så fortæller behavioren at den
starter og går i gang med at udføre opførslen.
Vi opdagede senere at det ikke var nok for en opførsel at vide om den
blev undertrykt. Den skulle også kunne se om den var blevet undertrykt
mens den var ved at udfører sin action, eller at den havde mistet
kontrollen så at sige. Dette var nødvendigt da en opførsel kan
undertrykke de lavere opførsler og frigive dem igen, uden at de lavere
opførsler når at teste for dette. Med den boolske variabel
lostControl, ville en tråd få at vide når den mistede kontrollen
midtvejs i sin action og kunne returnerer.
Vi valgte at putte funktioner til at bevæge agenten i behavior, da
disse sørger for at checke om behavioren har mistet kontrollen inden
de flytter agenten. Det gøres så vi ikke behøver skrive testen hver
gang vi vil flytte agenten.
Vi har implementeret følgende behaviors:
Drive towards ball behaviorhttp://www.daimi.au.dk/~mkm/LEGO/project/src/legodart/nxt/DriveTowardsBall.java
Drive towards ball behavior er agentens øverste behavior. Dens
condition er true, så den altid kan køres og forsøger at manøvrere
agenten bag bolden i forhold til målet. Er agenten foran bolden vil
behavioren forsøge at få agenten ud på siden af bolden, hvorfra den
frit kan køre om bagved bolden.
Face ball behaviorhttp://www.daimi.au.dk/~mkm/LEGO/project/src/legodart/nxt/FaceBallBehavior.java
Hvis agenten først står placeret således at bolden er mellem den og
målet, sørger denne opførsel for at den vender sig rundt mod bolden og målet.
Dribble behaviorhttp://www.daimi.au.dk/~mkm/LEGO/project/src/legodart/nxt/Dribble.java
Er bolden mellem agenten og målet og agenten har front mod bolden,
skal agenten bare køre fremad, for at "drible" bolden tættere på mål.
Stop behaviorhttp://www.daimi.au.dk/~mkm/LEGO/project/src/legodart/nxt/Stopped.java
Stop opførslen er agentens vigtigste "refleks". Hvis nogen fortæller
spilleren at den skal stoppe, undertrykker denne refleks alle andre
opførsler og agenten står stille.
Vi lavede så
følgende
arbitrator,
eller behavior manager.
De vigtige metoder er her
int attachBehavior(Behavor
b),
synchronized void reportStart(int index) og
synchronized void reportFinished(int index)attachBehavior er den metode hvor en behavior bliver forbundet med
arbitratoren, metoden returnerer behaviorens index. Dette bliver brugt
så behavioren kan undertrykke alle behaviors med et lavere index.
reportStart bliver kaldt af en opførsel hver gang denne kan
køre. Hvis opførslen har et højere index end den eksekverende
opførsel, fortæller arbitratoren den eksekverene at den har mistet
kontrollen og alle underliggende opførsler bliver undertrykt.
reportFinished låser op for alle underliggende opførsler hvis den
kaldes fra den eksekverende opførsel.
Resultater:
Vi vurderer om vores implementation kan kaldes et autonomous system ud
fra om vi lever op til de 6 characteristica opsat i
Modeling
Adaptive Autonomous Agents1. Task-oriented modulesVi har i vores implementation opgave baserede moduler. Disse er hvad
vi kalder opførsler eller behaviors, og hver enkelt sørger for at
udføre én opgave når det giver mening indenfor miljøet.
2. Task-Specific SolutionsVores implementation har opgave specifike løsninger i form af vores
opførsler, der alle selv sørger for at teste om det giver mening at
kører dem i forhold til miljøet.
3. Role of Representations is De-emphasizedRepresentationen af verdenen omkring vores agent er fremhævet, modset
hvad characteristicaen gerne så. Dette bliver den gjort i vores
SoccerField klasse, hvor alle behaviors kan hente data om hvor andre
spillere og bolden er. Vi valgte denne løsning for at gøre det nemmere
at holde styr på disse oplysninger og at sikre os at alle tråde kunne
få de nyeste oplysninger uden selv at skulle bruge tid på at hente
dem.
Dette skyldes dog så også at vores robotter ikke befinder sig i en så
generel verden som P. Maes agenter, men i stedet indenfor et
spillefelt vi selv opsætter.
4. Decentralized Control StructureDette characteristica er opfyldt da alle vores opførsler arbejder
parallelt ved siden af hinaden. Naturligvis har vi en arbitrator til
at holde styr på hvilken opførsel der må køre, men dette er tilladt
under characteristicaen.
5. Goal-directed Activity is an Emergent PropertyVores agents målrettet aktivitet ændres konstant i takt med at nye
opførsler overtager agenten.
6. Role for Learning and DevelopmentDette characteristica henvender sig til
adaptive autonomous
systemer og ikke bare autonomous systemer.
Det var oprindeligt meningen at vi ville have implementeret et
adaptivt system, så vi kunne se vores spillere udvikle sig og blive
bedre. Dette nåede vi dog ikke til, så vi opfylder ikke denne
characteristica.
Konklusion
Vores implementation lever ikke helt op til Maes 6 characteristica men
vi anser stadig implementationen for et autonomous system. Grunden er
at characteristica 6 kun henvender sig til adaptive systems, hvilket
vores ikke er endnu, og characteristica 3 gælder i forhold til
agentens sensor, noget vi ikke har, men i stedet har vi en beskrivelse
af vores model af verden.