Oskar Danielsson Artificiel Intel igens II 2012-09- 16 Linköpings Universitet Robocup

Relevanta dokument
Linköpings Universitet. Robocup

KALLE ANKA CUP Matchskola

#TDDD92 AI-projekt. Mattias Tiger, IDA

Spelregler för fotboll 7 mot

Spelregler för fotboll 9 mot

En litteraturstudie av 2010s finalistlag runswift

3. Under pågående spel förolämpar spelare nr 7 i lag A tränaren i lag B, nr 7 befinner sig på spelplanen och lag A har bollen. Domslut?

Tor Sterner-Johansson Thomas Johansson Daniel Henriksson

A) FÖRSVARSSPEL MED DJUP AD följer näst sista försvarare och rör sig på samma sätt som denne. AD skall hela tiden ha blicken inåt planen.

Regler för fotboll i spelformen 9 mot 9

S i d a 1. Goda råd. från en erfaren. kranförare

Regler för Volley 2000

Grafisk Teknik. Rastrering. Övningar med lösningar/svar. Sasan Gooran (HT 2013)

Övningar. Utespelare

Lektion på Gröna Lund, Grupp 1

Play Football. Uppvärmningslekar/tävlingar, avslutande övningar i kombination. av färdighetsträning

Fotbollsskolan. skott.indd

Svenska Ishockeyförbundet OVR Time on Ice

[ÖVNINGSBANK] Sollentuna FK. Expressbollen

Volleybollspelet tom 14 år med fyrmannalag och en tillåten studs. Regler

11. 4/6 på B-36. QB A5 springer till B-35 där han kastar en framåtpassning som fångas i lag B:s målområde av wide receiver A85.

Tullinge TP Fotboll välkomnar er till SNÖBOLLEN CUP STOCKHOLMS BÄSTA INOMHUSCUP DEC Riksten

Spelregler. 7 mot 7 och 9 mot 9

Fotbollsskolan. passning.indd

Spelregler för barn- och ungdomsfotboll 2019

INNEBANDYSPELAREN ÖVNINGAR

spelregler Barn- och ungdomsfotboll

Du Kan Fixa. Rubiks kub i 8 steg KUB. ALEGA Skolmateriel AB

LEKTION PÅ GRÖNA LUND, GRUPP 1

Gå-fotboll. Fotboll för alla på riktigt!

Roboten. Sida 1 av 11

Tullinge TP Fotboll välkomnar er till SNÖBOLLEN CUP STOCKHOLMS BÄSTA INOMHUSCUP DEC Riksten

Tarzan & fotboll!! L"en

Nya Spelformer Björn Eriksson Lotta Hellenberg Stockholms Fotbollförbund Svenska Fotbollförbundet

Tullinge TP Fotboll välkomnar er till SNÖBOLLEN CUP STOCKHOLMS BÄSTA INOMHUSCUP DEC Riksten

Lektion 2: Sökagenter. Robin Keskisärkkä

ROCKJET GRUPP A (GY) FRITT FALL

SNOOKER. Introduktion och de viktigaste reglerna

Fotbollsövningar 5-7 år. Lindsdals IF

JavaScript del 3 If, Operatorer och Confirm

Undantag i LB07 FUTSAL CUP se sista sidan I övrigt gäller Skånes FFs tävlingsregler!

Lär dig programmera! Prova på programmering med enkla exempel! Björn Regnell

HÖSTCUP oktober

Regelverk för Svenska Mästerskapet i Beridet Bågskytte 2011

Lös Rubiks kub i 8 steg

Regler för Robotfemkamp under Robot-SM 2011

Teckenförklaring. Försvarspelare. Anfallsspelare. Spelare med boll. Löpning utan boll. Löpning med boll. Bollens väg. Kon

Tränare Spelare Förflyttad spelare Bollriktning Lobb Frekvensstege Kon. Teckenförklaring

RoboCup. Standardplattformsligan. Artificiell Intelligens 2, 729G11 Fördjupningsarbete, HT Linköpings Universitet

[ÖVNINGSBANK] Sollentuna FK. Träffa linjen

Futsal Tävlingsbestämmelser. Regler. Korpen Linköping

Träningsguide för barn och ungdom inom IK Huge Fotboll

Futsal. Futsal Information. Tävlingsbestämmelser. Regler. Korpen Linköping

LEKTION PÅ GRÖNA LUND GRUPP A (GY)

