Samarbetande autonoma agenter i RoboCup miljö

 

 

 

 

Niklas Persson

Maj 2001

 

 

 

 

 

 

 

 

 

 

Sammanfattning

RoboCup är ett globalt projekt med utgångspunkt att fotboll är en utmaning för robotutvecklare, både i en verklig och i en simulerad fotbollsmatch. Att utveckla ett fotbollslag innebär att många problem måste lösas och behandlas. Både fotbollspelarnas individuella färdigheter såsom lagets samarbetsförmåga sätts på prov. I den första delen av detta magisterarbete beskriver jag bakgrundsfakta och de verktyg som står till förfogande i uppbyggandet av ett RoboCup lag. I den andra delen beskriver jag hur jag har byggt upp ett lag med autonoma agenter som tar beslut genom intryck från omvärlden och genom ett beslutsträd. Mitt fotbollslag använder olika roller och beslutsträd för att bygga upp ett samarbets beteende. Resultatet har blivit ett fotbollslag som använder sina roller för samarbete, med hjälp av beslutsträd och olika positioneringar på fotbollsplanen.

 

Abstract

RoboCup is a global project assuming that soccer is a challenge for robot developers, both in a real and a simulated version. To develop a soccer team means that many problems have to be analyzed and solved. Both the players’ individuall skill and the team’s ability to cooperate are tested. In the first part of this master thesis I describe background information and the tools available for building a RoboCup team. In the second part I describe how I have built a team of autonomous agents using perceptual data and decision trees to choose their actions. My team uses different roles and different desion-trees to build cooperative behaviors. The result have become a soccer team that uses its roles to cooperate, with help from decision trees and taking different positions on the soccer field.

Innehållsförteckning

1 Inledning.. 4

1.1 Introduktion till RoboCup. 4

1.2 Syfte.. 4

1.3 Problem... 5

1.4 Avgränsningar.. 5

2 SoccerServer.. 6

2.1 Struktur.. 6

2.2 Meddelande till och från soccerserver.. 7

3 Agenter.. 9

4 Agentarkitektur.. 10

4.1 Enskilda agenter.. 10

4.2 Lagsamarbete.. 10

5 Implementationen.. 12

5.1 Spelarens position.. 12

5.2 Färdigheter.. 12

5.3 Spelarnas Roller.. 14

5.3.1 Målvakt. 14

5.3.2 Försvarsspelare. 16

5.3.3 Mittfältspelare. 17

5.3.4 Anfallspelare. 17

5.4 Synkronisering med Soccerserver.. 17

5.5 Hjälp att starta mitt fotbollslag.. 18

6 Resultat.. 20

7 Slutsatser.. 22

Referenser.. 23

Bilaga 1. 24

 


 

1 Inledning

1.1 Introduktion till RoboCup

“The Robot World Cup Initiative (RoboCup) is an international research and education initiative. It is an attempt to foster AI and intelligent robotics research by providing a standard problem where wide range of technologies can be integrated and examined, as well as being used for intergrated project-oriented education.”[1]

Ordet RoboCup kommer ifrån en Amerikansk science-fiction långfilm ’RoboCop’, där handlingen cirkulerade om en robotpolis. Som robot var han fysiskt starkare och var på det sättet bättre än människor att klara av ett sådant yrke. Även om målet med RoboCup inte är att skapa sådana robotar så ger det en bra bild av vad RoboCup projektet handlar om. Det finns situationer som är mer lämpade för robotar att göra, t.ex. i en eldsvåda där det är en stor explosionsrisk, och det är för farligt för brandmän att gå in. Då kunde det ha varit bättre om brandkåren kunde skicka in en eller flera robotar som kan tåla hettan mer och kan med hjälp av sina speciella egenskaper kanske rädda liv som inte annars kunde ha räddats.

I dagens läge dock är vi en bit därifrån ännu, och RoboCup’s officiella mål att besegra världsmästarna i fotboll år 2050 med ett robotlag kanske är orimlig, eller är den det? RoboCup projektet började i Japan 1995 [4] och med hjälp av Internet har projektet spridits över världen. Dessutom går varje år ett VM och ett EM av stapeln i olika länder runt om i världen. I dagens läge finns det ett antal klasser som olika robotlag tävlar i för att testa lag-samarbete och förmåga att tänka snabbt, oberoende av människan. Den första klassen som RoboCup projektet startade med var en simulation av ett fotbollslag. Denna klass kallas simulatorklassen och är en simulering på datorn, där två fotbollslag möts på en simulerad fotbollsplan. Fotbollsmatchen utspelar sig på datorskärmen där fotbollsspelarna och bollen representeras av små runda cirklar. Det är ett sådant fotbollslag jag har utvecklat och kommer att berätta mer om senare.

Nästa klass som också ingår i EM och VM är ”Small size robot league” där 15cm3 stora robotar spelar fotboll, 5 styck i varje lag. Dessa robotar är utrustade med hjul och global syn. De spelar på en plan lika stor som ett pingisbord och fotboll lika stor som en golfboll.

 

”Middle size robot league” är en förstorad version av ”Small size robot league” där också 5 robotar spelar men kan vara upp till 50cm i diameter. Istället för ett pingisbord spelar dessa robotar på en fotbollsplan som är 3x3 pingisbord stor.

Fjärde klassen eller ligan kallas ”Legged robot league” som introducerades på VM i Stockholm 1999. Robotarna i denna ligan måste ha ben, och de robotar som tävlar i denna ligan har oftast fyra ben.

