Status for projektet
Hvad var planen
Vores projekt gik ud på at lave flere robotter, der samarbejdede om at tømme en mine for guld. Minen skulle bestå af en række tiles med forskellige typer. Et tile kunne således være et vejkryds (intersection), en hule med guld (hule) eller en garage (feltet hvor robotterne starter). For at gøre projektet interaktivt planlagde vi, at det skulle være muligt for publikum at placere forhindringer i form af mure rundt omkring i minen. Disse skulle simulere uforudsete begivenheder i form af stenskred, og det samlede system skulle håndtere dette dynamiske element. Vi planlagde at lave tre robotter.- En ‘seeker’ hvis job det var at køre ud i minen og kortlægge, hvordan minen ser ud. Seekeren er den første robot der agerer og det er udfra den viden den indsamler, at de andre robotter udfører deres opgaver.
- En ‘miner’ der skulle køre ud til de huler seekeren fandt og hente guldet i dem. Planen var at lave en fysisk repræsentation af guldet som Mineren kunne finde og samle op med en klo.
- En ‘demolisher’ hvis job det var at fjerne de mure publikum placerede i minen, således at de andre robotter uhindret kunne udføre deres jobs.
Den første ide til hvordan en bane kunne se ud.
|
Hvad der mangler
Selvom vi nåede langt i forhold til den oprindelige plan, er der en række funktionaliteter, vi ikke nåede at implementere. Der findes således ikke nogen Demolisher, og det er ikke muligt for publikum at placere mure i banen. Der findes heller ikke nogen fysisk repræsentation af guldet og Mineren samler således ikke noget op, når den kører ind i en hule.
Derudover mangler vi mulighed for, at mere end én robot kan bevæge sig rundt i banen på samme tid.
Hvad har vi nu
Vi har pt. to robotter samt et PC-program (Hivemind), der opretholder en repræsentation af banen robotterne kører rundt i og give instruktioner til de to robotter, gennem deres Mind klasser. Robotterne registrerer farver foran sig og sender signaler tilbage der tolkes på computer siden. Derefter modtager den simple instruktioner fra sin Mind klasse (kør frem, drej til højre, drej rundt etc.). Som udgangspunkt følger robotterne sorte kanter rundt i minen. Vejkryds, miner, samt enden på en sort kant repræsenteres af hhv. rød, blå og grøn. Ved hjælp af en rød/blå/grøn sensor kan robotten se hvad den er kommet til og sende signaler om dette til computeren.| Minen som den kom til at se ud (i den sidste implementation er der også en type af tiles der repræsenterer en garage - det fik vi desværre ikke foto-dokumenteret). |
De to robotter vi har udviklet er hhv. ‘seeker’ robotten og ‘miner’ robotten som beskrevet ovenfor. For at undgå concurrency problemer er der kun én af de to robotter i banen ad gangen. Seekeren kører rundt i hele banen og registrerer hvad den ser. På baggrund af dette kortlægger computeren hvordan den ser ud. Derefter kører Mineren ind i banen og besøger alle huler.
For at gøre det muligt for tilskuere at se, hvad der foregår, valgte vi at opbygge en visuel repræsentation af banen, der vises på computeren mens robotterne arbejder. Dette var ikke en del af den oprindelige plan, men uden denne GUI, havde det været nærmest umuligt for tilskuerne at forstå hvad der foregik. Yderligere viste det sig at være en god resurse til debugging. Vores GUI optegner løbende det Seekeren opdager og når Mineren bagefter kører rundt markeres de besøgte huler med en lysere blå farve, for at illustrere at disse nu er ‘udminet’.
For at gøre det muligt for tilskuere at se, hvad der foregår, valgte vi at opbygge en visuel repræsentation af banen, der vises på computeren mens robotterne arbejder. Dette var ikke en del af den oprindelige plan, men uden denne GUI, havde det været nærmest umuligt for tilskuerne at forstå hvad der foregik. Yderligere viste det sig at være en god resurse til debugging. Vores GUI optegner løbende det Seekeren opdager og når Mineren bagefter kører rundt markeres de besøgte huler med en lysere blå farve, for at illustrere at disse nu er ‘udminet’.
| Vores GUI efter seekeren har kortlagt minen. Mørkegrå felter er garager og blå felter er miner. Den lyserøde ‘pil’ repræsenterer robottens position og retning. De grønne streger der fører væk fra kortet betyder at minen slutter her. Vejene er lyseblå når de ikke er blevet undersøgt endnu. |
Herunder kan ses en video af, hvordan det endelige system kører.
Videre arbejde
Herunder beskrives en række interessante muligheder for hvordan der kan arbejdes videre med projektet.Mure og demolisher-robot
En interessant opgave ville være, at tilføje dynamik i banen. Dette kunne gøres ved at lade tilskuere placere mure i banen som robotterne skal reagere på. Dette vil give den interessante udfordring, at Hivemind’en skal kunne håndtere en dynamisk verden. Samtidig ville det give projektet bruger interaktion, ved at give brugerne mulighed for at placere mure i verdenen.For at håndtere disse mure ville vi implementere en robot hvis eneste funktion ville være, at fjerne disse mure fra banen.
For at dette kunne lade sig gøre, skal alle robotterne udstyres med en ultralydssensor, så de kan “se” murene og de skal opdateres med muligheden for at melde tilbage at de har fundet en mur.
På Hivemind siden har vi allerede mulighed for at blokere edges, derfor skal vi kun have implementeret at Hivemind’en kan tage imod meldingen fra robotten og oprette muren.
Sidste problem er håndteringen af mure, når de først er blevet opdaget. Som det er nu kører vi kun med én robot ad gangen og hvis den lukkes inde af murer, vil der ikke være noget at gøre. For at de dynamiske mure skal fungere ordentligt vil det derfor være nødvendigt, at udvide vores projekt så flere robotter kan køre på samme tid. Dette bliver beskrevet nedenfor.
Flere robotter på en gang
Som vores projekt fungerer nu, kører robotterne en ad gangen. Først afsøger Seekeren hele kortet og dernæst kører Mineren ud og henter guld. Det ville være mere effektivt hvis Mineren kørte ud og minede så snart Seekeren fandt en hule. Samtidig ville det også være nødvendigt at have flere robotter til at køre samtidig, hvis man skal håndtere mure på en ordentlig måde.For at vores system kan håndtere concurrent (samtidige) robotter, skal det implementeres at de ikke støder ind i hinanden og ikke får lukket hinanden inde. Systemet kan allerede låse kanter og tiles, som er en del af en anden robots sti, så det er muligt for os at holde robotterne fra hinanden. Hvis vi begynder at benytte denne funktionalitet opstår der dog en åbenlys risiko for deadlocks robotterne imellem. Den største opgave i forhold til flere robotter på en gang er således at håndtere allokering af stier og kunne løse deadlocks der måtte opstå.
Rescue-robot
Vores nuværende udgave af projektet har meget lav tolerance overfor fejl. Hvis en robot læser forkert eller drejer forkert i forhold til, hvad computeren tror, er der ikke noget at gøre.Dette kunne muligvis håndteres ved at lave en “rescue-robot”, der kan køre ud og finde den forliste robot. Dette ville foregå ved, at når vi fandt ud af at en robot var faret vild, ville vi bede robotten om at vente på at blive reddet. Vi ville så sende rescue-robotten ud til vores sidst kendte “sunde” position, herfra ville man så kunne bede rescue-robotten om at lede efter den forliste robot. Når den så fandt den ville den melde tilbage, hvor den var fundet og Hivemind’en kan derfra få den på ret kurs igen.
Hastighed og effektivitet: hvor hurtigt kan det gøres?
For at forøge vores hastighed og effektivitet, vil det være nødvendigt at udskifte nogle af de mere naive løsninger. Det vil være nødvendigt, at kunne køre med flere robotter ad gangen og gøre dette på den mest effektivte måde. Samtidig vil det være nødvendigt at få en bedre udforskningsalgoritme til Seekeren og få lavet en implementation af en traveling-salesman algoritme til Mineren.En anden måde at gøre det hurtigere, ville være at sætte flere Seekers og flere Miners ind, men igen, for at dette vil være mere effektivt, skal der laves concurrency der fungerer.
Flere indgange i verdenen
Dette er lidt en pendant til at køre mere effektivt. Hvis der var flere indgange til vores verden ville det være nødvendigt at vedligeholde et kort for hver indgang. Disse kort kunne man man så sammenligne løbende og hvis man så nok ligheder mellem to kort, ville man kunne sætte dem sammen, samtidig ville det også være muligt at sammesætte to kort, hvis to seekers mødte hinanden.Refleksion over forløbet
Vores forløb var delvist præget af, at vi ikke fra starten lavede en tidsplan. Vi var også for dårlige til at holde ‘status’-møder løbende, hvor vi kunne have snakket om, hvad vi havde nået, hvilke problemer vi havde, og hvad vi manglede. Det betød bl.a. at vi i en uge arbejdede i to grupper af to på henholdsvis robotterne og Hivemind’en. Efterfølgende havde vi nogle problemer med at få “samlet sporene” igen. Vi var ikke helt enige om, hvad der forventedes af computeren og robotterne og dette gav os noget ekstra arbejde.Den største tekniske udfordring i projektet har været håndtering af fejllæsninger for farvesensoren. Vi har i løbet af projektet haft en del problemer med farvesensoren men synes, at vi nu er nået frem til en fornuftig implementation (beskrevet i blog post 7, se http://robotteddy.blogspot.dk/2012/06/slutprojekt-del-7.html, punkt 7). Vi havde således ikke fejl på farvesensoren de sidste 5 gennemkøringer.
Hvis Seekeren alligevel skulle læse en forkert farve på første gennemkørsel, er der ingen fejlhåndtering. F.eks. skete det tidligere, at den læste blå mens den kørte på en sort kant. Ville dette ske i vores endelige implementation, vil Hivemind’en registrere en hule på dette tile og banen ville derefter uopretteligt være fejl-repræsenteret. I afsnittet “Videre arbejde” ovenfor beskriver vi en mulig løsning på dette problem, i form af en ‘rescue’ robot.
Til trods for disse problemer er vi overordnede tilfredse med forløbet for projektet. Vi brugte de første to møder på, at blive enige om en fornuftig arkitektur for Hivemind’en og det hjalp os gevaldigt i arbejdet med den. Det betyder også, at det vil være nemt at udvide den med flere robotter og andre typer af robotter. Vi har haft mange gode arbejdsdage og vi har været gode til at føre journal, i form af blog posts, over vores arbejde. De udfordringer vi har mødt undervejs har vi fået løst og det er således kun tiden der har været den begrænsende faktor for hvor langt vi er nået.
