22.08.2013 Views

Een robot voor de Startel RoboChallenge 2004 - Kunstmatige ...

Een robot voor de Startel RoboChallenge 2004 - Kunstmatige ...

Een robot voor de Startel RoboChallenge 2004 - Kunstmatige ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Een</strong> autonome <strong>robot</strong> <strong>voor</strong> het verzamelen van<br />

gekleur<strong>de</strong> ballen in een constante omgeving<br />

Jelle Wiersma en Paul Snij<strong>de</strong>rs<br />

<strong>Kunstmatige</strong> Intelligentie, Rijksuniversiteit Groningen<br />

j.wiersma@ai.rug.nl, p.snij<strong>de</strong>rs@ai.rug.nl<br />

Samenvatting. In dit verslag beschrijven wij onze <strong>robot</strong> JEP die <strong>de</strong> <strong>Startel</strong><br />

<strong>RoboChallenge</strong> heeft gewonnen. Het ontwerp van <strong>de</strong> <strong>robot</strong> en <strong>de</strong> software<br />

wor<strong>de</strong>n beschreven. Hiernaast wordt ook het ontwikkelingsproces wor<strong>de</strong>n<br />

beschreven.<br />

De lokalisatie van <strong>de</strong>r <strong>robot</strong> wordt gedaan met behulp van een Kalman filter. De<br />

balletjes wer<strong>de</strong>n gelokaliseerd met behulp van grid-based Markov lokalisatie.<br />

1. Introductie<br />

De uitdaging van <strong>RoboChallenge</strong> is het maken van een <strong>robot</strong> die geheel autonoom<br />

gekleur<strong>de</strong> balletjes kan verzamelen. De omgeving van <strong>de</strong> <strong>robot</strong> was heel erg dui<strong>de</strong>lijk<br />

afgebakend. De <strong>robot</strong> rijdt rond in een veld van 8 bij 5 meter. <strong>Een</strong> meter rond het veld<br />

bevindt zich een witte afbakening. De hoeken van het speelveld wor<strong>de</strong>n gemarkeerd<br />

met kleurbakens. In het veld hangen balletjes van 5 en 8 cm doorsnee met verschillen<strong>de</strong><br />

kleuren. Deze balletjes kunnen ook los op <strong>de</strong> grond liggen. Er zijn 3 verschillen<strong>de</strong><br />

missies. In missie 1 moet <strong>de</strong> <strong>robot</strong> 5 balletjes in een bepaal<strong>de</strong> volgor<strong>de</strong> verzamelen. In<br />

missie 2 moet <strong>de</strong> <strong>robot</strong> 10 balletjes zo snel mogelijk verzamelen. In missie 3 zullen er<br />

meer<strong>de</strong>re <strong>robot</strong>s tegelijkertijd het speelveld in gaan. Elke <strong>robot</strong> moet dan <strong>voor</strong> zichzelf<br />

zoveel mogelijk balletjes zien te pakken. Er hangen bij <strong>de</strong>ze missie 35 balletjes in het<br />

veld.<br />

Wij hebben als klein project <strong>voor</strong> onze studie <strong>Kunstmatige</strong> Intelligentie aan <strong>de</strong><br />

Rijksuniversiteit Groningen meegedaan aan <strong>de</strong>ze wedstrijd begeleid door Gert Kootstra.<br />

1


2. De <strong>robot</strong><br />

Als basis <strong>voor</strong> <strong>de</strong> <strong>robot</strong> hebben wij een Pioneer 2 van ActivMedia gebruikt met <strong>de</strong> naam<br />

Frodo. Deze <strong>robot</strong> biedt ons een stabiel platform. Frodo kan rondrij<strong>de</strong>n. Frodo kan zijn<br />

omgeving waarnemen door mid<strong>de</strong>l van afstandssensoren (ultra sonar) en een camera.<br />

Frodo kan bijhou<strong>de</strong>n hoeveel hij rondrijdt (odometrie). Op <strong>de</strong> <strong>robot</strong> bevindt zich een<br />

computer.<br />

Bovenop Frodo hebben wij een houten constructie gebouwd dat hem veran<strong>de</strong>rt in JEP<br />

en hem in staat stelt om <strong>de</strong> balletjes te pakken. Wij hebben gekozen <strong>voor</strong> een geheel<br />

passieve metho<strong>de</strong> van het balletjes pakken. Dit is <strong>de</strong> meest eenvoudige en meest<br />

robuuste manier van balletjes pakken. De constructie had aan <strong>de</strong> bovenkant een Vvorm.<br />

De touwtjes waaraan <strong>de</strong> balletjes hingen kwamen hierin als <strong>de</strong> <strong>robot</strong> er op af reed.<br />

Uitein<strong>de</strong>lijk werd het balletje door het bewegen van <strong>de</strong> <strong>robot</strong> omhoog getrokken en van<br />

het magneetje getrokken waaraan hij hing. De bal viel hierna in een reservoir op <strong>de</strong><br />

<strong>robot</strong>. In <strong>de</strong> V-vorm bevond zich een één richting systeem, gemaakt van 2 rietjes om te<br />

<strong>voor</strong>komen dat touwtjes eenmaal in <strong>de</strong> V-vorm er niet uit kon<strong>de</strong>n slingeren als <strong>de</strong> <strong>robot</strong><br />

zich omdraai<strong>de</strong>.<br />

Voor <strong>de</strong> balletjes die op <strong>de</strong> grond lagen had <strong>de</strong> <strong>robot</strong> een soort sneeuwschep met hierop<br />

dubbelzijdig plakband aangebracht. <strong>Een</strong> balletje dat eenmaal in contact was met het<br />

plakband kon er onmogelijk door het rij<strong>de</strong>n van <strong>de</strong> <strong>robot</strong> weer loskomen.<br />

2


3. De software<br />

De beschrijving van <strong>de</strong> software splitsen we op in 2 stukken: De software die we<br />

aanvankelijk geschreven hebben (en die wetenschappelijk gezien het meest interessant<br />

is) en <strong>de</strong> software die we <strong>voor</strong> <strong>de</strong> wedstrijd hebben gebruikt. Aanvankelijk hebben we<br />

een versie bestaan<strong>de</strong> uit een beeldherkenning, lokalisatie en navigatie module. Toen<br />

<strong>de</strong>ze versie enige tijd <strong>voor</strong> <strong>de</strong> wedstrijd nog steeds niet optimaal in <strong>de</strong> praktijk bleek te<br />

functioneren zijn we overgestapt op een simpelere, doelgerichtere versie van het<br />

programma. De beeldherkenning algoritmes die we hierbij gebruikt hebben zijn wel<br />

groten<strong>de</strong>els hetzelf<strong>de</strong> gebleven.<br />

3. 1 Beeldherkenning<br />

Onze <strong>robot</strong> JEP is <strong>voor</strong>zien van een camera die een beeld doorgeeft van 160 x 120<br />

pixels. Voor het herkennen van <strong>de</strong> verschillen<strong>de</strong> ballen en bakens is het belangrijk dat<br />

<strong>de</strong> <strong>de</strong>sbetreffen<strong>de</strong> kleur goed herkend wordt. De bakens had<strong>de</strong>n <strong>de</strong> kleuren groen,<br />

blauw, rood en geel. De balletjes waren er in <strong>de</strong> kleuren roze, geel, groen, zwart en<br />

zwart-geel. Voor het bepalen van <strong>de</strong> kleurenfilters die bij elke kleur horen hebben we<br />

nog een apart programma geschreven. Hiermee kunnen we <strong>de</strong> rood-, groen- en<br />

blauwwaar<strong>de</strong>n (rgb) bepalen die horen bij pixels die een bal weergeven. We hebben<br />

aanvankelijk met hsi-waar<strong>de</strong>n gewerkt (hue, saturation & intensity), omdat <strong>de</strong>ze<br />

waar<strong>de</strong>n als grote <strong>voor</strong><strong>de</strong>lige eigenschap hebben behoorlijk kleurconsistent te zijn,<br />

d.w.z. goed bestand tegen verschillen<strong>de</strong> lichtintensiteiten. Uitein<strong>de</strong>lijk hebben we toch<br />

<strong>voor</strong> rgb gekozen, omdat we ten eerste op <strong>de</strong> plek van <strong>de</strong> wedstrijd met een constante<br />

lichtsterkte te maken had<strong>de</strong>n. Ten twee<strong>de</strong> komt er naar onze mening met rgb een beter<br />