“RoboCup rescue” är en liga där robotar skall kunna orientera sig i farliga miljöer och skall kunna lokalisera och rädda liv.

En “Humanoid league” kommer att introduceras 2002. Där mer människoliknande robotar skall introduceras.

 

Som synes utvecklas RoboCup mer och mer till att likna mänskliga motsvarigheter. Frågan är hur lång tid det dröjer innan vi har människoliknande robotar.

 

Utvecklingen av simulatorligan har gått snabbt och mer och mer sofistikerade lag har utvecklats. En nyckelfråga har varit samarbete, ett bra sådant har blivit väsentligt för ett lag, samtidigt har egenskaper som att passa, dribbla och göra mål förfinats och är idag på en mycket hög nivå. Eftersom simulatorligan har funnits längst och att den har den fördelen att inte behöva bry sig om mekaniska problem och begränsningar så har fokusering och utvecklingen av dessa egenskaper hunnit längst i simulatorligan.

 

1.2 Syfte

Syftet med detta examensarbete är att skapa ett fotbollslag som agerar i RoboCup omgivning och genom detta testa och prova idéer som jag har för att i mitt tycke göra ett intressant arbete. Jag vill göra ett fotbollslag som har ett samarbete som liknar ett verkligt fotbollslag och se hur och om det fungerar. Därför är det min mening att dela upp mitt fotbollslag i olika roller och att få dessa spelare att samarbeta.

 

1.3 Problem

Att utveckla ett RoboCup lag innebär en hel del utmaningar. Det finns många begränsningar i RoboCup som är tillagda för att det simulerade fotbollsmatchen skall likna en riktig fotbollsmatch, t.ex. får inte fotbollspelarna ha en inre kommunikation mellan sig. Detta skulle enkelt kunna göras rent tekniskt men eftersom riktiga fotbollspelare bara kan kommunicera muntligt och kanske med tecken så innebär det att spelare i RoboCup har samma begränsning. De får ”prata”, men det innebär att närliggande spelare, med- som motspelare också har chansen att höra vad som sägs. Ingen inre hemlig kommunikation får alltså förekomma.

Man kan tycka att det är fusk om fotbollspelarna får en sådan korrekt information om världen omkring sig sådan att den kan göra precisa bedömningar. Det är därför informationen som spelarna tar del av är något diffus. Vinklar, avstånd osv. är långtifrån exakta, vilket är gjort avsiktligt.

Dessutom har fotbollspelarna i RoboCup en begränsning när det gäller hur mycket de orkar springa. Egentligen skulle de simulerade robotarna kunna springa i evigheter i max hastighet. Men eftersom robotarna inte skall ha några fördelar jämtemot mänskliga fotbollspelare så har även dess ork begränsats. Dem orkar springa en kort rush, men måste därefter vila om den skall göra några fler rusher efteråt.

Alla dessa begräsningar för att fotbollsmatchen ska likna en verklig match i en verklig värld där fysikens och naturens lagar verkar. Detta ställer förstås till problem för dem som skall göra ett RoboCup lag, och måste lösas på ett eller annat sätt.

 

1.4 Avgränsningar

Eftersom jag kommer att lägga tyngden i arbetet på samarbete mellan de olika fotbollspelarna så kommer inte den individuella prestationen från fotbollspelarna att vara någon prioritet. Dagens lag i RoboCup VM har förstås lagt ner mycket mer tid på denna del och krävs också om laget skall ha någon chans att konkurrera på en sådan nivå. Men individuella presentationer hjälper inte om laget inte har något sorts samarbete.


 

2 SoccerServer

2.1 Struktur

Soccerserver har utvecklats för att kunna simulera en fotbollsmatch och visualisera vad som sker på fotbollsplanen. I soccerservern ingår en soccermonitor som visar vad som sker på fotbollsplanen medan soccerservern gör beräkningarna och tar emot/sänder information till klienterna (fotbollsspelarna). Klienterna skickar till soccerservern vad de vill att sin spelare ska göra, och soccerservern skickar tillbaks information på hur spelaren mår och vad den ser i sin visuella räckvidd, såsom avstånd och vinkel till fotboll, målområden och andra spelare. Sen är det klientens uppgift att ta hand om denna data och hantera den efter egen förmåga.

På Figur 2-1 visas en bild på hur kommunikationen går mellan klienter och soccerserver.

soccerserver

Figur 2-1    Kommunikationen mellan klienter, soccerserver och soccermonitor.

 

Linjerna mellan klienter/spelare och soccerserver representerar två vägars kommunikation. Kommunikationen sker med via en UDP socket, och varje klient eller program sköter en spelare.

Soccerserver finns att ta hem på Internet [2]. Det finns även en manual [3], även om den inte brukar vara uppdaterad till den nyaste versionen av soccerserver. Det finns även början till klienter [4] på Internet, och det är en bra början om man planerar att göra ett eget fotbollslag. Den soccerserver jag använt [2] innehåller förstås själva soccerservern men även soccermonitorn. Det finns även versioner på Internet som bara innehåller soccerserver delen medan soccermonitorn ligger separat. Dessutom fungerar den versionen jag använder bara på UNIX-system. Det finns även versioner till Windows men jag har inte testat eller provat några av dem versionerna.

Soccerserver och soccermonitor startas på en dator och sedan väntar den på spelare att presentera sig, alternativt kan soccerservern och soccermonitorn startas på olika datorer. Spelarna kan startas från andra datorer och koppla sig till soccerservern genom ett lokalt nätverk eller Internet. Spelaren talar om vilket lag den tillhör och soccerservern ger då spelaren information om vilken sida om planen spelaren börjar och vilket nummer den får. Den spelare som får nummer 1 brukar få bli målvakt, men det är inte nödvändigt. När matchen sedan börjar, startar också kommunikationen mellan soccerservern och alla spelare.

 