Kvarterslag driva finta dribbla. Created with Sideline XPS Trainer -

Regler och turneringsinformation

Skillnader mellan hängande markdrag frivändningar ryck

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

Klas Hejdenberg

Till deltagande HERRLAG

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

BSK Herrfotboll. Bra att veta när det är dags att DÖMA 5-MANNA! Uppdaterat:

Edutainmentdag på Gröna Lund, Grupp A (Gy)

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Regler och turneringsinformation

UNGDOM LEDARHJÄLPEN Inför säsongen/seriestart

Tillämplingar av bildanalys

Spel. 1 mot 1 på en spelplan som omfattar ca 2 m². Endast fingerslag (eller bagger) är tillåtet. Alternativt kan man tillåta tre beröringar "per lag".

Kristian Pettersson Feb 2016

Mer om metoder och abstraktioner

Fotbollsskolan. fintdribbling.indd

Futsal. Tävlingsbestämmelser Regler

Antal spelare På plan 11 st varav en målvakt. En match kan inte börja om något av lagen är färre än 7 spelare

Solo + Standard och HD. Nordic. SOLO manual version

24-26 jan och 31 jan - 2 feb För pojkar och flickor födda -02 till -06

MÅLVAKTSTRÄNING BK HÖLLVIKEN P02

SÅ SPELAR VI 5 MOT 5-FOTBOLL I STOCKHOLM FLICKOR OCH POJKAR 8-9 ÅR

Handboll i korthet. Ver Staffanstorps HK

Allmänt om Pidro. Spelets uppbyggnad

5-mannafotboll. Ett studiematerial om regler för 5-mannafotboll för 8-9 åringar i Värmland.

GRUPP 1 JETLINE. Åk, känn efter och undersök: a) Hur låter det när tåget dras uppför första backen? Vad beror det på? (Tips finns vid teknikbordet)

REGIONFINAL 2019 LAGEN

Detaljbeskrivning av Player

Programmering. Scratch - grundövningar

Avspark Det lag som inte vinner slantsinglingen får göra avspark. Det är när man börjar matchen.

POOLSPEL Informationsmöte Flickor 7-9 år (-2009/-2010/-2011) 2018

UNGDOMSDOMARE 3 MOT 3 5 MOT 5 7 MOT INNEHÅLL:

Fotbollsskolan. bollekar.indd

Kapitel 1. Publicerat med tillstånd Bortdribblad Text Magnus Ljunggren Bild Mats Vänehem Bonnier Carlsen 2013

2, Vad händer om en boll går sönder, tappar trycket, mitt under en poäng? (1 poäng för rätt svar)

Ha rätt sorts belöning. Åtta tips för bästa sätt hur du tränar din hund. Grunden till all träning:

Lego Robot [ ] [ ] [ ]

SVENSKA FOTBOLLFÖRBUNDET Domarkommittén H E M F R Å G O R Namn:...

Hemfrågor FACIT

FlyBot. Copyright Sagitta Pedagog AB

OzoCodes FÄRG KODER VINST/ UTGÅNG FART RÄKNARE RIKTNING TIMER COOLA RÖRELSER REFERENSSCHEMA VINST/UTGÅNG (SPELA IGEN) CRUISE SNABB TURBO NITRO BOOST

Införande av 9-manna Regeländringar 7-manna Förändringar av planstorlekar Tävlingsmatris Planskisser

Infohäfte till föreningsdomare manna domare

Hemköp Ängby Cup oktober 2012

Transkript:

Robocup

Sammanfattning RoboCup är ett världsmästerskap i Artificiell Intelligens, en utav grenarna i RoboCup är fotboll där lag av robotar tävlar mot varandra. I det här fördjupningsarbetet har jag valt att koncentrera mig på ett lag som heter Dutch Nao Team(DNT) för att undersöka hur de löst problemen för att kunna få robotar att spela fotboll.

Innehåll Sammanfattning... 3 Syfte... 5 Bakgrund... 5 Ligor... 5 Dutch Nao Team... 6 Roboten Nao... 6 Game Controller... 7 Uppbyggnad/Faser... 8 BallFound... 8 BallNotFound... 8 Kick... 8 BallApproaching... 8 InGoalArea... 9 Unpenalized... 9 ReturnField... 9 Percept... 9 Bolligenkänning... 9 Måligenkänning... 10 Diskussion... 12 Bilaga Måligenkänningsalgoritm... 13 Referenser... 16