on<strong>de</strong>rscheid naar voren tussen <strong>de</strong> kleuren van <strong>de</strong> balletjes en bakens die gebruikt<br />

wer<strong>de</strong>n. Ver<strong>de</strong>r hebben we ook nog in acht genomen dat <strong>de</strong> conversie van rgb- naar hsiwaar<strong>de</strong>n<br />

ook rekenkracht in beslag neemt, en aangezien <strong>de</strong>ze operatie behoorlijk vaak<br />

uitgevoerd moet wor<strong>de</strong>n, hebben we er<strong>voor</strong> gekozen om rgb-waar<strong>de</strong>n te gebruiken.<br />

Kleurenfilter<br />

Voor het vastleggen van <strong>de</strong> rgb-waar<strong>de</strong>n van <strong>de</strong> balletjes hebben we een extra<br />

programma geschreven. Dit werkt als volgt: Er kan een ge<strong>de</strong>elte van het camerabeeld<br />

geselecteerd wor<strong>de</strong>n met een rechthoek. Van alle pixels die binnen dit rechthoek vallen<br />

wor<strong>de</strong>n <strong>de</strong> maximale en minimale r, g en b-waar<strong>de</strong>n onthou<strong>de</strong>n. Door een bal van een<br />

bepaal<strong>de</strong> kleur vlak <strong>voor</strong> <strong>de</strong> camera te leggen, en het rechthoek goed op <strong>de</strong> afbeelding<br />

van <strong>de</strong> bal te plaatsen, kunnen we het kleurfilter <strong>voor</strong> <strong>de</strong>ze bal bepalen. Hierbij zorgen<br />

we er zelf <strong>voor</strong> dat er geen uitschieters binnen het rechthoek komen te liggen.<br />

Bij<strong>voor</strong>beeld wanneer er een groot aantal pixels dat ook buiten het rechthoek ligt<br />

meegenomen wordt, is dit een indicatie dat er een uitschieter binnen <strong>de</strong> filtergrenzen zit,<br />

en zal <strong>de</strong> plaats en/of grootte van het rechthoek aangepast moeten wor<strong>de</strong>n.<br />

3


Herkenning van <strong>de</strong> bakens<br />

Voor alle nu volgen<strong>de</strong> algoritmes zijn we er vanuit gegaan dat <strong>de</strong> bakens rechtop staan.<br />

Later is dit veran<strong>de</strong>rd want in <strong>de</strong> wedstrijd waren <strong>de</strong> bakens een kwartslag gedraaid.<br />

Voor het juist bepalen van <strong>de</strong> plaats en oriëntatie van bakens is het van belang dat een<br />

aantal eigenschappen van het baken dat in beeld is bepaald kunnen wor<strong>de</strong>n, te weten:<br />

1. Kleur<br />

Het bepalen van <strong>de</strong> kleur was nodig om te weten met welk baken we te maken<br />

had<strong>de</strong>n. Geel stond in het noordwesten, groen in het zuidwesten, rood in het<br />

noordoosten en blauw in het zuidoosten.<br />

2. Afstand tot <strong>de</strong> <strong>robot</strong><br />

Het baken komt als een rechthoek op het camerabeeld terecht. De hoogte van dit<br />

rechthoek is een maat <strong>voor</strong> <strong>de</strong> afstand tussen <strong>de</strong> <strong>robot</strong> en het baken. Door te testen<br />

en te meten hebben we een lineaire formule gevon<strong>de</strong>n tussen <strong>de</strong>ze hoogte en <strong>de</strong><br />

afstand. De formule ziet er als volgt uit:<br />

D = 50 ⋅100<br />

h<br />

D = geschatte afstand tussen camera en baken.<br />

h = hoogte van het frame op het camerabeeld.<br />

3. Hoek t.o.v. <strong>de</strong> <strong>robot</strong><br />

Wanneer <strong>de</strong> <strong>robot</strong> in een bepaal<strong>de</strong> hoek t.o.v. een baken staat, komt dit baken als<br />

een smallere rechthoek op het camerabeeld terecht. De verhouding tussen lengte en<br />

breedte van dit rechthoek is bepalend <strong>voor</strong> <strong>de</strong> hoek tussen <strong>de</strong> <strong>robot</strong> en <strong>de</strong> loodlijn op<br />

het baken. Zie figuur 1.<br />

⎛ ⎞<br />

−<br />

= cos<br />

⎜ ⎟<br />

⎜ 21⋅<br />

⎟<br />

⎝ 30 ⎠<br />

1 b<br />

ϕ<br />

h<br />

φ = loodhoek tussen <strong>robot</strong> en baken.<br />

b = breedte van het frame.<br />

h = hoogte van het frame.<br />

Uitleg: het baken is in werkelijkheid 30x21 cm groot, <strong>de</strong> afmetingen van een A4’tje.<br />

Wanneer <strong>de</strong> <strong>robot</strong> er precies recht <strong>voor</strong> staat is <strong>de</strong> loodhoek 0. Elke an<strong>de</strong>re hoek<br />

wordt door bovenstaan<strong>de</strong> formule beschreven. Zie Figuur 1.<br />

4


Figuur 1: <strong>de</strong> loodhoek tussen <strong>de</strong> <strong>robot</strong> en het baken.<br />

4. Plaats van het baken in beeld<br />

Het baken in het camerabeeld heeft een bepaal<strong>de</strong> afstand tot het mid<strong>de</strong>n van het<br />

beeld. Deze afstand is me<strong>de</strong> bepalend <strong>voor</strong> <strong>de</strong> lokalisatie van het baken, en wordt<br />

door ons <strong>de</strong> camerahoek genoemd. Voor het bepalen van <strong>de</strong> camerahoek bekijken<br />

we het aantal pixels tussen het mid<strong>de</strong>n van het baken en het mid<strong>de</strong>n van het<br />

camerabeeld. De grootte van het baken is bekend (30 x 21 cm), en het aantal pixels<br />

dat dit in beslag neemt ook, dus kan er een reële afstand wor<strong>de</strong>n berekend tussen<br />

baken en virtueel mid<strong>de</strong>lpunt van het camerabeeld.<br />

Figuur 2: Schematische weergave van een camerabeeld met daarin het beeld van<br />

een baken als kleine rechthoek weergegeven.<br />

5. Zichtbaarheid<br />

Hiernaast is het van belang om te weten in hoeverre het baken in kwestie zichtbaar<br />

is. Als dit bij<strong>voor</strong>beeld ge<strong>de</strong>eltelijk buiten beeld valt, dan is er ver<strong>de</strong>r geen<br />

berekening van afstand en loodhoek mogelijk. We maken on<strong>de</strong>rscheid tussen een<br />

5


geheel zichtbaar baken, een baken waarvan alleen <strong>de</strong> bovenkant mist (het baken<br />

staat dan volgens metingen dichterbij dan 1 meter) en een baken dat een zijkant<br />

en/of bovenkant mist.<br />

Het schatten van <strong>de</strong> positie van <strong>de</strong> <strong>robot</strong> met behulp van een baken<br />

Nadat een baken is herkend kan <strong>de</strong> positie van <strong>de</strong> <strong>robot</strong> berekend wor<strong>de</strong>n. Hier<strong>voor</strong> is<br />

het nodig dat je <strong>de</strong> plaats van het baken weet, <strong>de</strong> afstand tot het baken, <strong>de</strong> hoek tussen<br />

<strong>de</strong> <strong>robot</strong> en <strong>de</strong> loodlijn op het baken en ten slotte <strong>de</strong> hoek tussen het baken en <strong>de</strong> <strong>robot</strong>.<br />

In figuur 3 staat een <strong>voor</strong>beeld. Hier ziet <strong>de</strong> <strong>robot</strong> het groene baken op een bepaal<strong>de</strong><br />

afstand l, met een bepaal<strong>de</strong> loodhoek a en met een camerahoek b. De <strong>robot</strong> weet niet of<br />

<strong>de</strong> loodhoek <strong>de</strong> ene of <strong>de</strong> an<strong>de</strong>re kant op staat. Daardoor zijn er 2 mogelijke posities van<br />

<strong>de</strong> <strong>robot</strong>. Deze kunnen met <strong>de</strong> volgen<strong>de</strong> formules wor<strong>de</strong>n uitgerekend:<br />

x = xbaken + D * cos(φbaken +/- φloodhoek )<br />

y = ybaken + D * sin(φbaken +/- φloodhoek )<br />

x,y = positie <strong>robot</strong>.<br />