2.2 Meddelande till och från soccerserver

Varje halvlek varar i ungefär 5 minuter, och dessa minuter delas upp i 9000 cykler. Vid två av tre cykler får spelaren ett ’see’ och vid varje cykel ett ’sense’ meddelanden från soccerservern De kan se ut så här:

 

(sense_body 86 (view_mode high wide) (stamina 3210 1) (speed 0.1 3) (head_angle 0) (kick 0) (dash 23) (turn 16) (say 0) (turn_neck 0))

 

(see 86 ((g r) 94.6 -29) ((f c) 43.4 -40) ((f c t) 63.4 -70) ((f c b) 44.7 5) ((f r t) 105.6 -47) ((f r b) 94.6 -8) ((f p l b) 6.9 28 -0.138 0.4) ((f p r t) 83.9 -44) ((f p r c) 78.3 -31) ((f p r b) 76.7 -16) ((f g r t) 95.6 -33) ((f g r b) 93.7 -24) ((f t l 20) 58 -89) ((f t l 10) 62.2 -80) ((f t 0) 67.4 -73) ((f t r 10) 73.7 -66) ((f t r 20) 81.5 -61) ((f t r 30) 89.1 -57) ((f t r 40) 96.5 -53) ((f t r 50) 105.6 -50) ((f b l 40) 24 68 -0 0.2) ((f b l 30) 26.3 46 -0 0.2) ((f b l 20) 31.5 29) ((f b l 10) 38.9 18) ((f b 0) 47 10) ((f b r 10) 55.7 5) ((f b r 20) 65.4 1) ((f b r 30) 74.4 -1) ((f b r 40) 83.9 -3) ((f b r 50) 93.7 -5) ((f r t 30) 107.8 -44) ((f r t 20) 104.6 -39) ((f r t 10) 101.5 -34) ((f r 0) 99.5 -28) ((f r b 10) 98.5 -22) ((f r b 20) 98.5 -17) ((f r b 30) 99.5 -11) ((b) 44.7 -40) ((l b) 55.7 -20))

 

Om vi bryter ned en sense_body meddelande i mindre delar så kan vi lättare se vilken information den innehåller.

 

sense_body 86

Detta säger att hela meddelandet är av typen sense_body. Talet efter talar om i vilken cykel soccerservern befinner sig.

 

view_mode high wide

Talar om vilken kvalitet på synfältet spelaren har. Spelaren kan välja mellan att se brett eller långt.

 

stamina 3210 1

Första talet anger hur mycket ork spelaren har kvar och den andra anger hur mycket spelaren anstränger sig just nu.

 

 

Speed 0.1 3

Anger vilken hastighet spelaren har och vilken vinkel som spelaren springer mot (Relativt till spelaren).

 

head_angle 0

Anger vinkeln på huvudet(relativt till kroppen).

 

Kick, dash, turn, say och turn_neck

Säger hur många gånger just detta kommando har exekverats av servern för just denna spelaren.

 

See meddelandet innehåller information om vad spelaren ser, g står för mål, f för flagga, b för boll osv. Därefter följer oftast två tal. Det första anger avståndet och det andra den relativa vinkeln för spelaren till objektet. Flaggor är utplacerade utöver fotbollsplanen och hjälper spelaren att orientera sig (se Figur 2-2). Se vidare på bilaga 1 för mer information.

 

Figur 2-2     Fotbollsplanen med alla flaggor.

 

Vilka kommandon som kan skickas till soccerservern är bestämda. Med hjälp av dessa ska klienten styra sin fotbollspelare. De flesta kommandon kan bara skickas 1 gång per cykel medan vissa kan skickas upp till tre gånger per cykel. Tillgängliga kommandon är:

-dash (kraft)

som används för att springa med en viss kraft mot den vinkeln som spelaren står.

-turn (vinkel)

som vänder spelaren de antal grader som vinkel anger. Positiva vinklar vrider medurs och negativa värden moturs.

-kick (kraft, vinkel)

som används för att sparka på bollen med en viss kraft och mot en vinkel. Förutsättningen är dock att bollen ligger så pass nära att den går att nå.

-catch (vinkel)

kan bara användas av målvakten. Används för att ta bollen (med händerna) för att senare göra utspark.

-say (meddelande)

Alla spelare kan säga någonting på planen. Alla spelare i närheten hör hans meddelande.

-sense_body

Skickas till soccerserver för att begära en 'rapport' på hur spelarens kondition och statistik är.

-change_view (vinkelbredd, kvalitet)

Används för att öka och minska sikten för spelaren. Desto längre spelaren ser desto mindre ser han på bredden.

Figur 2-3    En skärmdump från soccermonitor.

 

Det grafiska är inte det viktiga i soccermonitorn, spelare visas som punkter. Det viktiga är att soccermonitorn ger en rätt bild av vad som pågår på plan och kan visa att det faktiskt pågår någonting i soccerservern. I Figur 2-3 visas en skärmdump tagen från soccermonitor.

3 Agenter

Fotbollsspelarna i mitt lag är agenter, autonoma agenter. Vad är agenter? En agent är någonting som tar intryck av omvärlden och agerar efter denna. Russel säger så här i sin bok [5] om agenter. ”An agent is anything that can be viewed as perceiving its environment through sensors and acting upon that environment through effectors. A human agent has eyes, ears, and other organs for sensors, and hands, legs mouth, and other body parts for effectors. A robotic agent substitutes cameras and infrared range finders for the sensors and various motors for the effectors. A software agent has encoded bit strings as its percepts and actions.”.

Figur  3-1   En nytto baserad agent

 

I Figur 3-1 visas en nytto baserad agent, den engelska termen är ”Utility-based agent”. Förutom att den här agenten tar emot information genom sina sensorer och tar beslut genom dem, har den funktionella agenten ett sätt att bedöma sina mål, inklusive delmål. Om den inte kan uppnå sitt mål så provar den att uppnå vissa delmål som senare kan visa sig leda till det riktiga målet. Nyttofunktionen i Figur 3-1 säger hur satisfierad agenten blir om han

beslutar sig för att agera på ett visst sätt. Utan nyttofunktion kan en agent endast bedöma om han har uppnått ett mål eller ej, medan nyttofunktionen tillåter agenten att jämföra delmål och mäta tillfredställelse av att uppnå dem.

I mitt fall är fotbollsplanen i RoboCup väldigt oförutsägbar och det är nästan omöjligt att beskriva alla situationer som agenten kommer att råka ut för. Därför kommer mina fotbollspelare att vara dynamiskt beslutsfattande agenter. Beslutsträd som jag kommer att använda tillåter en att säga att mina agenter är nytto-baserade. Kommer en spelare att få ett läge att göra mål så är det förstås hans högsta prioritet att göra så. Men skulle agenten inte ha den möjligheten måste han bestämma vad han skall göra. Beslutsträdet hjälper honom att fatta så bra beslut som möjligt. Förhoppningsviss tillräckligt bra att det senare omvandlas i ett mål för det egna laget.


 

4 Agentarkitektur

4.1 Enskilda agenter

Varje agent eller spelare tar hela tiden emot information från soccerservern om hur spelaren mår och vad den ser på fotbollsplanen. Med hjälp av denna information bygger agenten upp en världsmodell. Denna modell är uppbyggd av vad agenten ser just nu. Men agenten sparar även på gammal information för senare användning, man kan säga att agenten har ett eget minne för gammal information.

Med hjälp av denna information som agenten tar emot från soccerservern så kan den använda sig av ett beslutsträd som avgör hur han, beroende på den nyaste världsmodellen och dess minne, kommer att agera och skickar detta beslut till en av agentens färdigheter. Denna färdighet bestämmer exakt vilka och hur många kommandon som skall skickas till en kö. Kön består av exakta kommandon som direkt kan skickas till soccerservern. Denna exekverar agentens beslut och visualiserar detta på fotbollsplanen med soccermonitorn .

Figur 4-1    Klienten väljer ett beslut med hjälp av information från soccerservern

 

4.2 Lagsamarbete

Ett lag skall vara uppdelat i roller, och skall kunna samarbeta mellan dessa för att kunna få ett effektivt lag och ett lag som är anpassat efter position och situation. Försvararna ska ha ett nära samarbete med mittfältet för att snabbt komma ut med bollen och för att minimera tiden som bollen befinner sig på egen planhalva.  Nedan ser vi hur jag vill att rollerna skall vara uppdelade.

Figur 4-2     Rollernas positioneringar

 

Om vi tänker oss att mitt lags mål är på vänstersidan så har vi försvararna i zon 1. De ska hålla sig inom denna zon när de positionerar sig, och kan använda sig av denna zon för att följa bollen. De skall förstås vara utspridda så att de lätt kan vara tillgängliga att passa och även göra det svårt för motståndarlagets anfallare att få fria ytor. Är t.ex. bollen nära det egna målet ska försvarspelare som inte jagar bollen hålla sig nära mål. Så fort försvaret får tag i bollen skall den skickas ut till mittfältet, helst då med en pass, men i trängda lägen kan bollen helt enkelt skjutas mot mittfältet, då de skall vara beredda att ta emot bollen.

Som vi kan se i zon 2 där det är tänkt att mittfältet skall positionera sig så att de väntar på bollen en bit in på egen planhalva om nu bollen skulle befinna sig nära eget mål. De kan även befinna sig på motståndarnas halva och hjälpa anfallarna  att göra mål. Mittfältarna är även de utspridda över sin egen zon för att göra det svårt för motståndarna att spela sina anfallare.

I zon 3 befinner sig anfallspelarna som ska göra målen. Skulle bollen befinna sig på egen planhalva väntar de utspridda relativt nära mittlinjen för att få en pass.

 


 

5 Implementationen

5.1 Spelarens position

 

Med hjälp av information från soccerservern angående min spelares vinkel och avstånd till de olika fyra ytterlinjerna på planen kan jag räkna ut min spelares absoluta vinkel (där 0 grader är uppåt, norr).

 

För att sen få reda på min spelares X position räcker det att spelaren ser antingen spelplanens vänster eller höger linje. Jag kan också få ut min spelares X position genom att se någon av flaggorna som finns utanför planens övre eller undre kant. Ser jag inte någon flagga på planens övre eller undre kant så ser jag alltid någon av de två linjerna, och ser jag inte någon av de två linjerna så ser jag alltid någon flagga som jag kan räkna ut X positionen med.

 

Y positionen får jag ut likadant, fast jag behöver antingen spelarens position i förhållande till spelplanens övre eller undre linje. Eller så kan jag använda flaggorna som finns utanför planen på planens höger eller vänster sida.

 

Denna information hjälper spelaren i många situationer för att förstå sin position och var andra objekt befinner sig.

 

 

