Idéen om TroNXT:
Vi havde fra start et ønske om at lave et spil, der kunne være sjovt at spille som menneske mod en computerstyret spiller. Vi kendte begge to Tron og kunne se en passende mængde udfordringer i at lave spillet.
Tanken var fra starten, at spillet skal være lige for alle, således at alle spillere (mennesker eller computere) har adgang til den samme grundlæggende robot.
Processen:
Vores prioriteter lå klar fra starten, og udviklingen af dem fulgte rækkefølgen.
1. Bluetooth skal virke
2. Tusch kan aflæses
3. Robotten kan styres via PC
4. Robotten kan styres af NXT
Da Bluetooth-adgang var den største risiko ved vores projekt, valgte vi at starte med at få dette til at virke. Med udgangspunkt i LeJOS-guides og Google-søgninger gik vi igang med at få hul igennem mellem PC og NXT. Det tog rigtigt lang tid, først i starten af projektet og senere halvvejs igennem projektet, hvor alting igen brokkede sig... Det var ærgelig tid at bruge, men nødvendigt for projektet. For at spare tid på Bluetooth-bøvl valgte vi at bruge Python på PC-klienten i stedet for LeJOS-PC, da vi ikke kunne få Java-Bluetooth til at virke, og ikke ville bruge mere tid på at bøvle med det.
Som næste skridt gik vi igang med at designe robotten og den tilhørende software. Dette blev gjort "bottom-up", dvs. vi startede med en simpel robot, der kunne styres fra PC og registrere linier. Dette blev implementeret som en TronBike med en BTControlledPlayer og en WallDetector. Derefter tilføjede vi en Bumper og senere byggede vi tuschen på. Vi var begge spændte på, om lyssensoren kunne se forskel på en hvid tavle med/uden tuschstreg, men med en ny tusch viste det sig, at der var en forskel på ca. 2. Udsvingene henover den hvide tavle var ca. 0, så tuschstregerne kunne godt registreres.
Da alt dette virkede i tilstrækkelig grad, tilføjede vi endnu en WallDetector som computerspillerne kunne bruge til at registrere linier.
Byggevejledningen til den endelige robot kan findes her:
I svn-historien ligger der et par ældre udgaver, disse kan ses ved checkout af de relevante revisioner.
I den sidste del af forløbet valgte vi at dele arbejdet mere op imellem os, således at pepe udviklede PC-delen, mens rfogh udviklede computerstyringen af robotterne.
Udbytte:
I løbet af projektet har vi arbejdet dybdegående med flere af emnerne fra kurset. Her kan bl.a. nævnes kommunikation, hvor vi har fået Bluetooth-forbindelser til at virke i praksis, samt udviklet en simpel protokol til kommunikation mellem PC og NXT. Vi har også arbejdet med sensorer og aktuatorer som en helt naturlig del af vores robot, hvor vi også har brugt reaktive strategier til at styre den med, da Tron-spillet lægger op til en "bang-bang"-implementation.
Derudover har den ene af vores computerspillere brugt en simpel form for navigation/map-building, hvor den hele tiden forsøger at holde øje med motorernes omdrejninger (tacho count) for at kunne bestemme sin egen placering på banen.
Perspektivering:
Hvis projektet skulle fortsætte, ville den første oplagte ting at kigge på være, om man kunne få robotten til mere præcist at dreje 90 grader. De to robotter drejer ikke lige skarpt med den samme konfiguration, hvilket til dels ødelægger spillet og i hvert fald de forudsætninger, vi bygger spillet på.
En anden forbedring kunne være at bygge en afstandssensor på robotten, eller tolke Bumper-input som signal til at dreje i stedet for signal til at tabe. På den måde vil computerspillerne have en større sandsynlighed for at opdage andre robotter og dreje i tide.
Som en sidste forbedring kan nævnes robotdesign. En perfekt løsning vil have både lyssensor og tusch placeret på midten, samtidig med robotten skal være saml og med lavt tyngdepunkt. Alle disse kriterier kan ikke blive opfyldt på en gang, men der kan nok findes et bedre kompromis end vores nuværende robot.
En feature, der ville kunne tilføje en ekstra dimension til spillet, er muligheden for at indføre highscores. Dette kunne gøres ved at måle fx tid eller tachocount pr. spil. På den måde kan menneskespillere konkurrere på tværs af spil, samtidig med, at highscore kan bruges til at vurdere forskellige computerspilleres kvalitet.
Computerspillerne kan ligeledes forbedres/gøres mere intelligente. Dette kan ske ved fx map-building, hvor computerspilleren til stadighed opdaterer et kort over banen, og forsøger at indføre nye streger, når den opdager dem.
En anden mulighed ville være at indføre en subsumption-arkitektur til at forene de to eksisterende computerspillere, således at den midter-søgende computerspiller er aktiv, når robotten er tæt på kanten af pladen, mens den mere tilfældige computerspiller er aktiv, når robotten er nær midten af pladen.
Konklusion
Det er lykkedes os at lave et brugbart Tron-spil, hvor vi har udviklet en AI, som en menneskespiller kan tabe til. Tron-spillet er lavet på så simpel en måde, at alle kan være med.
Til trods for større og mindre udfordringer mener vi derfor at have opfyldt målet med projektet.
Ingen kommentarer:
Send en kommentar