Denne blog bruges af Kim Munk Petersen (20063667), Andreas Koefoed-Hansen (20062154) og Tim Rasmussen (20061947) som dagbog i forbindelse med kurset Embedded Systems/Legolab på Århus Universitet.

mandag den 7. september 2009

Lær at kende din robot - Øvelsesgang 1

Målet med denne uges opgaver har været at stifte bekendtskab med LEGO mindstorms og måden den programmeres på igennem LeJOS.

Denne uge har gået med at få udleveret det Lego vi skal arbejde med igennem de næste mange uger. Ud af det Lego vi har fået udleveret skulle der bygges en LEGO bil, udstyret med en lyssensor som kan følge en linie. Programmet til denne bil er skrevet i Java og for at uploade programmer til NXT modulet er man nødt til at have LeJOS installeret på både computer og NXT modul.

Opsumering af opgaver:
  1. Bygge LEGO bil med lyssensor og få etableret forbindelse mellem computer og NXT.
  2. Få bilen til at følge en linie
  3. Find forskellige farveværdier vha. lyssensoren med og uden LED tændt.
  4. Ændre delayet lyssensoreren og se påvirkningen af dette.
  5. Brug Runtime.getRuntime().freememory() til at se forskellen på fri hukommelse ved brugen af henholdsvis variabler og strenge direkte indsat i metodekald.

1. Konstruktion af robot.
Vi fik udleveret de to kasser med lego der indeholdt de dele der skulle bruges til konstruktion af robotten, men der manglede en vejledning til hvordan denne skulle bygges. Vi fandt dog en på nettet der mindede om, og byggede lidt om på den så den passede med specifikationen. Vi havde lidt problemer med at få forbindelse imellem computeren og NXT modulet, men efter vi havde fået installeret de korrekte drivere og Eclipse plug-in kørte det som det skulle.

2. Follow the line...
Programmet i øvelsesvejledningen blev uploadet til robotten og blev testet på en bane der var lagt ud i øvelseslokalet. Robotten brugte lyssensoren til at finde ud af om den var over en sort streg og korrigerede hvis den kom uden for, og kom derved til at køre i en zik-zak bane over stregen.

Filen kan findes på: www.cs.au.dk/~tiras/filer/LEGO/FollowTheLine.java

3. Forskellige farveværdier.
Vi brugte NXT modulet med lyscensoren tilkoblet til at aflæse forskellige farveværdier. Eftersom programmet allerede skrev farveværdierne på skærmen, ændrede vi ikke noget i programmet.

NXT'en gav os følgende farveværdier:

Farve: LED on: LED off:
Blå: 43 30
Grøn: 49 39
Rød: 56 34
Gul 60 43
Sort: 35 25
Hvid: 60 39

Det ses at der er flere farver der samme eller næsten samme værdi og kan derved konkludere at sensoren ikke kan skelne imellem farver, men kun gråtoner.

4. Ændring af delay:
Her var vi nødt til at ændre en smule i koden. Det oprindelige program indholdte følgende kode
Thread.sleep(100);
hvor i vi ændrede værdien til henholdsvis 10, 500 og  1000, for at sammenligne robottens opførelse omkring stregen.
Da vi prøvede at ændre delayet til en højere værdi, resulterede det i at der kom et større udsving i zik-zak banen eftersom der var længere tid imellem aflæsningerne. Når delayet blev sat til en lavere værdi blev banen mere lige og robotten kunne gennemføre banen en del hurtigere.

5. Memory:
Denne opgave går ud på at se hvordan NXT'en reagere på brugen af henholds vis variabler og strenge i funktions kald. Det oprindelige program var som følgende:
String left = "Turn left ";
String right= "Turn right";
 
LCD.drawString(right, 0, 1);
LCD.drawString(left, 0, 1);
Dette program ændrede vi således at i stedet for at bruge variablerne left og right i drawString() metodekaldet, placerede strengene direkte i metodekaldet. Ligeledes tilføjede vi noget ekstra kode for at få NXT'en til at udskrive hvor meget fri hukommelse den havde. Ændringerne var som følgende:
LCD.drawString("Turn right", 0, 1);

LCD.drawString("Turn left", 0, 1);

Tilføjede følgende kode:
LCD.drawInt((int) Runtime.getRuntime().freeMemory(), 2, 5);
Når drawString metoden bliver kaldt med en string-variabel bliver der ikke allokeret ekstra memory, men når metoden bliver kaldt med en streng direkte skrevet i metodekaldet bliver der allokeret ektra plads til stregen hver gang koden bliver eksekveret. Man kan se at NXT'ens virtualle maskine har en garbage collector da der bliver frigjort memory inden hukommelsen er fyldt.

Ingen kommentarer:

Send en kommentar

Faste læsere