Syfte Att göra robotar som kan spela fotboll är inte bara nöjesprojekt utan kan förbättra förståelse för hur man kan lösa problem för robotprogrammering i allmänhet, i en värld där allt mer sköts automatiserat och med visioner om robotarbetare för att lösa våra vardagliga problem så hjälper fotbollsrobotarna oss att lära oss mer om hur man kan lösa problem som objektigenkänning. Syftet med fördjupningsuppgiften är att få en fördjupad förståelse av hur man kan lösa problem inom Artificiell Intelligens genom att studera programmeringskoden från ett lag som tävlar i fotbollscupen RoboCup. Bakgrund RoboCup startades 1997 med syftet att förbättra forskningen av robotteknik, artificiell intelligens och öka samarbetet mellan forskare från hela världen. Officiellt så har man sagt att målet med cupen är att vid år 2050 så ska ett lag av humanoida robotar vinna över mänskliga världsmästarna i fotboll. (www.robocup.org, 2011) Ligor På RoboCup kan man tävla inom de olika grenarna fotboll, räddning och hemservice. Fotbollscupen har fem stycken ligor, där man kan tävla med robotar av olika storlekar men det finns även en liga för simulerade fotbollsrobotar där man kan följa matchen på en datorskärm. Small size i small size-ligan tävlar två lag med sex robotar i varje lag med robotar som får vara högst 18 cm i diameter och 15 cm hög och man spelar med en orange golfboll. Ligan fokuserar på problem med hur robotarna samarbetar med varandra i en dynamisk miljö med en hybrid av centraliserat/distribuerat system. Robotarna identifieras alltså av två stycken kameror som är kopplad till en dator som i sin tur skickar robotarnas och bollarnas position och id till lagens datorer som sedan skickar ut kommandon till robotarna. Middle size Robotarna i middle-size-ligan får inte vara större än 50 cm i diameter och spelar i lag av 6 robotar. Till skillnad från small size-ligan så sköts all sensorisk percept individuellt på robotarna som sedan kan kommunicera över trådlöst nätverk. I middle size-ligan lägger man fokus på självständighet för planering och perception och hur man ska använda det för att samarbeta.

Simulation Simulationsligan består av två stycken ligor, 2D och 3D. I ligorna spelar oberoende simulerade agenter mot varandra, fokus läggs på artificiell intelligens och lagstrategi. Humanoid Till skillnad från small och middle size-ligorna som spelas av robotar på hjul så finns humanoidligan där man behöver lösa problem som att kunna gå, springa och sparka bollen medans de håller koll på balansen, visuell perception av bollen, andra spelare, planen och sin egen position. Ligan är uppdelad i tre stycken underligor: Kid size, teen size och adult size som motsvarar robotarnas storleksrestriktioner. Standard platform I standard platformligan får alla lag använda sig utav identiska robotar, därför behöver lagen inte tänka på att hårdvarumässigt göra en optimal robot utan koncentrerar sig endast på mjukvaruutvecklingen. På så sätt så har alla lag samma förutsättningar och det lag med bäst kod vinner. I standard platformligan används den humanoida roboten Nao från robotutvecklaren Alderaban. Dutch Nao Team Jag har valt att följa laget Dutch Nao Team som tävlar i standardplattformsligan och har ännu inte vunnit någon pallplats i RoboCup. Lagets källkod är skrivet i programmeringsspråket Python och är öppen för alla läsa. Jag valde att följa DNT då det har lättillgänglig kod och för att kunna se vad som skiljer sig mellan laget och de vinnande lagen för att se om det finns något de skulle kunna utveckla för att förbättra deras lag, snarare än att välja ett lag som vunnit cupen. Roboten Nao Roboten Nao är roboten som används i standard platformligan, roboten görs av det franska företaget Aldebaran Robotics och är en 57 cm hög, 5,2 kg tung humanoid robot. Den kan ta emot percept via sina två kameror (640x480 pixlar), fyra mikrofoner, sonar avståndsmätare och två stycken IR-mottagare. Beroende på användning så klarar batteriet av att köra Nao självständigt upp till 1,5 timmar. Man kan styra Nao med antingen programvaran Choregraphe som är skapad specifikt för Nao, eller med något utav programmeringsspråken C++ eller Python.

