onsdag den 20. juni 2012

Slutprojekt, del 8

Deltagere: Bjarke, Mikkel, Troels, Jesper
Tid: 4 timer

Mål

Målet med dagen er at få Seekeren til at afsøge hele den bane vi har lavet. Derudover vil vi gerne introducere endnu en robot, der kører rundt til hulerne efter at banen er blevet fuldt udforsket.

Plan

1. Juster farvesensoren så den bliver pålidelig.
2. Test hele systemet, og ret bugs.
3. Udvid Seekeren så den kan returnere til sin garage efter endt arbejde.
4. Udvid hele systemet til også at indeholde en miner robot.
5. Lav ekstra felt til mine-repræsentationen på computeren, der kan vise at en hule er udminet.

Resultater

1.
Vi har fået vores farvesensor til at virke som den skal. Vi gjorde dette ved at justere hastigheden for hvornår farver er set nok. Blå bliver, pga af lyset i lokalet, ofte set selvom sensoren ikke er over blå, hvorfor den tælles langsomt op. Rød er betydeligt mere pålidelig, så den tælles op hurtigere. Vi tilpassede hvor mange gange hver farve skal ses individuelt, så den ikke kører for langt frem på blå eller grøn. Resultatet er, at den ser alle farve yderst pålideligt og at systemet tillader os, at redigere på følsomheden for hver farve individuelt eller for alle farver simultant [1].

2.
Med farvesensoren på plads, blev den sidste udvikling og tilpasning af det samlede system betydeligt lettere. Uden større ændringer i koden afsøgte Seekeren hele banen, hvilket var en pludselig og kraftig forbedring over de tidligere forsøg vi havde udført. Dette ledte til næste funktionalitet, hvilket beskrives i næste punkt.

3.
Efter at have afsøgt alle ukendte edges i banen, skal Seekeren returnere til sit start tile. Serveren gemmer tilet i en variabel, for at gøre det tilgængeligt på dette tidspunkt, men alligevel gav punktet en mængde problemer der skulle løses. 

 
Det første problem opstod som følge af et valg vi tog, på baggrund af den pludselige positive udvikling. Vi besluttede at tilføje endnu en robot, der skulle besøge alle hulerne som Seekeren havde opdaget. Hulerne genkendes ved deres blå farve. Da farvesensoren havde givet problemer tidligere, havde vi besluttet også at gøre garage felterne blå, for at reducere mængden af forskellige farver den skulle genkende. Resultatet var derfor, at når Seekeren ville returnere til garagen, ville den genkende garagen som en hule, hvilket ville resultere i, at Mineren ville blive sendt derhen senere i processen. For at undgå dette, omskrev vi måden vores Seeker-mind, håndterede robottens indrapporteringer. 

Normalt ville ethvert felt blive opdateret med de nyeste informationer Seekeren leverede, men dette ændrede vi, således at felterne kun fik opdateret deres type, såfremt de var undiscovered, når Seekeren kørte over dem. Derved ordnede vi også et andet og lidt sjældnere problem, hvilket var at Seekeren kunne risikere at se blå, uden at den var på et blåt felt. Dette betød at et andet felt pludselig kunne omdefineres.
Desværre introducerede vi også det krav, at det Seekeren rapporterede i første omgang, ville være bindende.

Det andet problem opstod i algoritmen der beregnede stien fra robottens nuværende position til et vilkårligt andet punkt i banen. Denne var lavet meget specifikt til Seekeren og egnede sig derfor ikke til at finde en sti mellem to allerede kendte punkter. Dette krævede en større omskrivning af funktionen, men resultatet blev en mere generel funktion der egnede sig til at finde alle stier [2].



Den forbedrede algoritme til at finde den hurtigste vej mellem to tiles.
 

4.
Som beskrevet besluttede vi at introducere endnu en robot, da vi fandt relativt få problemer, efter at farvesensoren var blevet pålidelige. Ved projektets start havde vi ønsket en robot der skulle hente genstande i hver hule, men dette havde vi ikke arbejdet videre på, da vi først skulle have Seekeren til at være pålidelig. Derfor måtte vi opgive ønsket om at samle genstande op, da tiden ikke tillod denne funktionalitet. Opgaven for robotten blev derfor at opsøge samtlige huler i banen, når Seekeren var færdig med at udforske.

/**

    * Only called by SeekerMind - When a new tile is discovered it

    * is created by the seeker and saved in the Tiles map.
* if it's a tile, it'll be storred for later use by the Miner robot.

    * @param t

    *     Newly found tile

    */
   public void createNewTile(Tile t) {
   if(t.getType()==TileType.CAVE)
   miningStrategy.addCave(t);
   tiles[t.getxCoordinate()][t.getyCoordinate()] = t;
   }

På baggrund af de valg vi havde taget tidligt i projektet, var det let at udvide funktionaliteten af serveren til at håndtere endnu en robot. Yderligere kunne selve styringen af robotten nedarves fra klassen Overmind, der var skrevet med netop dette mål for øje. På selve robotten kunne den klare sig med den eksisterende software skrevet til Seekeren.
Vi udvidede Hivemind'en med et system, der gemte alle miner der blev fundet i en klasse for sig [3]. Denne klasse kunne derefter give stier ud til hver mine, når dette var nødvendigt.
Vi var nødsagede til at kræve, at Seekeren havde forladt banen, før Mineren kunne rykke ind, idet vi ikke havde funktionaliteten der kunne håndtere to robotter simultant.

5.
For at gøre vores visuelle repræsentation af banen mest brugervenlig og oplysende, udvidede vi denne med endnu et felt. Feltet repræsenterede en mine der var blevet “udtømt” af Miner robotten. Dette krævede en ny type felt på server-siden, men var let implementeret.

Konklusion

Det viste sig, at vi ved dagens start havde solid kode, der blot manglede fungerende farvesensorer. Da disse blev introduceret virkede det samlede system overraskende hurtigt. Derfor kunne vi sætte tid af, til at introducere endnu en robot, for at udvide opgaven og målet for systemet. Her viste det sig, at vores tidligere overvejelser om kodens opbygning, havde gjort denne udvidelse både hurtig og let. Da dette er sidste møde inden præsentationen af projektet vil hverken kode eller funktionalitet blive udvidet yderligere herefter.

Referencer

1. https://dl.dropbox.com/u/357278/Lego/TeddyMiners/miner/main/AbstractMiner.java

2. https://dl.dropbox.com/u/357278/Lego/TeddyHivemind/hivemind/mind/ExhaustiveSearchShortestPath.java
3. https://dl.dropbox.com/u/357278/Lego/TeddyHivemind/hivemind/mind/SimpleMiningStrategy.java

Ingen kommentarer:

Send en kommentar