φloodhoek = loodhoek tussen <strong>robot</strong> en baken (a in figuur 3).<br />

φbaken = hoek waaron<strong>de</strong>r het bak staat.<br />

D = <strong>de</strong> afstand van <strong>de</strong> <strong>robot</strong> tot het baken.<br />

x,ybaken = De positie van het baken.<br />

Figuur 3: weergave van het speelveld met <strong>robot</strong> en bakens.<br />

Herkenning van <strong>de</strong> balletjes<br />

Voor <strong>de</strong> i<strong>de</strong>ntificatie van <strong>de</strong> balletjes wordt het hele scherm on<strong>de</strong>r <strong>de</strong> bovenkant van <strong>de</strong><br />

boarding doorzocht naar pixels van <strong>de</strong> goe<strong>de</strong> kleur. De grootste concentratie van pixels<br />

met <strong>de</strong> goe<strong>de</strong> kleur is <strong>de</strong> bal. Voor <strong>de</strong> zwarte bal hanteren we nog een extra regel: <strong>de</strong><br />

achtergrond van <strong>de</strong>ze bal moet <strong>de</strong> kleur van <strong>de</strong> boarding hebben.<br />

De hoek en afstand van <strong>de</strong> balletjes wor<strong>de</strong>n op <strong>de</strong>zelf<strong>de</strong> manier uitgerekend als bij <strong>de</strong><br />

bakens.<br />

6


3.2 Lokalisatie<br />

Drie verschillen<strong>de</strong> lokalisatiemetho<strong>de</strong>n<br />

Voor <strong>de</strong> wedstrijd is het nodig om een aantal elementen te lokaliseren. Ten eerste<br />

wil<strong>de</strong>n we <strong>de</strong> positie van <strong>de</strong> <strong>robot</strong> weten en ten twee<strong>de</strong> wil<strong>de</strong>n we <strong>de</strong> positie van <strong>de</strong><br />

balletjes weten. Hier<strong>voor</strong> hebben we naar 3 verschillen<strong>de</strong> lokalisatiemetho<strong>de</strong>n gekeken,<br />

Monte Carlo lokalisatie, grid-based Markov lokalisatie en een Kalman filter.<br />

Monte Carlo lokalisatie:<br />

Met het Monte Carlo lokalisatiealgoritme neem je een aantal willekeurige posities waar<br />

<strong>de</strong> <strong>robot</strong> kan zijn. Voor elke positie reken je dan uit wat <strong>de</strong> kans is dat <strong>de</strong> <strong>robot</strong> daar<br />

daadwerkelijk staat aan <strong>de</strong> hand van waarnemingen. <strong>Een</strong> tijdstap later neem je <strong>de</strong><br />

posities die een hoge waarschijnlijkheid had<strong>de</strong>n. Deze posities verplaats je volgens het<br />

beweging en sensor mo<strong>de</strong>l. Rondom <strong>de</strong>ze nieuwe posities neem je een aantal<br />

willekeurige posities.<br />

Op <strong>de</strong>ze manier krijg je een puntenwolk die zich rondom <strong>de</strong> <strong>robot</strong> <strong>voor</strong>beweegt. Als <strong>de</strong><br />

positie van <strong>de</strong> <strong>robot</strong> aan <strong>de</strong> hand van <strong>de</strong> waarnemingen nauwkeuriger bekend is zal<br />

<strong>de</strong>ze puntenwolk compact zijn. Als <strong>de</strong> waarnemingen niet goed in overeenstemming zijn<br />

met <strong>de</strong> locatie van <strong>de</strong> puntenwolk zal <strong>de</strong> puntenwolk een groter gebied gaan bestrijken<br />

en eventueel zelfs verplaatsen.<br />

Dit is een robuust algoritme waar een beperkte rekentijd <strong>voor</strong> nodig is. Dit algoritme kan<br />

het ‘kidnapped <strong>robot</strong> problem’ oplossen. Dit ‘kidnapped <strong>robot</strong> problem’ houdt in dat<br />

iemand <strong>de</strong> <strong>robot</strong> optilt en op een willekeurige plaats weer neerzet. De <strong>robot</strong> is dus<br />

opeens verplaatst maar heeft hier zelf geen weet van. Meer informatie over het Monte<br />

Carlo algoritme is te vin<strong>de</strong>n in [2,3,5].<br />

Grid-based Markov lokalisatie:<br />

Bij het grid-based Markov lokalisatiealgoritme <strong>de</strong>el je <strong>de</strong> wereld op in een rooster. Elk<br />

vakje op dit rooster (cel) staat <strong>voor</strong> een bepaald gebied in <strong>de</strong> buitenwereld. Met elke<br />

waarneming kun je dan opnieuw berekenen wat <strong>de</strong> kans is dat <strong>de</strong> <strong>robot</strong> in elk gebied<br />

staat.<br />

Dit algoritme heeft als na<strong>de</strong>el dat <strong>de</strong> positie van <strong>de</strong> <strong>robot</strong> discreet is en niet continu.<br />

Hierdoor is het moeilijk <strong>de</strong> odometriewaarnemingen te verwerken. Wanneer je een hoge<br />

positienauwkeurigheid nastreeft kost dit algoritme veel rekentijd. Dit algoritme kan ook<br />

het ‘kidnapped <strong>robot</strong> problem’ oplossen. Meer informatie hierover in [5].<br />

Kalman filter:<br />

<strong>Een</strong> kalman filter representeert <strong>de</strong> positie van <strong>de</strong> <strong>robot</strong> als een normale ver<strong>de</strong>ling. De<br />

variantie van <strong>de</strong>ze normale ver<strong>de</strong>ling is omgekeerd evenredig hoe zeker je bent dat <strong>de</strong><br />

<strong>robot</strong> hier daadwerkelijk staat. <strong>Een</strong> nieuwe schatting aan <strong>de</strong> hand van een observatie uit<br />

<strong>de</strong> buitenwereld kan je representeren als een an<strong>de</strong>re normale ver<strong>de</strong>ling.<br />

Deze twee normale ver<strong>de</strong>lingen kun je vervolgens samenvoegen met behulp van Bayes’<br />

procedure <strong>voor</strong> multivariate normale ver<strong>de</strong>lingen. Hierdoor ontstaat een nieuwe normale<br />

ver<strong>de</strong>ling die <strong>de</strong> positie van <strong>de</strong> <strong>robot</strong> representeert. Deze ver<strong>de</strong>ling heeft een kleinere<br />

variantie en een grotere zekerheid dan <strong>de</strong> vorige normale ver<strong>de</strong>lingen. Dit algoritme<br />

heeft meer moeite met het ‘kidnapped <strong>robot</strong> problem’. Meer hierover in [5,6].<br />

Voor <strong>de</strong> lokalisatie van <strong>de</strong> <strong>robot</strong> hebben we besloten om het Kalman filter te gebruiken.<br />

We weten namelijk <strong>de</strong> beginpositie van <strong>de</strong> <strong>robot</strong> en we kunnen <strong>de</strong> observaties makkelijk<br />

representeren als normale ver<strong>de</strong>lingen. Niemand raakt <strong>de</strong> <strong>robot</strong> aan tij<strong>de</strong>ns <strong>de</strong> wedstrijd<br />

dus kunnen we niet te maken krijgen met het ‘kidnapped <strong>robot</strong> problem’. Het Kalman<br />

filter gebruikt verreweg <strong>de</strong> minste rekentijd dus hou<strong>de</strong>n we meer rekentijd over <strong>voor</strong> <strong>de</strong><br />

7


an<strong>de</strong>re taken. We hebben hierbij aangenomen dat <strong>de</strong> variantie van <strong>de</strong> positie van <strong>de</strong><br />

<strong>robot</strong> in <strong>de</strong> x richting en in <strong>de</strong> y richting gelijk is en dat <strong>de</strong> variantie correlatie tussen <strong>de</strong> x,<br />

y en hoek van <strong>de</strong> <strong>robot</strong> nul is. De covariantie matrix is dus een diagonaal matrix.<br />

Hierdoor zijn <strong>de</strong> berekeningen een stuk eenvoudiger. Er wordt echter ook<br />

nauwkeurigheid ingeleverd. Deze extra nauwkeurigheid is echter niet nodig <strong>voor</strong> onze<br />

taak.<br />

Voor <strong>de</strong> lokalisatie van <strong>de</strong> balletjes hebben we besloten het grid-based Markov<br />

lokalisatiealgoritme te gebruiken. Dit algoritme kan als enige niet alleen representeren<br />

waar <strong>de</strong> balletjes wel zijn, maar ook waar <strong>de</strong> balletjes niet zijn. Hierdoor is het eenvoudig<br />

om <strong>de</strong> <strong>robot</strong> naar <strong>de</strong> plek te laten rij<strong>de</strong>n waar het balletje waarschijnlijk wel is als <strong>de</strong><br />

waarschijnlijkheid dat <strong>de</strong> balletjes op <strong>de</strong> an<strong>de</strong>re plekken klein is. Voor <strong>de</strong> balletjes<br />

gebruikt dit algoritme geen te grote rekentijd. De positie van <strong>de</strong> balletjes hoeft namelijk<br />

niet erg nauwkeurig te zijn. Daarnaast hebben <strong>de</strong> positie van <strong>de</strong> balletjes geen hoek<br />

component maar slechts een x en een y waar<strong>de</strong>. Hierdoor is <strong>de</strong> zoekruimte niet 3dimensionaal<br />

maar 2-dimensionaal.<br />

Het kalman filter <strong>voor</strong> <strong>de</strong> lokalisatie van <strong>de</strong> <strong>robot</strong><br />

Bij het Kalman filter moet je 2 normale ver<strong>de</strong>lingen samen laten smelten. Hier<strong>voor</strong><br />

hebben wij <strong>de</strong> Bayes-procedure <strong>voor</strong> multivariate normale ver<strong>de</strong>lingen gebruikt [7].<br />

Hierbij zijn wij ervan uitgegaan dat er geen correlatie is tussen <strong>de</strong> varianties, dus <strong>de</strong><br />

variantiematrix is een diagonaalmatrix. Ver<strong>de</strong>r zijn we ervan uitgegaan dat <strong>de</strong> variantie<br />

in <strong>de</strong> x en y richting gelijk is.<br />

Zodoen<strong>de</strong> hebben we <strong>de</strong> volgen<strong>de</strong> formules gebruikt om <strong>de</strong> normale ver<strong>de</strong>lingen samen<br />

te voegen.<br />

Met:<br />

X<br />

Y<br />

Sxy<br />

Sxy<br />

= +<br />

S ⋅ x S ⋅ x<br />

xy1<br />

xy1<br />

1<br />

1<br />

xy2<br />

Sxy<br />

Sxy<br />

= +<br />

S ⋅ y S ⋅ y<br />

ϕ1<br />

1<br />

xy2<br />

Sϕ<br />

Sϕ<br />

ϕ = +<br />

S ⋅ϕ<br />

S ⋅ϕ<br />

S<br />

S<br />

ϕ<br />

xy<br />

=<br />

=<br />

1<br />

S<br />

1<br />

S<br />

ϕ1<br />

Sxy1 = Variantie van normale ver<strong>de</strong>ling 1 in <strong>de</strong> x en <strong>de</strong> y richting, <strong>de</strong> positie waar <strong>de</strong><br />

<strong>robot</strong> <strong>de</strong>nk dat hij is.<br />

Sxy2 = Variantie van normale ver<strong>de</strong>ling 2 in <strong>de</strong> x en <strong>de</strong> y richting, <strong>de</strong> positie waar <strong>de</strong><br />

<strong>robot</strong> aan <strong>de</strong> hand van <strong>de</strong> observatie zou moeten zijn.<br />

xy1<br />

1<br />

+<br />

ϕ 2<br />

1<br />

+<br />

1<br />

S<br />

2<br />

1<br />

S<br />

ϕ 2<br />

2<br />

2<br />

xy2<br />

8


Sφ1 = Variantie in <strong>de</strong> hoek van normale ver<strong>de</strong>ling 1.<br />

Sφ2 = Variantie in <strong>de</strong> hoek van normale ver<strong>de</strong>ling 2.<br />

X1,x2,y1,y2,φ1,φ2 = x/y/hoek positie van normale ver<strong>de</strong>ling 1 of 2.<br />

Figuur 4: Grafische weergave van het Kalman filter.<br />

De normale ver<strong>de</strong>ling 1 is <strong>de</strong> positie waar <strong>de</strong> <strong>robot</strong> <strong>de</strong>nkt dat hij is. Deze bevat naast een<br />

x, y en hoek component varianties <strong>voor</strong> <strong>de</strong> x, <strong>de</strong> y en <strong>de</strong> hoek. Als <strong>de</strong> <strong>robot</strong> rondrijdt<br />

wordt <strong>de</strong>ze normale ver<strong>de</strong>ling aangepast aan <strong>de</strong> odometrie van <strong>de</strong> <strong>robot</strong>. Dat gebeurt<br />

m.b.v. <strong>de</strong> volgen<strong>de</strong> formules:<br />

Met:<br />

X = rx<br />

+ ∆a<br />

⋅sin(<strong>de</strong>g2rad(<br />

90 + ϕr<br />

))<br />

Y = ry<br />

+ ∆a<br />

⋅ sin(<strong>de</strong>g2rad( ϕr<br />

))<br />

= ϕ ϕ<br />

( h)<br />

% 360 ∆ +<br />

∆a = √(∆x 2 +∆y 2 )= afgeleg<strong>de</strong> afstand door <strong>de</strong> <strong>robot</strong><br />

∆x = afgeleg<strong>de</strong> afstand door <strong>de</strong> <strong>robot</strong> in <strong>de</strong> x as<br />

∆y = afgeleg<strong>de</strong> afstand door <strong>de</strong> <strong>robot</strong> in <strong>de</strong> y as<br />

∆h = afgeleg<strong>de</strong> hoek door <strong>de</strong> <strong>robot</strong><br />

φr = hoek van <strong>de</strong> <strong>robot</strong><br />

rx = x-positie van <strong>de</strong> <strong>robot</strong><br />

ry = y-positie van <strong>de</strong> <strong>robot</strong><br />

r<br />

Als <strong>de</strong> <strong>robot</strong> achteruit rijdt moet ∆a negatief wor<strong>de</strong>n. De variantie van <strong>de</strong> hoek en van <strong>de</strong><br />

x en <strong>de</strong> y wordt lineair groter met <strong>de</strong> afstand die <strong>de</strong> <strong>robot</strong> heeft afgelegd.<br />

9


Met:<br />

σXY = σXY + |∆x+∆y|*c1 + |∆h|*c2<br />

σhoek = σhoek + |∆x+∆y|*c3 + |∆h|*c4<br />

c1 = constante, correlatie tussen afgeleg<strong>de</strong> afstand en gemid<strong>de</strong>l<strong>de</strong> fout xy<br />

c2 = constante, correlatie tussen gedraai<strong>de</strong> hoek en gemid<strong>de</strong>l<strong>de</strong> fout xy<br />

c3 = constante, correlatie tussen afgeleg<strong>de</strong> afstand en gemid<strong>de</strong>l<strong>de</strong> fout hoek<br />

c4 = constante, correlatie tussen afgeleg<strong>de</strong> hoek en gemid<strong>de</strong>l<strong>de</strong> fout hoek<br />

Om <strong>de</strong>ze constanten te vin<strong>de</strong>n hebben we een testje gedaan. We hebben <strong>de</strong> <strong>robot</strong> 10<br />

meter heen en weer laten rij<strong>de</strong>n. Na <strong>de</strong>ze 10 meter hebben we gemeten wat het verschil<br />

is tussen waar <strong>de</strong> <strong>robot</strong> dacht dat hij stond en waar hij werkelijk stond. Deze 10 meter<br />

reed <strong>de</strong> <strong>robot</strong> een parcours tussen <strong>de</strong> posities (0,0) (1000,0) (-1000,0) en (0,0). Al <strong>de</strong>ze<br />

waar<strong>de</strong>n zijn in millimeters. Nadat er 10 meter was afgelegd reed <strong>de</strong> <strong>robot</strong> door tot hij<br />

weer ongeveer op positie (0,0) stond. Hierdoor reed <strong>de</strong> <strong>robot</strong> altijd iets ver<strong>de</strong>r dan <strong>de</strong> 10<br />

meter. De <strong>robot</strong> reed rond met behulp van <strong>de</strong> in §3.3 beschreven navigatiemodule met<br />

<strong>de</strong> parameters maxspeed=100 en maxturnspeed=100.<br />

Dit levert <strong>de</strong> volgen<strong>de</strong> tabel op:<br />

meting ∆x (mm) ∆y (mm) ∆hoek (gra<strong>de</strong>n)<br />

1 24 6 12<br />

2 30 13 5<br />

3 12 5 4<br />

4 24 14 5<br />

5 19 16 4<br />

6 55 45 13<br />

7 85 2 3<br />

8 46 11 6<br />

9 41 7 5<br />

10 39 6 4<br />

gemid<strong>de</strong>l<strong>de</strong> 37,5 12,5 6,1<br />

Tabel 1: afwijking tussen odometrie en werkelijke positie na een stuk rij<strong>de</strong>n.<br />

De <strong>robot</strong> leg<strong>de</strong> gemid<strong>de</strong>ld een afstand af van 14005 mm en draai<strong>de</strong> 5981 gra<strong>de</strong>n. Deze<br />

waar<strong>de</strong>n zijn <strong>de</strong> som van <strong>de</strong> veran<strong>de</strong>ringen van <strong>de</strong> odometriewaar<strong>de</strong>n van <strong>de</strong> <strong>robot</strong>.<br />

Deze metingen zijn waarschijnlijk iets aan <strong>de</strong> hoge kant uitgevallen. Als <strong>de</strong> <strong>robot</strong><br />

bij<strong>voor</strong>beeld rechtuit rijdt on<strong>de</strong>r een hoek van ongeveer 10,5 gra<strong>de</strong>n dan zal hij <strong>de</strong> ene<br />

keer 10 en <strong>de</strong> an<strong>de</strong>re keer 11 gra<strong>de</strong>n doorgeven. Dit wordt dan gezien als steeds een<br />

draaiing van 1 gra<strong>de</strong>n waardoor <strong>de</strong> <strong>robot</strong> veel meer lijkt te draaien dan dat hij eigenlijk<br />

doet.<br />

Met <strong>de</strong>ze waar<strong>de</strong>n kunnen <strong>de</strong> constanten c1,c2,c3 en c4 wor<strong>de</strong>n uitgerekend.<br />

c1: Per millimeter rij<strong>de</strong>n zal <strong>de</strong> <strong>robot</strong> er (37,5+12,5)/14005=0,00357 mm naast zitten.<br />

c2: Per gra<strong>de</strong>n draaien zal <strong>de</strong> <strong>robot</strong> er (37,5+12,5)/5981=0.00836 mm naast zitten.<br />

c3: Per millimeter rij<strong>de</strong>n zal <strong>de</strong> <strong>robot</strong> er 6,1/14005=0,000436 gra<strong>de</strong>n naast zitten.<br />

c4: Per gra<strong>de</strong>n draaien zal <strong>de</strong> <strong>robot</strong> er 6,1/5981=0,00102 gra<strong>de</strong>n naast zitten.<br />

Het is nu <strong>de</strong> vraag hoeveel <strong>de</strong> draaiing en het rij<strong>de</strong>n zal bijdragen aan <strong>de</strong> variantie.<br />

Mogelijk zal <strong>de</strong> afwijking in <strong>de</strong> wedstrijd iets hoger zijn, door bij<strong>voor</strong>beeld een an<strong>de</strong>re<br />

maxspeed. Het is ook mogelijk dat in <strong>de</strong> testopstelling veel van <strong>de</strong> afwijking <strong>de</strong> ene kant<br />

op is gecompenseerd <strong>voor</strong> afwijking <strong>de</strong> an<strong>de</strong>re kant op waardoor <strong>de</strong> uitkomst van <strong>de</strong><br />

10


afwijking te laag is. Daarom hebben we gezegd dat <strong>de</strong> draaiing en het rij<strong>de</strong>n bei<strong>de</strong> het<br />

gewicht 1 krijgen waardoor <strong>de</strong> variantie 2 keer zo groot zal uitvallen als we volgens <strong>de</strong>ze<br />

metingen zou<strong>de</strong>n verwachten. Hierdoor zal <strong>de</strong> zekerheid van <strong>de</strong> <strong>robot</strong> sneller afnemen<br />

waardoor er min<strong>de</strong>r vertrouwd wordt op <strong>de</strong> odometrie.<br />

De grid-based Markov lokalisatie metho<strong>de</strong> <strong>voor</strong> <strong>de</strong> balletjes<br />

Voor <strong>de</strong> lokalisatie van <strong>de</strong> balletjes hebben we een raster gemaakt. Op dit raster<br />

representeert elke waar<strong>de</strong> <strong>de</strong> kans dat het balletje zich bevindt binnen een bepaald<br />

gebied op het speelveld (cel). De som van alle kansen is zodoen<strong>de</strong> gelijk aan 1.<br />

Met elke observatie wordt <strong>voor</strong> elk vakje opnieuw uitgerekend wat <strong>de</strong> kans is dat het<br />

balletje zich hier bevindt.<br />

Als het balletje niet zichtbaar is dan wordt <strong>de</strong> kans dat <strong>de</strong> ster zich bevindt in <strong>de</strong><br />

zichtbare cellen kleiner. Hoe dichter <strong>de</strong> cel bij <strong>de</strong> <strong>robot</strong> is, hoe beter zichtbaar dus hoe<br />

meer <strong>de</strong> kans dat het balletje zich hier bevindt kleiner wordt. Hier<strong>voor</strong> gebruiken wij <strong>de</strong><br />

volgen<strong>de</strong> formule:<br />

Met:<br />

⎛ d ⎞<br />

p ( x,<br />

y)<br />

= p(<br />

x,<br />

y)<br />

⋅ ( η<br />

⎜<br />

⎟ + ) +<br />

⎝ dmax<br />

⎠<br />

( 1−<br />

η)<br />

ε<br />

p(x,y) = kans dat het balletje zich in cel x, y bevindt<br />

d = afstand tussen <strong>de</strong> <strong>robot</strong> en <strong>de</strong> cel<br />

dmax = maximale afstand waarop <strong>de</strong> <strong>robot</strong> een balletje kan on<strong>de</strong>rschei<strong>de</strong>n<br />

η = snelheid waarmee <strong>de</strong> kansen zich aanpassen.<br />

ε = constante die er<strong>voor</strong> zorgt dat een kans niet <strong>voor</strong> altijd 0 kan wor<strong>de</strong>n en zich<br />

zodoen<strong>de</strong> nooit meer kan aanpassen.<br />

Deze formule gebruiken we <strong>voor</strong> alle zichtbare cellen. De kans van <strong>de</strong> niet zichtbare<br />

cellen veran<strong>de</strong>r<strong>de</strong> niet.<br />

Als <strong>de</strong> ster wel zichtbaar is wordt <strong>de</strong> kans van <strong>de</strong> cellen die in <strong>de</strong> buurt van <strong>de</strong> ster<br />

liggen groter en van <strong>de</strong> an<strong>de</strong>re cellen kleiner. Dit gebeurt met behulp van twee normale<br />

ver<strong>de</strong>lingen. De één gaat over <strong>de</strong> afwijking van <strong>de</strong> cel tot <strong>de</strong> verwachte plek van het<br />

balletje in afstand en <strong>de</strong> an<strong>de</strong>re normale ver<strong>de</strong>ling gaat over <strong>de</strong> afwijking in hoek van <strong>de</strong><br />

cel tot <strong>de</strong> ster.<br />

Hier gebruiken we <strong>de</strong> volgen<strong>de</strong> formule:<br />

Met:<br />

p ( x,<br />

y)<br />

= p(<br />

x,<br />

y)<br />

⋅ ( n1⋅<br />

n2<br />

⋅ c1<br />

+ c2)<br />

+ ε<br />

p(x,y) = kans dat het balletje zich in cel x,y bevindt.<br />

n 1 =<br />

σ<br />

ϕ<br />

1<br />

⋅ e<br />

2π<br />

σφ = variantie van <strong>de</strong> herkenning van het balletje in <strong>de</strong> hoek<br />

xφ = verschil in hoek tot geschatte plaats balletje en <strong>de</strong> hoek tot <strong>de</strong> plaats van <strong>de</strong> cel.<br />

⎛<br />

⎜<br />

− x<br />

⎜<br />

⎝ 2σ<br />

2<br />

ϕ<br />

2<br />

ϕ<br />

⎞<br />

⎟<br />

⎟<br />

⎠<br />

11


n2<br />

=<br />

σ<br />

d<br />

1<br />

⋅ e<br />

2π<br />

σd = variantie van <strong>de</strong> herkenning van het balletje in <strong>de</strong> afstand tussen <strong>de</strong> cel en <strong>de</strong><br />

geschatte plaats van het balletje<br />

xd = afstand tussen <strong>de</strong> geschatte plaats balletje en <strong>de</strong> plaats van <strong>de</strong> cel.<br />

c1 = constante, <strong>de</strong> meeste uitkomsten van een normaalver<strong>de</strong>ling zijn heel erg klein.<br />

daardoor zou<strong>de</strong>n te veel cellen opeens een veelte kleine waar<strong>de</strong> krijgen door een foute<br />

meting. wij gebruiken 3.<br />

c2 = constante <strong>voor</strong> <strong>de</strong>zelf<strong>de</strong> re<strong>de</strong>n. Hier gebruikten wij 1.<br />

ε= constante die er<strong>voor</strong> zorgt dat een kans niet <strong>voor</strong> altijd 0 kan wor<strong>de</strong>n en zich<br />

zodoen<strong>de</strong> nooit meer kan aanpassen, wij gebruikten 0.0001.<br />

Deze formules zijn eenvoudige schatters die <strong>de</strong> kansen ongeveer aangeven. De kansen<br />

die dit algoritme uitrekent geven slechts aan of <strong>de</strong> kans dat een balletje hier is hoger of<br />

lager is dan <strong>de</strong> an<strong>de</strong>re kansen. Om <strong>de</strong> conditionele kansen exact uit te rekenen zou een<br />

compleet beeld van <strong>de</strong> wereld moeten wor<strong>de</strong>n genereert. Dit zou heel veel rekenwerk<br />

zijn en weinig opleveren.<br />

Als <strong>de</strong>ze formules wor<strong>de</strong>n toegepast is <strong>de</strong> som van alle cellen ongelijk aan 1. Deze kan<br />

door mid<strong>de</strong>l van een normaliseerprocedure weer gelijk aan 1 wor<strong>de</strong>n gemaakt.<br />

Figuur 5, De <strong>robot</strong> heeft bij het plaatje linksboven geen balletje gezien zon<strong>de</strong>r dat hij<br />

daar<strong>voor</strong> een observatie had gedaan. Daarom is <strong>de</strong> kans dat het balletje <strong>voor</strong> hem hangt<br />

kleiner dan <strong>de</strong> kans dat het balletje achter hem hangt. Op het plaatje rechtsboven heeft<br />

<strong>de</strong> <strong>robot</strong> nogmaals <strong>de</strong>zelf<strong>de</strong> meting gedaan als linksboven.<br />

Op het plaatje linkson<strong>de</strong>r heeft <strong>de</strong> <strong>robot</strong> het balletje wel gezien zon<strong>de</strong>r dat hij daar<strong>voor</strong><br />

een observatie had gedaan. De afstand van het balletje tot <strong>de</strong> <strong>robot</strong> was hier met een<br />

zeer kleine zekerheid geschat. Op het plaatje rechtson<strong>de</strong>r heeft <strong>de</strong> <strong>robot</strong> nogmaals<br />

<strong>de</strong>zelf<strong>de</strong> meting gedaan als linkson<strong>de</strong>r. De variantie in <strong>de</strong> afstand van het balletje tot <strong>de</strong><br />

<strong>robot</strong> is hier erg groot ingesteld zodat het plaatje er niet als normale ver<strong>de</strong>ling maar als<br />

lijn uitziet<br />

⎛<br />

⎜<br />

− x<br />

⎜<br />

⎝ 2σ<br />

2<br />

d<br />

2<br />

d<br />

⎞<br />

⎟<br />

⎠<br />

12


3.3 Navigatie<br />

Voor <strong>de</strong> navigatie van <strong>de</strong> <strong>robot</strong> hebben we een module gemaakt die naar elke positie op<br />

het speelveld kan rij<strong>de</strong>n. Het draaien en <strong>voor</strong>uit rij<strong>de</strong>n ging tegelijkertijd zodat <strong>de</strong> <strong>robot</strong><br />

altijd vloeiend naar zijn doel reed.<br />

Hier<strong>voor</strong> gebruikten wij <strong>de</strong> volgen<strong>de</strong> berekeningen:<br />

Met:<br />

v r<br />

v l<br />

d<br />

= ⋅V<br />

2500<br />

d<br />

= ⋅V<br />

2500<br />

max<br />

max<br />

∆ϕ<br />

+ ⋅Vdraai<br />

180<br />

∆ϕ<br />

− ⋅Vdraai<br />

180<br />

vr = snelheid rechter wiel<br />

vl = snelheid linker wiel<br />

d = afstand tussen <strong>de</strong> rotbot en het doel<br />

Vmax = <strong>de</strong> maximale snelheid van het rij<strong>de</strong>n<br />

∆φ = verschil in hoek tussen <strong>de</strong> huidige hoek van <strong>de</strong> <strong>robot</strong> en <strong>de</strong> hoek die recht op het<br />

doel zou afrij<strong>de</strong>n.<br />

Vdraaimax= <strong>de</strong> maximale snelheid van draaien.<br />

max<br />

max<br />

13


3.4 De versimpel<strong>de</strong> versie zoals gebruikt in <strong>de</strong> wedstrijd<br />

Omdat het hierboven beschreven softwareontwerp an<strong>de</strong>rhalve week <strong>voor</strong> <strong>de</strong> wedstrijd<br />

een aantal fouten bevatte en nog niet af was hebben we besloten over te stappen op<br />

een eenvoudiger versie. Deze versie wordt hier beschreven.<br />

Het gedrag van <strong>de</strong> <strong>robot</strong> bestaat uit een simpele subsumptie-architectuur van 2 lagen.<br />

Wanneer <strong>de</strong> <strong>robot</strong> geen bal ziet, rijdt hij rond op een manier die geïnspireerd is door het<br />

Braitenberg vehicle. Dit houdt in dat <strong>de</strong> <strong>robot</strong> op enige afstand van <strong>de</strong> wand (ongeveer 1<br />

meter) blijft en ver<strong>de</strong>r maar wat rondrijdt. Het linker- en rechterwiel wor<strong>de</strong>n direct<br />

aangestuurd op basis van <strong>de</strong> sonarwaar<strong>de</strong>n. De <strong>voor</strong>ste 3 linker sonars hebben een<br />

inhiberend effect op <strong>de</strong> snelheid van het rechterwiel, en vice versa.<br />

Als <strong>de</strong> <strong>robot</strong> een bal in beeld krijgt die hij op dat moment zoekt, veran<strong>de</strong>rt het gedrag. De<br />

<strong>robot</strong> gaat dan recht op <strong>de</strong> bal af, en houdt <strong>de</strong>ze zo veel mogelijk in het mid<strong>de</strong>n van het<br />

beeld. Wanneer <strong>de</strong> bal boven of on<strong>de</strong>r uit beeld verdwijnt, rijdt <strong>de</strong> <strong>robot</strong> nog bijna 2<br />

meter door. De gedachte hierachter is als volgt: Het touw waar aan het balletje hangt is<br />

maximaal 3 meter lang. <strong>Een</strong> balletje hangt op maximaal 70 cm hoogte. Uit on<strong>de</strong>rstaan<strong>de</strong><br />

figuur valt <strong>de</strong> volgen<strong>de</strong> berekening op te maken:<br />

d<br />

=<br />

300<br />

2<br />

− 230<br />

2<br />

≈192<br />

cm<br />

Als dit gebeurd is, wordt er vanuit gegaan dat <strong>de</strong> bal geplukt is, waarna <strong>de</strong> <strong>robot</strong> weer<br />

overgaat in het vorige gedrag.<br />

14


4. Het testen<br />

4.1 Het testen van <strong>de</strong> wedstrijd versie<br />

Doordat <strong>de</strong> programmeerfase te veel tijd in beslag had genomen hebben we twee<br />

weken <strong>voor</strong> <strong>de</strong> wedstrijd besloten om over te gaan op <strong>de</strong> hierboven beschreven<br />

versimpel<strong>de</strong> versie. Deze versie hebben we getest op <strong>de</strong> dag <strong>voor</strong> <strong>de</strong> wedstrijd. Op het<br />

officiële wedstrijdveld in <strong>de</strong> Martiniplaza hebben we <strong>de</strong> kleurenfilters op <strong>de</strong> juiste<br />

waar<strong>de</strong>n ingesteld. <strong>Een</strong> testron<strong>de</strong> met alle factoren gelijk aan die in <strong>de</strong> wedstrijd het<br />

geval zou<strong>de</strong>n zijn was onmogelijk omdat er allemaal objecten in het wedstrijdveld<br />

ston<strong>de</strong>n en er een ge<strong>de</strong>elte van <strong>de</strong> boarding miste.<br />

4.2 Het testen van het Kalman filter<br />

Het Kalman filter van <strong>de</strong> oorspronkelijke versie hebben wij later getest op zijn prestaties.<br />

Hier<strong>voor</strong> hebben wij het volgen<strong>de</strong> experiment opgezet. We hebben <strong>de</strong> bakens in het<br />

<strong>robot</strong>lab neergezet in <strong>de</strong> hoeken van het veld. De <strong>robot</strong> wist <strong>de</strong> posities van <strong>de</strong>ze<br />

bakens. We lieten <strong>de</strong> <strong>robot</strong> steeds op hetzelf<strong>de</strong> punt beginnen. We lieten hem een<br />

wisselend aantal tijdstappen rondrij<strong>de</strong>n met object ontwijkend gedrag. Nadat hij had<br />

rondgere<strong>de</strong>n stopte hij en zocht hij een baken aan <strong>de</strong> hand waarvan hij zijn positie kon<br />

bepalen. Daarna hebben wij <strong>de</strong> werkelijke positie van <strong>de</strong> <strong>robot</strong> gemeten. Deze positie<br />

van <strong>de</strong> odometrie, van het lokalisatie algoritme, <strong>de</strong> positie van het Kalman filter en <strong>de</strong><br />

werkelijke positie hebben we genoteerd. Zie hier<strong>voor</strong> <strong>de</strong> appendix.<br />

Het gemid<strong>de</strong>l<strong>de</strong> verschil tussen <strong>de</strong> werkelijke positie van <strong>de</strong> <strong>robot</strong> en <strong>de</strong> positie<br />

aangegeven door <strong>de</strong> odometrie is 23 cm. Het gemid<strong>de</strong>l<strong>de</strong> verschil tussen <strong>de</strong> werkelijke<br />

positie en <strong>de</strong> baken lokalisatie is 40 cm.<br />

De positie aangegeven door het Kalman filter zit er gemid<strong>de</strong>ld 22 cm naast. Dit is met<br />

een variantie (Sxy ) van 310 <strong>voor</strong> <strong>de</strong> baken lokalisatie en met een variantie <strong>voor</strong> <strong>de</strong><br />

odometrie tussen <strong>de</strong> 52 en <strong>de</strong> 77. Het experiment laat echter zien dat <strong>de</strong> meting door <strong>de</strong><br />

baken lokalisatie niet meer dan 2x zo slecht is als <strong>de</strong> odometrie. Als we <strong>de</strong>ze<br />

betrouwbaarhe<strong>de</strong>n aanhou<strong>de</strong>n en we maken <strong>de</strong> variantie <strong>voor</strong> <strong>de</strong> baken lokalisatie<br />

ongeveer 2 keer zo groot is als die van <strong>de</strong> odometrie dan zit <strong>de</strong> positie volgens het<br />

Kalman filter er gemid<strong>de</strong>ld een kleine 19 cm naast.<br />

We gaan <strong>de</strong> verbetering in positie door mid<strong>de</strong>l van het Kalman filter testen met een ttoets<br />

met een significantie niveau van 5%. Hier<strong>voor</strong> gebruiken we <strong>de</strong> nul hypothese: H0:<br />

µEO-EK = 0, er is geen significantie verbetering in positie. Dit tegenover <strong>de</strong> alternatieve<br />

hypothese: H0: µEO-EK > 0 : het Kalman filter schat <strong>de</strong> positie van <strong>de</strong> <strong>robot</strong> beter dan<br />

alleen <strong>de</strong> odometrie.<br />

µ w − 0<br />

= ) ≥ t ( 23)<br />

t 0.<br />

05<br />

sw n<br />

= 1.714<br />

15


Met µw = 0,774, sw = 1,853 en n = 24:<br />

0,<br />

774 − 0<br />

t = = 2.<br />

046<br />

1,<br />

853<br />

24<br />

Dan zien we dat<br />

2.046 > 1.714<br />

dus <strong>de</strong> verbetering in positie door mid<strong>de</strong>l van het Kalman filter ten opzichte van <strong>de</strong><br />

odometrie is significant.<br />

De verbetering van in positie van het Kalman filter ten opzichte van <strong>de</strong> baken lokalisatie<br />

heeft een t = 3.535 en is dus ook significant volgens een 5% t-toets.<br />

Als we willen weten of <strong>de</strong> verbetering in positie ook significant is met <strong>de</strong> alternatieve<br />

variantie waar<strong>de</strong>n <strong>voor</strong> het Kalman filter wordt <strong>de</strong> t-toets erg beïnvloed door <strong>de</strong> 2<br />

extreme metingen in <strong>de</strong> baken lokalisatie, namelijk meting 14 en 15. Om te kijken of<br />

<strong>de</strong>ze verbetering statistisch significant is hebben we daarom gekozen <strong>voor</strong> een 5%<br />

Wilcoxon test. Deze test is op basis van rangor<strong>de</strong>s waardoor hij min<strong>de</strong>r gevoelig is <strong>voor</strong><br />

extreme waar<strong>de</strong>n.<br />

w − 0<br />

n(<br />

n + 1)(<br />

2n<br />

+ 1)<br />

Hier is w <strong>de</strong> som van rangor<strong>de</strong>s van alle absolute waar<strong>de</strong>n AEO-AEK. Als AEO-AEK negatief<br />

is krijgt <strong>de</strong> rangor<strong>de</strong> een negatief teken.<br />

We vin<strong>de</strong>n een w = 162 en n = 24, dan krijgen we<br />

2.314 > 1.645<br />

Volgens <strong>de</strong>ze test is <strong>de</strong> verbetering van positie van het Kalman filter ten opzichte van <strong>de</strong><br />

odometrie dus ook significant.<br />

De verbetering in positie van het Kalman filter ten opzichte van <strong>de</strong> baken lokalisatie is<br />

met een z = 2.8 eveneens significant volgens een 5% Wilcoxon test.<br />

6<br />

≥ z<br />

0,<br />

05<br />

16


5. De wedstrijd<br />

De eerste missie van <strong>de</strong> wedstrijd was het moeilijkst. We moesten 5 balletjes in een<br />

bepaal<strong>de</strong> volgor<strong>de</strong> plukken. Doordat we <strong>de</strong> gehele missie niet goed had<strong>de</strong>n geoefend<br />

bleek er nog een hoop fout te gaan. De <strong>robot</strong> kon niet alle balletjes goed herkennen en<br />

hij kon niet goed inschatten of hij nou een balletje had gepakt of niet. Uitein<strong>de</strong>lijk had<strong>de</strong>n<br />

we 3 balletjes gepakt, waarvan 1 op <strong>de</strong> goe<strong>de</strong> volgor<strong>de</strong>. In <strong>de</strong>ze missie eindig<strong>de</strong>n we<br />

<strong>de</strong>salniettemin als twee<strong>de</strong>.<br />

De twee<strong>de</strong> missie was eenvoudiger. We moesten nu 10 grote groene balletjes plukken.<br />

Deze ballen kon <strong>de</strong> <strong>robot</strong> goed herkennen. Het na<strong>de</strong>el was echter dat er ook een groen<br />

navigatiebaken in het speelveld stond dat <strong>de</strong> <strong>robot</strong> ook als balletje zag. Gelukkig kon hij<br />

op tijd van dit baken wegdraaien. Daarna was het baken uit beeld en kon<strong>de</strong>n alle<br />

balletjes die gezien wer<strong>de</strong>n gepakt wor<strong>de</strong>n. Onze <strong>robot</strong> slaag<strong>de</strong> erin om alle balletjes te<br />

pakken. Door <strong>de</strong>ze prestatie wer<strong>de</strong>n we eerste.<br />

In <strong>de</strong> <strong>de</strong>r<strong>de</strong> missie hingen er 35 balletjes in het speelveld en gingen we met 4 <strong>robot</strong>s<br />

tegelijkertijd strij<strong>de</strong>n <strong>voor</strong> <strong>de</strong> balletjes. Onze <strong>robot</strong> reed vrolijk van balletje naar balletje<br />

terwijl <strong>de</strong> an<strong>de</strong>re <strong>robot</strong>s <strong>de</strong> wan<strong>de</strong>n interessanter von<strong>de</strong>n. Zodoen<strong>de</strong> plukten wij veel<br />

meer balletje dan onze tegenstan<strong>de</strong>rs en behaal<strong>de</strong>n we met een grote <strong>voor</strong>sprong <strong>de</strong><br />

eerste plaats.<br />

6. Conclusie en discussie<br />

Door het praktisch omgaan met <strong>de</strong> pioneer <strong>robot</strong>s die een bepaal<strong>de</strong> taak moeten<br />

verrichten kunnen we een aantal dingen conclu<strong>de</strong>ren over autonome systemen in <strong>de</strong><br />

praktijk. Het belangrijkste is dat je, wanneer het kan, <strong>de</strong> eenvoudigste oplossing kiest.<br />

Het is meestal mogelijk om complexe problemen te ontle<strong>de</strong>n in eenvoudige elementen.<br />

Dit geldt zowel <strong>voor</strong> <strong>de</strong> fysieke <strong>robot</strong> als <strong>voor</strong> <strong>de</strong> software. Onze manier van balletjes<br />

plukken is passief, maar zeer doeltreffend gebleken. An<strong>de</strong>re teams die een actieve<br />

manier van plukken had<strong>de</strong>n gebouwd hebben we hopeloos <strong>de</strong> fout in zien gaan. <strong>Een</strong><br />

discussiepunt m.b.t. <strong>de</strong> wedstrijd in <strong>de</strong> huidige vorm is dat wanneer we een <strong>robot</strong><br />

had<strong>de</strong>n gemaakt die systematisch en met een behoorlijke snelheid door het hele veld<br />

reed, we ook had<strong>de</strong>n gewonnen. Dit kan niet <strong>de</strong> bedoeling zijn van zo’n wedstrijd en we<br />

nemen aan dat er in <strong>de</strong> volgen<strong>de</strong> editie het een en an<strong>de</strong>r aan <strong>de</strong> regels veran<strong>de</strong>rd gaat<br />

wor<strong>de</strong>n m.b.t. dit punt.<br />

7. Toekomstig werk<br />

De StarTel <strong>RoboChallenge</strong> is een wedstrijd die ontwikkeling op het gebied van <strong>robot</strong>ica<br />

wil bevor<strong>de</strong>ren. Het plukken van balletjes symboliseert het tanken van waterstofcapsules<br />

tij<strong>de</strong>ns een interstellaire reis van <strong>robot</strong>ruimteschepen. Dit lijkt een nogal ambitieuze<br />

<strong>voor</strong>stelling van zaken, maar het feit dat wij hier met verschei<strong>de</strong>ne teams uit het hele<br />

land mee bezig zijn geeft toch een positieve impuls aan <strong>de</strong> ontwikkeling van autonome<br />

systemen en kunstmatige intelligentie in het algemeen. Kandidaten kunnen bij een<br />

wedstrijd als <strong>de</strong>ze leren van elkaar om zo samen tot een betere ontwikkeling van kennis<br />

komen. De <strong>RoboChallenge</strong> wordt een jaarlijks terugkerend evenement. Wij doen<br />

volgend jaar in ie<strong>de</strong>r geval weer mee met JEP2 om onze titel te ver<strong>de</strong>digen.<br />

17


Meting<br />

no.<br />

Appendix<br />

De resultaten van het experiment.<br />

Tijd<br />

rij<strong>de</strong>n Eind x Eind y Odo x Odo y<br />

Baken<br />

x<br />

Baken<br />

y<br />

Kalman<br />

x<br />

Kalman<br />

y<br />

AEO AEB AEK<br />

1 200 235 332 251 293 230 291 250 293 42 41 42<br />

2 200 237 256 247 272 233 262 247 272 19 7 19<br />

3 200 225 277 230 294 216 283 229 293 18 11 16<br />

4 200 242 274 250 291 230 291 250 291 19 21 19<br />

5 400 175 110 177 108 225 141 178 109 3 59 3<br />

6 400 268 112 284 117 250 133 283 117 17 28 16<br />

7 400 325 108 328 118 330 90 328 117 10 19 9<br />

8 400 303 152 307 156 296 124 306 159 6 29 8<br />

9 300 108 158 111 174 103 142 111 173 16 17 15<br />

10 300 65 176 68 191 103 142 69 190 15 51 15<br />

11 300 85 108 87 123 90 90 87 123 15 19 15<br />

12 300 93 105 91 121 88 88 91 120 16 18 15<br />

13 500 210 121 232 124 182 106 230 126 22 32 21<br />

14 500 280 213 305 227 314 316 305 230 29 108 30<br />

15 500 115 221 132 239 166 312 134 242 25 104 28<br />

16 500 215 263 222 287 212 305 221 288 25 42 26<br />

17 600 107 264 112 278 112 293 112 279 15 29 16<br />

18 600 91 214 91 240 139 172 92 238 26 64 24<br />

19 600 100 208 98 231 69 200 97 230 23 32 22<br />

20 600 95 155 90 179 120 120 92 176 25 43 21<br />

21 1000 95 155 104 217 150 150 106 214 63 55 60<br />

22 1000 89 221 64 252 122 196 67 249 40 41 36<br />

23 1000 81 231 92 269 114 214 92 266 40 37 37<br />

24 1000 98 157 98 183 120 120 99 179 26 43 22<br />

Uitleg tabel: (alle afstan<strong>de</strong>n zijn afgerond in centimeters, <strong>voor</strong> <strong>de</strong> verwerking van <strong>de</strong><br />

gegevens zijn <strong>de</strong> niet afgeron<strong>de</strong> getallen gebruikt.)<br />

Meting no: Nummer van <strong>de</strong> meting.<br />

Tijd rij<strong>de</strong>n: Het aantal tijdstappen dat <strong>de</strong> <strong>robot</strong> heeft gere<strong>de</strong>n.<br />

Eind x,y: De gemeten eindpositie.<br />

Odo x,y: De eindpositie volgens <strong>de</strong> odometrie van <strong>de</strong> <strong>robot</strong>.<br />

Baken x,y: De eindpositie volgens het vision systeem op basis van <strong>de</strong> bakens.<br />

Kalman x,y: De positie geschat door het Kalman filter op basis van <strong>de</strong> Odo x,y en <strong>de</strong> Baken x,y.<br />

AEO: De afstand tussen <strong>de</strong> werkelijke positie en <strong>de</strong> positie volgens <strong>de</strong> odometrie.<br />

AEB: De afstand tussen <strong>de</strong> werkelijke positie en <strong>de</strong> positie volgens <strong>de</strong> bakens.<br />

AEK: De afstand tussen <strong>de</strong> werkelijk positie en <strong>de</strong> positie volgens het Kalman filter.<br />

AEO AEB AEK AEK2<br />

Gemid<strong>de</strong>l<strong>de</strong> 23.04 39.58 22.27 18.85<br />

Standaardafwijking 12.85 25.44 12.16 14.83<br />

AEK2: De afstand tussen <strong>de</strong> werkelijk positie en <strong>de</strong> positie volgens het Kalman filter met een<br />

variantie van 100 <strong>voor</strong> <strong>de</strong> baken lokalisatie en een variantie van 50 <strong>voor</strong> <strong>de</strong> odometrie.<br />

18


Referenties<br />

1. Wedstrijdreglement <strong>Startel</strong> <strong>RoboChallenge</strong> <strong>2004</strong>,<br />

http://www.robochallenge.nl/reglement.pdf<br />

2. F. Dellaert, D. Fox, W. Burgard, S. Thrun, “Monte Carlo Localization for Mobile<br />

Robots”, IEEE International Conference on Robotics and Automation (ICRA99),<br />

May, 1999.<br />

3. D. Fox, W.Burgard, H. Kruppa, S. Thrun, “A Monte Carlo Algorithm for Multi-<br />

Robot Localization” tech. report CMU-CS-99-120, Computer Science<br />

Department, Carnegie Mellon University, 1999.<br />

4. Hogg and Tanis, “Probability and statistical inference”, Prentice Hall, 2001.<br />

5. S. Thrun, “Probabilistic Algorithms in Robotics”, American Association for<br />

Artificial Intelligence, 2000.<br />

6. G. Welch, G. Bishop, “An Introduction to the Kalman Filter”,<br />

http://www.cs.unc.edu/~welch/kalman/kalmanIntro.html<br />

7. A. Gelman, J.B. Carlin, H.S. Stern, D.B. Rubin, “Bayesian Data Analysis”, 2nd<br />

ed. London etc.: Chapman & Hall, <strong>2004</strong>.<br />

19

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!