Game Controller Likt riktiga fotbollsmatcher så har RoboCup domare som blåser av matchen och utvisar spelare. För att kunna ge robotarna information om matchens tillstånd så har domarna en game controller. Matchtillståndet sänds via nätverk och innehåller information som tid, poäng och bestraffningar. En operatör kontrollerar game controllerns mjukvara för att uppdatera de beslut som huvuddomaren tar i matchtillståndet. En match är uppdelad i tillstånden Initial, Ready, Set, Playing, Penalized och Finished. Dessa tillstånd bestäms av operatören av Game Controllern. Vid tillståndet Initial så får robotarna inte röra på sig utöver att ställa sig upp. I Ready-tillståndet så ska robotarna gå in på planen och positionera sig för avspark. I matchtillståndet så finns information om vilket lag som kommer att göra avsparken. Om någon robot inte lyckats positionera sig på en godkänd position så kan domaren förflytta roboten till en godkänd position, detta görs under Settillståndet där robotarna inte får röra på sig. När alla robotar har en godkänd startposition så blåser huvuddomaren i en visselpipa och matchtillståndet ändras till Playing. När något lag gör mål så ändras tillståndet till Ready igen och det blir avspark. Om någon robot bryter mot en regel så får den individuella roboten tillståndet Penalized och ställs av planen, standardutvisningen är 30 sekunder. När domaren blåser av för halvlek/matchslut så ändras tillståndet till Finished, där stannar robotarna. Fördelarna med en Game Controller och matchtillstånd är att robotarna kan agera mer självständigt genom att själva gå ut på planen och positionera sig. I och med att robotarna även får information om utvisningar och poängställning så kan robotarna utveckla strategier utefter den informationen.

Uppbyggnad/Faser Dutch Nao Teams källkod är skriven i programmeringsspråket Python, koden är uppbyggd för att roboten ska agera olika utefter matchens tillstånd som bestäms av Game Controllern och efter spelfaser som är specifika situationer under matchen och bestäms av vad roboten kan observera. För varje fas så finns villkor och om ett villkor uppfylls så agerar roboten därefter. T ex om bollen är tillräckligt nära för att kunna sparka på den under fasen BallFound så går roboten in i Kick-fasen. Man valde det här tillvägagångssättet för att huvudproblemet, att spela fotboll, går att bryta ner till delproblem man kan lösa lokalt och självständigt. Nedan så görs några korta förklaringar för faserna. BallFound BallFound-fasen kallar på funktionen findball som tar en bild och söker igenom den efter bollens position och returnerar ett x- och y-värde för positionen. Om bollen är tillräckligt nära så går den in i Kick-fasen, annars så börjar roboten röra sig mot bollens riktning. Om bollen försvunnit ur synhåll så går man över till BallNotFound-fasen. BallNotFound Om bollens position är okänd så skannar den av området genom att vrida på huvudet. Om den inte kan hitta bollen ändå så börjar den cirkulera tills den hittar bollen. När bollen är upphittad så går den över till BallFound-fasen. Kick Kick-fasen tillkallas när en spelare är tillräckligt nära bollen, då skannar spelaren efter motståndarmålet. Om spelaren hittar motståndarmålet så sparkar spelaren bollen mot målet. Om man istället hittar sitt eget lags mål kollar undersöks åt vilket håll målet är, om man har målet på sin vänstra sida så sparkar spelaren bollen åt höger och tvärtom. Om målet är rakt framför spelaren så gör den en klackspark. Efter en lyckad spark så går spelaren över till BallNotFound-fasen. BallApproaching BallApproaching-fasen är en fas som endast målvakten har. Om bollen rör sig i hög hastighet mot målvakten i en specifik riktning så kommer målvakten beroende på riktningen att välja hur den ska agera, slänga sig eller förflytta sig åt höger eller vänster.

InGoalArea InGoalArea gäller också endast målvakten. När bollen är i straffområdet så kommer målvakten att gå mot den, sparka den och gå tillbaka till sin originalposition. Unpenalized När en spelare blir unpenalized, alltså inte längre utvisad så går den in i unpenalized-fasen. Eftersom man får börja på sidlinjen så börjar spelaren gå två meter in på planen och går över till ReturnField-fasen. ReturnField ReturnField kan endast nås från Unpenalized-fasen och går ut på att medans den går börja söka efter bollen. Percept Bildhanteringen av percepten sköts med hjälp av OpenCV, ett programvarubibliotek inom datorseende och bildanalys som ursprungligen utvecklades av Intel. Bolligenkänning Boll- och måligenkänningen är baserade på färgfilter. Innan en match behövs färgintervall sättas för den röda bollen, det gula samt det blå målet. Intervallen används sedan för att filtrera bilderna som tas av Nao och resulterar i en gråskalig bild. Pixlarna har då intensitetsvärden där det lägsta möjliga värdet är svart och det högsta möjliga är vitt, när spelaren sedan söker efter bollen så undersöker man ifall bildens ljusaste pixels intensitetsvärde når över ett tröskelvärde. Om så är fallet så antar man att det är bollen. När bollen väl har hittats så behöver spelaren räkna ut dess position, eftersom den sett bollen på en tvådimensionell bild så är det svårt att avgöra var den är i en tredimensionell värld. Detta görs med hjälp av kamerans position och orientering när bilden togs.

