Kristan Andersen, Simon Lykke, Jacob Styrup Bang

fredag den 11. januar 2008

Lab Notebook 7


Date: 11.1.08
Duration of activity: 9:15-14:00
Group members participating: Simon, Jacob og Kristian

Dagens mål:
  • Få Bluetooth kommunikation til at virke mellem enhederne
  • Få "undvige" / "fange" mekanismer til at virke
  • Hvis IR dioderne kommer hjem skal vi have dem sat sammen til infrarøde sendere

Bluetooth kommunikation
Vi valgte at benytte Bluetooth til kommunikation mellem enhederne og da Bluetoothsenderen i NXT har en rækkevidde på 10 m (1) er dette nok til vores behov. I første omgang brugte vi enhedernes navne, der var parrede i forvejen, men vi stødte på problemer med at når den ene enhed sendte til den anden modtog den også samme data. Det skyldes at robotterne har fået det samme navn. Istedet valgte vi at lave et lille testprogram, der aflæste hardware MAC adresserne på NXT'erne og bruge disse lokale adresser til kommunikationen, dette betyder at MAC adresserne ligger i selve programmet men dette ser vi ikke som noget problem. I programmet laver vi et tjek på de to adresser, hvis adressen tilhører denne NXT bruges den anden adresse til kommunikation, dermed slipper vi for at have to versioner af programmet.
Bluetooth kommunikationen virker ved at den ene part skal stå og vente på en forbindelse, og den anden skal oprette forbindelsen. Her blev vi nød til at implementere rollerne "Avoider" og "Catcher", så det skal vælges ved opstart hvilken rolle den enkelte NXT skal have. Vi valgte at "Avoider'en" skal stå og vente på en forbindelse fra "Catcher'en".
NXT'erne skal igennem spillet kunne skifte roller. Oprindeligt havde vi forestillet os at "Avoider" og "Catcher" behaviors kunne stå for skiftet, men da begge behaviors har en lavere prioritet end "StayOnTrack" vil det være umuligt at den ene kan fange den anden når "StayOnTrack" er aktiv. Vi lavede derfor en ny Behavior "Touch" med højest prioritet.
"Touch" vil tage kontrollen, hvis touch sensoren er trykket ind og den pågældende NXT er "Catcher" (At være "Catcher/Avoider" er implementeret ved hjælp af en statisk boolsk værdi i vores hovedklasse "TikCar"). Får "Touch" kontrollen vil den sende beskeden "42" til den anden NXT og ændre sin boolske værdi fra "Catcher" til "Avoider". En "TikCar" har en "BTRecieve" tråd kørende, hvis den er "Avoider" prøver den konstant at modtage beskeden "42". Når beskeden modtages ændrer "Avoideren" rolle til "Catcher".

Efter alt dette var implementeret oplevede vi et problem med memory leaks. Efter NXT'erne havde kørt et kort stykke tid fik vi en "Exception : 5". Vi debuggede koden og fandt nogle memory leaks, men det eneste vi fik ud af det var af forsinke fejlen.
Infrarøde kilder
Fyren fra daimi's elektronik værksted havde bestilt 20 infrarøde dioder: 10 med en spredningsgrad på 40 og 10 med en spredningsgrad på 80 grader. Vi forventer hovedsageligt at benytte dioderne med en spredningsgrad på 40, da lyset skulle være kraftigere. Dioderne skal sættes sammen i en lille kæde, men for at finde ud af hvor mange de kan sættes på skal vi kende spændingen over en motorudgang.
Konklusion
Vi fik Bluetooth kommunikationen til at virke v.h.a. lokale MAC adresser. For at få dette til at virke blev vi nød til at kunne vælge rolle på robotten ved opstart, men det er ikke noget problem da rollen alligevel skal bruges under spillet. Kommunikationen er implementeret i "BTRecieve" og "TikCar". Vi fik lavet en ny "Touch" behavior med højest prioritet til at håndtere skiftet når robotten er "catcher" og fanger "avoideren".
Vi nåede ikke at løse memory leak problemet og vi nåede heller ikke at få styr på de infrarøde kilder.
Referencer
(1) NXT Bluetooth, Hardware Developer Kit, side 12.

Ingen kommentarer: