Hvem: Peter, Michael
Varighed: 8 timer
Mål
- Sende positioner til lego robotten
- Grafisk fremstilling af hvor på banen de forskellige enheder er
Arbejdsgang
Gennem de sidste par dage har vi bygget et system, der finder
positionen af forskellige tags på vores bane. Nu vil vi sende disse
informationer til legorobotten, så vi kan begynde at bruge det til at
navigere efter.
Vi kombinerer de forskellige dele af systemet som vi har arbejdet med
de sidste par dage og bygger et sammenhængende forsøg:
- ARToolKit læser et billede fra webcam, og identificere alle tags
- Transformationerne for hvert tag sendes til vores styringsprogram
- Position og rotation af hvert tag i forhold til vores bane beregnes
- Informationerne sendes til NXT robotten
- Robotten forsøger at køre i retningen af bolden
For at få et bedre overblik byggede vi et lille gui, hvor det er
muligt at se den position vi ser med kameraet, samt den seneste
position robotten kender til.
De to firkanter repræsentere robotterne, den runde er bolden. Alle de
sorte objekter er hvad vi ser med kameraet. Derudover er der en blå og
en rød kopi af hver information, som er hhv. det den ene og den anden
robot ved om banen. De to streger viser hvor bolden skal være for at
der er mål.
Input til ARToolKit lavede vi vha. et webcam der filmede nogle små
stykker papir med tags på et bord. Vi flyttede hvert tag manuelt for
at se ændringen i vores GUI.
Vha. vores bluetooth kode sendte vi koordinaterne til et meget simpelt
NXT program, der brugte TachoNavigator til at køre mod bolden.
Da vi manuelt skulle flytte tagsne var det naturligvis ikke
realistiske positioner der blev send til robotten, men det var
brugtbart til at teste om de forskellige komponenter virkede.
Bluetooth forbindelse
Delmålet er at sende data via bluetooth til en NXT fra en computer.
Måden vi gør det på er at bruge pakken lejos.pc.comm på computeren og
lejos.nxt.comm på NXT'en. Fordelen ved at bruge lejos.pc.comm på
computeren er at det giver næsten samme bluetooth grænseflade på
NXT'en som på computeren.
Under overfladen bruger lejos.pc.comm Bluecove, der er et opensource
bluetooh bibliotek. Det virker på Linux, Mac og Windows hvilket gør at
vi kan nøjes med en kodebase til de forskellige platforme vi bruger.
Det tog noget tid at få computeren til at finde en driver til det
underliggende bluetooth system. Grunden til dette var problemer med
javas CLASSPATH, den fandt således ikke Bluecove jar-filerne og kunne
derved ikke gøre brug af bluecove. Dette blev løst ved at tilføje
bluecove.jar og bluecove-gpl.jar fra mappen 3rdparty/lib/ i lejos, til
CLASSPATH'en. Derefter kunne vi connecte til NXT'en ved at bruge 2 små
testprogrammer.
Det næste mål er så at sende positioner og rotationer til
NXT'en. Målet blev opnået, ved bruge den DataOutputStream og
DataInputStream som lejos.nxt.comm.NXTConnection og
lejos.pc.comm.NXTComm stiller til rådighed.
For at have styr på de data vi sender over bluetooth så vi entydigt
kan encode og decode dem, lavede vi følgende dataformat:
int::RobotID | float::X-position | float::Y-position | float::Rotation
Hvor RobotID enten er 1,2,3 for hhv. robot 1, robot 2 og bolden.
Kode for at sende en position, hvor ``dos'' er en DataOutputStream for
bluetooth forbindelsen:
dos.writeInt(id);
dos.writeFloat(x);
dos.writeFloat(y);
dos.writeFloat(rotation);
Kode for at modtage en position, hvor ``dis'' er en DataInputStream
for bluetooth forbindelsen:
id = dis.readInt();
x = dis.readFloat();
y = dis.readFloat();
rotation = dis.readFloat();
På den måde kan vi altså udtrykke binær data der skal sendes over
bluetooth og forstå denne data hos modtageren uden, at tænke på
hvordan dataen præcist er udtrykt binært.
En ting der er værd at bemærke er at man skal kalde flush() på sin
DataOutputStream for at få denne til at sende dataen over
bluetoothforbindelsen.
Hastighed på bluetooth
Vi oplevede en hastighedsforskel på bluetooth mellem forskellige
platforme. Det lykkedes, at vinde lidt hastighed ved at ændre
opførslen på vores kode, der før kaldte flush efter hver besked, til
kun at kalde flush når den havde sendt alle de beskeder, der kunne
sendes på en gang.
Vi havde god succes med at sende koodinaterne til vores NXT, men for
at se hvor godt det virker skal vi have bygget en testopstilling.
Det næste der skal laves ved bluetooth forbindelsen er muligheden for
tovejs kommunikation mellem en computer og NXT'erne således de kan
sende flere forskellige slags beskeder til hinanden.
Ingen kommentarer:
Send en kommentar