Måligenkänning Ett mål känns igen genom dess två stolpar, bilden söks då igenom efter rektanglar som är långa och breda nog att kunna vara en stolpe. Stolparna känns igen genom att söka efter klumpar av pixlar som når ett visst värde på gråskalan. Om roboten hittar en 20 pixlar hög klump så klassar den klumpen som en stolpe. För att hitta dessa klumpar av pixlar så följer den en måligenkänningsalgoritm(bilaga 1). Eftersom man definierat en stolpe som en 20 pixlar hög klump så söker man igenom kamerans input genom att i vertikalt led jämföra var tionde pixels värde på gråskalan för att se om den stämmer överens med en stolpes gråskalavärde. Detta görs för att spara tid då det är onödigt att söka igenom alla pixlar medans man inte kan råka missa en stolpe om man hoppar 10 pixlar i taget. När man stöter på en såkallad sann pixel som nått gråskalans tröskelvärde så kan det vara en potentiell stolpe. För att bekräfta detta så backar man 9 pixlar och stegar därefter pixelvis för att se om man hoppat över några sanna pixlar som sitter ihop med den första sanna pixeln man fann.

Därefter så räknar man ner tills man funnit tjugo pixlar i rad för att bekräfta att det är en stolpe. Om den istället stöter på en falsk pixel så fortsöker sökningen efter nya sanna pixlar. När den hittat 20 stycken sanna pixlar i rad så görs en ny sökning från bildens maxhöjd-10 och uppåt. När man sökt igenom hela bilden så väljs de två största klumparna av sanna pixlar som då sätts som mål. Robotens kamera är kapabel till att ta bilder i upplösningen 640x480 pixlar. DNT har valt att arbeta i 160x120 pixlar. Anledningen till detta kan antas vara för att göra bildgenomsökningarna snabbare med deras metod på en bild med totalt 19200 pixlar istället för 307 200 pixlar. Roboten har två stycken kameror där en utav dom är placerad mitt på robotens panna och den andra kameran är placerad cirka 4 cm nedanför och är lutad 40 grader nedåt jämfört med den övre kameran. Dock är roboten inte kapabel till att använda de båda kamerorna samtidigt så Dutch Nao Team använder endast den nedre kameran vilket bör vara för att kunna hitta bollen då den kameran är mer vinklad nedåt. Roboten har även information för vilken vinkel huvudet har för varje bild som skickas vidare till måligenkänningsfunktionen. Med detta i åtanke så kanske det är möjligt att skapa en alternativ lösning till att hitta ett mål som kanske är snabbare. I den här bilden från Robocup 2008 kan man se att det är en grå sarg bakom målet, tillsammans med den gröna planen så skapar det en horisont. I nuläget så har DNT valt att söka igenom hela bilden efter klumpar av motståndarlagets stolpfärg. Det kan vara möjligt att spara tid genom att prioritera sökningen genom att börja med att söka längs horisonten och ignorera allt under horisonten eftersom stolparna reser sig över horisonten. Om man hittar pixlar vars färg stämmer överens med stolpens men visar sig vara något annat, t ex en tröja hos någon i publiken så skulle man kunna avgöra om det är en stolpe eller inte om figuren som funnits sträcker sig ner till horisonten och har planens gröna färg under figuren.