5.2 Färdigheter

Mitt beslutsträd använder färdigheter som i sin tur använder sig av de kommandon som finns tillgängliga för klienten att skicka till soccerservern. Jag kan dela upp mina färdigheter i två delar. De första är enklare färdigheter som bara använder sig av ett kommando. Dessa är:

-Vänd mot motståndarmål

Använder den senaste informationen om motståndarens målposition och vänder sig mot denna.

 

-Vänd boll

För att få bollen till en godtycklig vinkel. Tex. för att få bollen rätt framför spelaren.

 

-Sparka bollen mot relativ vinkel(kraft,vinkel)

Sparkar bollen med angiven kraft och mot den relativa vinkeln i förhållande till spelaren.

 

-Sparka bollen mot absolut vinkel(kraft,vinkel)

Sparkar bollen med angiven kraft och mot den absoluta vinkeln (där 0 grader är rakt upp, norr).

 

-Skjut mot mål

Räknar ut vinkeln till målet med hjälp av den senaste informationen om motståndarens mål. Skulle den informationen vara gammal (äldre än två cykler) så räknas vinkeln till målet ut med hjälp av spelarens x,y position och målets x,y position.

 

-Spring fort

Använder maximal kraft för att springa. Har spelaren dock redan hög hastighet så används bara 75 % av maximal kraft.

 

-Spring normalt

Springer med en kraft som förhåller sig till spelarens ork (stamina) som spelaren har kvar.

 

-Backa normalt

Samma som ‘Springa normalt’ men springer bakåt istället.

 

-Spring sakta

Springer med en kraft som gör det möjligt för spelaren att samtidigt spara krafter.

 

-Spring mot bollen snabbt

Använder max kraft för att springa mot bollen.

 

-Se omkring

Vänder sig 45 grader medurs.

 

-Leta efter bollen

Vänder sig också 45 grader, men använder sin senaste bollinformation för att avgöra om spelaren skall vrida sig medurs eller moturs.

 

-Leta efter motståndarens mål

Vänder sig 30 grader medurs.

 

-Vänd mot bollen

Vänder sig mot bollen. Använder sin senaste bollinformation för att veta hur många grader spelaren skall vända sig.

 

-Vänd mot absolut vinkel (vinkel)

Vänder sig mot en absolut vinkel.

 

-Vänd mot absolut vinkel senare (vinkel)

Vänder sig mot en absolut vinkel, men till skillnad mot den förra så räknas inte vinkeln som spelaren ska vrida sig ut förrän detta kommando tas från kön.

 

-Fånga bollen (vinkel)

Målvakten försöker ta bollen.

 

-Flytta (x,y)

Sätter spelaren på en position. (Kan bara göras innan spelet börjar)

 

Med hjälp av dessa enklare färdigheter bygger jag upp mer avancerade färdigheter som ofta innebär att flera färdigheter köas. Detta innebär att spelaren gör en bestämd sekvens av färdigheter. De mer avancerade färdigheterna är:

 

-Positionera Bollen

Används för att snabbt vända på bollen.

 

-Spring mot målet med bollen

Driver bollen framför sig, samtidigt som spelaren springer mot motspelarens mål.

 

-Passa

Passar till en medspelare. Tittar först vilken av motspelarna som är längst bort för att undvika offside. Hittar spelaren ingen att passa, så börjar han driva bollen framåt själv.

 

-Mål spark

Målvakten gör en utspark.

 

-Skjut iväg bollen

I ett trängt läge kan spelaren skjuta bort bollen.

 

-Ta position

Springer till en position, som beror på spelarens förutbestämda roll(försvarare, mittfältare eller anfallare), bollens position och motspelarnas position.

 

-Målvakt täcker mer neråt

Målvakten går neråt för att täcka mål. Han följer en halvcirkel runt mål för att täcka så mycket av målet som möjligt. Se avsnitt Målvakt för vidare information.

 

-Målvakt täcker mer uppåt

Målvakten går uppåt för att täcka mål.

 

5.3 Spelarnas Roller

Även om spelarna har olika roller så är de uppbyggda på samma vis och använder sig av samma färdigheter. Strukturen är densamma men färdigheterna utförs olika beroende på spelarens roll.

 

5.3.1 Målvakt

Målvakten ska skydda målet i så stor utsträckning som möjligt. Problemet är att bestämma hur målvakten skall uppföra sig när han inte är ute efter att ta bollen. Målvakten måste kunna följa spelet och framförallt bollen, och med hjälp av den information han får, ställa sig i så bra position som möjligt dvs. göra det så svårt som möjligt för motståndaren att göra mål.

Ett sätt att lösa problemet är att förflytta sig vertikalt i förhållande till bollen. Problemet då är att i vissa vinklar skyddar målvakten dåligt, det blir för stora ytor för en motståndare att göra mål. Min målvakt ser först främst till att se bollen för att få dess position så att han sedan kan positionera sig i förhållande till var bollen befinner sig. Med hjälp av sin egen (x,y) position och sitt egets mål (x,y) position så vet målvakten om han står på en bra position eller om han skall förflytta sig neråt eller uppåt på spelplanen. Det är viktigt att räkna ut målvaktens position i förhållande till målet med hjälp av respektive (x,y) positioner och inte använda sig av den information målvakten får från soccerservern. Soccerservern ger bara information om målvaktens eget mål när denne kan se målet, och det händer inte ofta nog. Målvakten står oftast och tittar efter fotbollen ute på fotbollsplanen.

När målvakten positionerar sig så förflyttar han sig på en halvcirkel med origo mitt i målet(se fig1).

        

Figur 5-1    Målvaktens positionering                     Figur 5-2   Målvakten skyddar mål

Målvakten försöker alltid positionera sig så att den står på den linje som går mellan boll och mittpunkten i målet (se figur 5-2).

Resultatet har blivit så att målvakten följer bra med i spelet och ställer sig alltid i sådan position så att den lätt kan ta de skott som skjuts mot honom.

Figur 5-3   Målvaktens beslutsträd

Boll-Mål vinkel är en indikation på hur bra målvakten står i förhållande till mål och fotboll. Det bästa är om målvakten står på den linjen som går mellan fotboll och mål (180 grader) se figur 5-4. Figurerna 5-5 och 5-6 visar hur målvakten står för långt åt ena eller andra hållet och kommer att få målvakten att antingen täcka mer åt vänster respektive höger.

    

        Figur 5-4  Målvakten står rätt.   Figur 5-5 Står för långt höger.   Figur 5-6 Står för långt vänster.

                                                                                                                                                                     

 

 

5.3.2 Försvarsspelare

Försvararens uppgift är att försvara sin halva av fotbollsplanen och försöka ta bollen ifrån motståndarlagets anfallare. De ska också kunna samarbeta med mittfältet och snabbt vända spelet till en målchans för det egna laget. Hamnar försvarspelaren i en trängd situation skjuter han bort bollen mot mitten av planen, för att undvika att en motståndares anfallare lätt kan få ett mål läge. Står han däremot vänd mot motståndarens mål, så passar han en mittfältare eller anfallare för att snabbt sätta igång ett anfallsspel. Skulle försvararen inte hitta någon medspelare att passa så börjar han driva bollen framåt för att försöka hitta någon att passa. 

 

figur 5-7    Försvarspelarens beslutsträd

 

SA i beslutsträdet står för ’spark avstånd’, vilket är det avstånd som spelaren får vara längst från bollen för att kunna sparka på den. Försöker han sparka utanför SA så missar han bollen.

 

5.3.3 Mittfältspelare

Mittfältet är länken mellan försvar och anfall. Mittfältet tar emot bollar från försvaret och ser till att anfallet får bollen så att dessa kan göra mål. Skulle en mittfältare inte hitta en anfallare att passa springer de själva med bollen för att se om den hittar någon anfallare eller själv skjuta på mål. Eftersom regeln offside även finns i RoboCup så få mittfältaren se till att inte passa en medspelare om inte en motspelare står bakom denna. Mittfältare har samma beslutsträd som en anfallare, men färdigheterna i beslutsträdet exekveras annorlunda. Positioneringen hos en mittfältare är annorlunda än anfallarens eftersom en mittfältare skall befinna sig bakom anfallarna och till större delen av sin tid stå och bevaka mittlinjen. Eftersom mittfältarna står bakom anfallarna blir utgången av beslutsträdet också ofta annorlunda än om man ser till anfallarna. Mittfältare har oftast motståndarnas försvarare framför sig och har som oftast någon anfallande medspelare framför sig varvid mittfältaren oftare passar än anfallaren.

 

5.3.4 Anfallspelare

Mittfältet skall se till att anfallspelarna får bollen, och sen är det vanligtvis deras uppgift att göra mål. Jag säger ”vanligtvis” eftersom en mittfältare också kan göra mål om han inte hittar en anfallare att passa. Om en anfallare kommer rätt på motståndarnas målvakt försöker denne att skjuta bredvid målvakten för att undvika att målvakten stoppar eller tar upp bollen.

På Figur 5-8 presenteras beslutsträdet för mittfältare och anfallare.

Figur 5-8  Anfallarens beslutsträd

5.4 Synkronisering med Soccerserver

Eftersom soccerservern bara exekverar ett drag per en viss tidsenhet är det viktigt att komma i rätt synkroniseringsläge med servern. Annars kan vissa meddelanden som skickas till servern tappas bort i det fallet när programmet skickar för många meddelanden per sekund. Det är inte heller önskvärt att tvärtom skicka för få meddelanden till servern, eftersom programmet då inte utnyttjar alla drag som den skulle kunna göra, vilket oftast innebär en långsam spelare. Därför bör programmet skicka precis det antal meddelanden som soccerservern hinner med.

Det finns olika möjligheter att lösa detta problem. Ett sätt är att synkronisera utskicket av meddelanden i förhållande till när programmet får in information från servern, eftersom soccerservern skickar ut informations meddelanden i jämna mellanrum. Om detta sätt skall bli bra måste informationen från soccerservern verkligen komma i exakta intervaller. Dessutom måste ens eget program kunna ta upp dessa meddelanden så snabbt som möjligt, annars kan inte programmet veta exakt när meddelandet kom.

Ett annat sätt är att mäta den tiden det tar för soccerservern att skicka sina meddelanden och på det sättet styra hur lång tid det skall gå mellan varje utskick av meddelanden från ditt program. Denna lösning har samma problem som ovan, d.v.s. att soccerservern måste skicka ut sina intervallsmeddelanden i exakta intervaller och att ens eget program kan ta emot meddelandet så fort det kommer in.

 

För att undvika att bli beroende av soccerservens exakthet och ens egets program snabbhet, använder jag mig av ett annat meddelande från soccerservern för att mäta hur mycket programmet skall vänta innan ett nytt meddelande ska skickas.

Innan spelarna sätter igång att spela så testar mitt program att skicka en mängd meddelanden till soccerservern. Soccerservern svarar med hur många av dessa han hunnit med att exekvera. Skulle den inte ha hunnit exekvera alla mina meddelanden så ökas tidsintervallet som programmet väntar innan den skickar iväg något meddelande (Se Figur 5-9).

Figur 5-9    Ett meddelande hann inte soccerservern ta hand om

 

 Skulle det dock vissa sig att soccerservern hinner med alla mina meddelanden för en lång period så provar programmet att minska tidsintervallet. Detta upprepas ett antal gånger. När sedan spelet sätter igång vet programmet hur lång tidsintervall den skall använda sig av. På detta sätt minimeras chanserna för att meddelanden skall gå förlorade när de skickas till soccerservern, eller att för få meddelanden skickas vilket skulle innebära en långsammare reaktionsförmåga hos spelaren. Dessutom behöver inte mitt program ta upp meddelandet särskilt snabbt, för skulle det vara någon gammal information så har det ingen betydelse eftersom jag testar inom ett långt intervall.

När jag testar detta sätt ser jag med hjälp av meddelanden från soccerservern att det fungerar mycket bra, under 1 % av meddelanden missas som programmet skickar.

 

5.5 Hjälp att starta mitt fotbollslag

Mitt fotbollslag finns att hämta på Internet på adressen http://www.cs.lth.se/~ai/xj/niklaspersson/robocup.zip.

Packa upp zip-filen du tog hem från Internetsidan. Den innehåller 3 filer. Filen clientG är målvakten, client är övriga spelare och start är filen som startar hela fotbollslaget. Innan du sätter igång start måste en soccerserver startas. Antingen använder du en som du hämtat från Internet själv eller om så kan du om du kan använda dig av soccerservern som finns på Ludat. Den finns i katalogen ”/usr/kurs/RoboCup/sserver-6.02/” och där startas soccerservern med kommandot sserver. När du startat soccerserver bör du få fram en fotbollsplan. Om du har det så kan du nu starta mitt lag med hjälp av filen start, den startar upp en målvakt, tre försvarare, fyra mittfältare och tre anfallare.


 

6 Resultat

Jag har utvecklat ett fotbollslag som kan spela i RoboCup simulator miljö. Eftersom det fanns knapphändig tillgång till klienter som redan är förberedda för användning till RoboCup tyckte jag att det var bäst att skapa en från början. Detta tog lång tid och är ur datalogisk synpunkt inte intressant. Men för att kunna börja spela med sina egna spelare krävs en fungerande kommunikation med soccerservern, och den skall dessutom vara snabb och några fel i den delen får inte förekomma. Lagras felaktig information så hjälper det inte hur programmet ser ut efteråt eftersom agenten agerar efter då felaktig information. All information från soccerservern skall dessutom lagras på ett behändigt sätt så att den är lättillgänglig.

I mitt lag och i uppbyggnaden av det kan man se intressanta resultat, några bra och några mindre bra. Efter att all kommunikation med soccerservern var färdig kunde jag börja bygga upp färdigheter och tillslut ett lagsamarbete. Mitt lag har någon sorts samarbete som byggs upp av deras beslutsträd och deras positionering. Några exempel; I ett trängt läge hos försvararna, då försvararen är vänd mot sitt eget mål, skjuter han ett hårt skott bakåt för att snabbt få undan bollen, men det är också tänkt som en pass till mittfältet, se Figur 6-1.

Figur 6-1 En försvarare skjuter bort bollen mot mittfältet.

De ifyllda prickarna är spelare i mitt lag och de ihåliga är motståndare. Efter att ha observerat över 100 antingen hela eller delar av matcher ser jag typiska beteenden. Bilden 6-1 är ett sådant exempel, detta beteende kommer ur av att positioneringen och beslutsträdet ser ut som de gör. En av mitt lags mittfältare (pricken till höger) kommer inte att springa längre bakåt utan väntar där på en pass (enligt hans positionering). Han följer bollens X-position så långt som han får. Ovanför honom finns förstås flera mittfältare som ligger på samma X-position som den på bilden men har placerat sig längre upp. I försvararens beslutsträd ser vi att om han står vänd mot egen planhalva och har bollen i sin kontroll så använder han färdigheten ’Sparka fram bollen’. Han gör alltså ett tillspark mot mittlinjen med maximal kraft.

Ett annat exempel på samarbete är det mellan mittfält och anfallare. Ett exempel på det finns i Figur 6-2.

Figur 6-2   En mittfältare passar en anfallare

 

I Figur 6-2 ser vi en mittfältare som passar en anfallare. Detta beteende är också typiskt för mitt lag. En anfallare har oftast en bättre position och läge att göra mål än en mittfältare varför också mittfältaren söker någon att passa. Anfallarna positionerar sig så att de inte går allt för långt från motståndarens mål och samtidigt undviker ett offside läge, därför uppstår det ofta situationer som denna, där mittfältaren passar anfallaren. Om och när anfallaren får tag i bollen så kommer den att försöka göra mål, eller så kanske den hittar en annan anfallare som står bättre placerad än vad han själv gör. I alla fall som mittfältaren passar anfallaren så märker jag att anfallaren är dåligt oförbered på passen och det tar för lång tid för han att få rätt på bollen. Detta är påtagligt mot bättre lag. Jag provade spela matcher mot lag som hade kvalificerat till och deltog i VM 2000, och deras spelare vet precis var passar, både egna och andras, kommer att hamna. Så när mina mittfältare gör en pass till en av mina anfallare börjar genast en av motståndarens försvarare att springa mot den punkten där bollen kommer att hamna, och skjuter bort bollen så fort han får chansen.

Mina spelares samarbete bygger mycket på de olika rollernas positioneringar som vi såg i Figur 4-2. Det är ett sätt att tvinga laget att sprida ut sig och ta position, och tillsammans med beslutsträdet och dess färdigheter byggs ett samarbete upp. Med hjälp av detta sprider sig spelarna väl ut för att kunna ta emot passningar, och samtidigt följer de väl med i

spelet och de olika rollerna såsom försvarare, mittfältare och anfallare följer bollen väl. Är bollen t.ex. långt fram på plan håller sig alla spelare långt framme i förhållande till sin roll, och skulle bollen vara långt inne på egen planhalva förflyttar sig alla så långt mot bollen som rollen tillåter. Om man ser till hur jag bygger upp mitt beslutsträd kan man se att det lätt går att ersätta hela beslutsträdet eller bara en del. Här är en post från målvaktens beslutsträd.

g10->leaf=FALSE;

g10->name="Bollavstånd";

g10->nr_of_branches=2;

g10->branch[0]=g100;

g10->branch_name[0]="<=";

g10->branch_value[0]=2;

g10->branch[1]=g101;

g10->branch_name[1]=">";

g10->branch_value[1]=2;

Namnet på posten är g10 sen följer information om posten är ett löv i trädet, namnet på posten, antalet grenar, villkoren för de och till vilken post grenen pekar till. Jag har färdiga kontroller förprogrammerade såsom ’Bollavstånd’ så att byggandet av träden kan bli så smidig som möjligt.

Jag provade att möta ett lag från RoboCup VM 2000, och då såg jag hur viktigt det var med spelarnas individuella skicklighet såsom direkta passar och beräkningar i förhand var bollen kommer att hamna efter passar eller skott. Detta lag spelade en mycket aggressivt, både i försvar och anfall. Jag förlorade ofta mot detta lag och såg att dess spelare hade ett bättre utvecklat individuella färdigheter.


 

7 Slutsatser

De individuella färdigheterna skulle förstås kunna förbättras. Det första jag skulle lägga till om jag fick tillfälle, är att spelare räknar ut var bollen kommer att hamna efter en spark. Sådan att han lätt kan springa till mötespunkten mellan honom och bollen utan att han behöver ha ögonkontakt med bollen under hela förloppet.

Som en fortsättning behövs också en förändring i mina beslutsträd. Om min spelare inte ser bollen, börjar han direkt leta efter den. Det beteendet måste bort om färdigheten ovan skulle implementeras, eftersom spelaren inte alltid kan se bollen medan han springer mot den punkt som han tror bollen kommer att hamna.

Jag skulle också vilja att den spelare som får en pass skulle vara förvarnade att just han ska ta emot passen, så att denne kan förbereda sig och möta bollen. Just nu kanske just den spelare väjer sig från bollen eftersom han kanske ser att han inte är närmast bollen, och då istället försöker positionera sig.

Något mer ambitiöst och tidskrävande men mycket intressant hade varit att bygga upp en grafisk tillämpning som gör det tillgängligt för vem som helst att bygga upp egna beslutsträd. Eftersom jag har gjort det relativt enkelt att göra beslutsträd i mitt program är detta ingen omöjlig uppgift.

 

 

 


 

Referenser

  1. http://www.robocup.org - Maj 2001
  2. http://ci.etl.go.jp/~noda/soccer/server/index.html - Maj 2001
  3. http://www.dsv.su.se/~johank/RoboCup/manual/download.html
  4. Artificial Intelligence Volume 110, Number 2, June 1999
  5. Russel Stuart, Norvig Peter, Artificial Intelligence A Modern Approach, Prentice-Hall International Editions, 1995 ISBN 0-13-360124-2

 

 

 

 

 

 

 

 


 

Bilaga 1

See information är av typen

(see Tid ObjInfo ObjInfo …)

 

See information skickar visuell information från soccerserver. Tid indikerar nuvarande tid. ObjInfo är informationen om ett visuellt objekt i följande format:

 

(ObjNamn Avstånd Vinkel Avståndsändring Vinkeländring Kroppavstånd Huvudvinkel)

 ObjNamn kan vara följande :

           (g [l|r])

           (b)

           (f c)

           (f [l|c|r] [t|b])

           (f p [l|r] [t|c|b])

           (f g [l|r] [t|b])

           (f [l|r|t|b] 0)

           (f [t|b] [l|r] [10|20|30|40|50])

           (f [l|r] [t|b] [10|20|30]

           (l [l|r|t|b])

där avstånd är det relativa avståndet och vinkel är den relativa vinkeln av objektet, avståndsändring och vinkeländring är ändringar av den relativa positionen av objektet. Avståndsändring och vinkeländring är bara ungefärliga värden och är inte särskilt exakta. Kroppsvinkeln och huvudavstånd är vinkeln av kroppen och huvudet på spelaren, de är bara inkluderade om objektet är en spelare.

Tecknen ”l, c, r, t, b” i f (flagga) och l (linje) betyder vänster(left), mitten(center), höger(right), top och botten(bottom) och indikerar var på fotbollsplanen flaggan(f) är positionerad. Med ”p” menas att flaggan är i straffsparksområdet och med ”g” att flaggan är i målområdet.

I fallet med ”l” (linje), är avstånd den distansen till den punkt där mitten av linjen av spelarens vy korsar linjen, och vinkeln är vinkeln av linjen.

När avståndet till en annan spelare blir större och större, mer och mer information om spelaren är förlorad.