Diskussion Eftersom det inte är någon större risk att ett mänskligt fotbollslag skulle förlora mot ett lag kommersiellt byggda robotar som programmerats av ett gäng studenter så säger Robocup inte så fruktansvärt mycket om hur långt robotiken och AI-forskningen kommit idag. Det finns robotar idag som klarar av att reagera på bollar i snabb rörelse, t.ex. KUKAs pingisspelande robot som kan mäta sig med riktiga pingisspelare. Även om man skulle använda påkostade robotar som klarar av avancerade mänskliga rörelser så är fotboll ett komplext spel och om robotarna förväntas vinna över världens bästa fotbollslag så måste robotarna vara kapabla till att snabbt identifiera alla med- och motspelare samt motståndarmål och därefter tillsammans avgöra den mest optimala planen för att nå motståndarmålet. Det svåra är då om man antar att robotarna inte ska få vara uppkopplade till ett gemensamt nät där de kan dela information med varandra utan att de måste arbeta individuellt och förlita sig endast på deras egen perception och på så vis få hela laget att kunna samarbeta tillsammans. Ett problem är även att laget ska spela mot människor som kan agera oförutsägbart och har bra spelförståelse. Det finns många saker som AI klarar av att göra bättre än oss men ju mer komplexa världarna och reglerna blir ju svårare blir det för robotarna. Det är möjligt att robotar en dag kommer vinna över människor i fotboll. Det kommer dock inte vara av ett gäng studenter 2050. Tävlingen fungerar dock väldigt bra för att uppmärksamma och lära studenter mer om robotar och artificiell intelligens.

Bilaga Måligenkänningsalgoritm threshold = 70 # threshold for the grayscale (width, height) = (160,120) # resolution of the input images #######################ALGORITHMICDIVISION####################### # Form a dict of vertical lines. lines = {} for x in range(width): for y in range(10,height,10): if (image[y,x] > threshold): ry = y - 9 while(image[ry,x] <= 70): ry = ry + 1 checker = False for checky in range(ry, min(ry + 20, height)): if (image[checky,x] <= 70): break if (checky == ry+19): checker = True if (checker): for by in range(height- 10,0,- 10): if (image[by,x] > threshold): bry = by + 9 while(image[bry,x] <= 70): bry = bry - 1 checker = False for checky in range(max(bry- 20,0), bry): if (image[checky,x] <= 70): break if (checky == bry- 19): checker = True if (checker): lines[x] = (ry, bry) break break #######################ALGORITHMICDIVISION####################### # Group the veritcal lines together.

sortedlines = sorted(lines.keys()) currentblob = 'empty' upperline = 0 underline = 0 # initiate top two maximum values Max = None NotQuiteAsMax = None posmax = None posnotquiteasmax = None for i in range(len(lines)- 1): if (currentblob == 'empty'): currentblob = 'full' underline = sortedlines[i] left = sortedlines[i] right = sortedlines[i+1] (lefttop,leftbot) = lines[left] (righttop,rightbot) = lines[right] if (((right - left) == 1) and not((leftbot<righttop) or (rightbot<lefttop))): upperline = sortedlines[i+1] else: if ((upperline - underline) > 3): pos = (upperline + underline)/2 dif = upperline - underline if (dif > NotQuiteAsMax): if (dif > Max): posnotquiteasmax = posmax NotQuiteAsMax = Max posmax = pos Max = dif else: posnotquiteasmax = pos NotQuiteAsMax = dif currentblob = 'empty' if ((upperline - underline) > 3): pos = (upperline + underline)/2 dif = upperline - underline if (dif > NotQuiteAsMax): if (dif > Max): posnotquiteasmax = posmax NotQuiteAsMax = Max posmax = pos Max = dif else: posnotquiteasmax = pos NotQuiteAsMax = dif

#######################ALGORITHMICDIVISION####################### # return angles to the found positions tupplepart1 = None if posnotquiteasmax: tupplepart1 = calcxangle(posnotquiteasmax) + yawhead tupplepart2 = None if posmax: tupplepart2 = calcxangle(posmax) + yawhead if tupplepart1 or tupplepart2: return (tupplepart2, tupplepart1) # (closest, furthest) # return the angles

Referenser ten Velthuis, Duncan (2011) Dutch Nao Team Technical Report 2011. hämtat från: www.dutchnaoteam.nl/wp- content/uploads/2011/10/technicalreport.pdf ten Velthuis, Duncan (2011) Dutch Nao Team Team Description Paper for RoboCup 2011. Hämtat från: www.dutchnaoteam.nl/wp- content/uploads/2012/01/qualificationdutchnaoteam2012.pdf Petters, Sebastian (2009) Usage of Referee / Game Controller Software in the RoboCup Humanoid League. Hämtat från: www.dribblers.de/gc/ Alderaban Robotics - http://www.aldebaran- robotics.com