onsdag den 8. december 2010

torsdag den 25. november 2010

onsdag den 17. november 2010

Lab Report 9

Vi har udgivet vores lab report for lab session 9 på dette link

http://dlego.mipzhap.dk/LabSession9.pdf

onsdag den 10. november 2010

Lab Report 1-8

Grundet problemer med udskrivning af lab reports direkte fra blogger.com har vi besluttet at udgive vores lab reports i pdf-format. Links til lab reports for session 1-8 kan findes her:

http://dlego.mipzhap.dk/LabSession1.pdf
http://dlego.mipzhap.dk/LabSession2.pdf
http://dlego.mipzhap.dk/LabSession3.pdf
http://dlego.mipzhap.dk/LabSession4.pdf
http://dlego.mipzhap.dk/LabSession5.pdf
http://dlego.mipzhap.dk/LabSession7.pdf
http://dlego.mipzhap.dk/LabSession8.pdf

Vi har ikke lavet lab session 6, da vi var forhindret i at komme til lab session 5, og derfor brugte vi den sidste lab session inden kvarterspausen til at lave lab session 5. Derfor har vi slet ikke arbejdet med konkurrenceopgaven.

torsdag den 7. oktober 2010

Lab Session 5

Black White Detection

Vi startede ud med at bygge robotten fra første lab session og montere lyssensoren som anvist i instruktionerne. Herefter satte vi os ind i funktionalitet af BlackWhiteSensor klassen og gav os derefter til at skrive en ny klasse som anvendte denne.

Vores klasse er relativt simpel og indeholder et loop, som anvender busy-wait til konstant at checke hvorvidt venstre eller højre knap på NXT enheden bliver trykket på. Hvis dette er tilfældet, så foretager vi en måling, viser værdien og hvorvidt det er en sort/mørk farve eller en hvid/lys farve.

Indmaden i control-loopet ser således ud:

boolean left = waitForLeftRight();

if (left)
{
LCD.clear();
LCD.drawString("The color is", 0, 0);
LCD.drawString("black: "+ blackWhiteSensor.black(), 0, 1);

LCD.drawString("Threshold="+blackWhiteSensor.getThreshold(), 0, 3);
LCD.drawString("Light value="+blackWhiteSensor.light(), 0, 4);
Thread.sleep(5000);
}
else
{
LCD.clear();
LCD.drawString("The color is", 0, 0);
LCD.drawString("white: "+ blackWhiteSensor.white(), 0, 1);

LCD.drawString("Threshold=" + blackWhiteSensor.getThreshold(), 0, 3);
LCD.drawString("Light value="+blackWhiteSensor.light(), 0, 4);
Thread.sleep(5000);
}



Line Follower with Calibration

I denne opgave anvendte vi de to klasser LineFollowerCal og Car sammen med BlackWhiteSensor klassen fra første opgave. Vores afprøvning af disse fungerede helt som forventet, og vores robot fik tilført power til enten venstre eller højre motor alt afhængigt af, om lyssensoren detekterede en mørk eller lys farve.



ColorSensor with Calibration

Her lod vi os inspirere af BlackWhiteSensor klassen fra de forrige to opgaver og udvidede blot denne for også at kunne detektere en blå farve, da en sådan farve var tilstede på testbanen.

Vi tilføjede følgende metode blue til vores nye ThreeColorSensor klasse og tilføjede også et par nye fields, som skulle bruges i forbindelse med black/blue og blue/white threshold. Vores test klasse implementerede vi i meget samme stil som i forrige opgave, hvor vi testede BlackWhiteSensor klassen. På denne måde var vi i stand til at detektere både hvid, sort og blå farve på NXT enheden.

public boolean blue()
{
int value = ls.readValue();
return (value > blackBlueThreshold && value <>
}

Vi valgte ikke at detektere grøn farve, som der bliver lagt op til i opgaven, da "goal" zonen på testbanen er blå :)



Line Follower that stops in a Goal Zone

I denne sidste opgave, hvor vi skulle anvende vores ThreeColorSensor, forsøgte vi først naivt blot at tilføje en case til LineFollowerCal klassen, sådan at vores robot ville stoppe, hvis lyssensoren målte en værdi, som repræsenterede en blå farve, jvf. nedenstående kode:

if (sensor.black())
Car.forward(power, 0);
else if (sensor.white())
Car.forward(0, power);
else
{
Car.stop();
Sound.beepSequenceUp();
}

Dette virkede dog ikke efter hensigten, da det gik op for os, at lyssensoren kommer ind i "else" casen, når farven skifter mellem sort og hvid, så her stoppede robotten næsten med det samme under vores test.

Vi huskede Ole's vise ord og tilføjede en ekstra lyssensor til vores robot, som kun skulle bruges til at detektere blå farve. For at dette skulle virke, måtte vi være sikre på, at den ekstra lyssensor under kørslen kun detekterer den samme farve (vi har monteret sensoren, så den kun ser hvid), for ellers ville vi havne i samme situation som før. Vi ændrede vores ThreeColorSensor klasse til at tage to sensorer i konstruktøren og ændre control-loopet til følgende:

public ThreeColorSensor(SensorPort blackWhite, SensorPort blue)
{
ls = new LightSensor(blackWhite);
blueSensor = new RCXLightSensor(blue);
// Use the light sensor as a reflection sensor
ls.setFloodlight(true);
blueSensor.setFloodlight(true);
}

while (! Button.ESCAPE.isPressed())
{
LCD.drawInt(sensor.light(),4,10,2);
LCD.refresh();
if (sensor.blue()) //Uses sensorport S1
{
Car.stop();
Sound.beepSequenceUp(); //WEEE!
Thread.sleep(1000);
break;
}
else if (sensor.black()) //Uses sensorport S4
Car.forward(power, 0);
else if (sensor.white()) //Uses sensorport S4
Car.forward(0, power);
else
{
//We should not end up here, but just to be safe!
Car.stop();
break;
}
Thread.sleep(10);
}

Desuden tilføjede vi et par threshold metoder, som vi brugte til at
detektere, hvorvidt robottens lyssensor målte en sort, hvid eller blå farve:


public boolean black()
{
return (ls.readValue() < blackWhiteThreshold);
}
public boolean white()
{
return (ls.readValue() > blackWhiteThreshold);
}
public boolean blue()
{
return (blueSensor.readValue() < blueWhiteThreshold);
}


Vi havde dog problemer med at få robotten til at opføre sig som forventet, da RCX sensoren tilsyneladende har en meget lav granularitet. Den læste 22 ved detektering af en blå farve og 28 ved hvid - ikke den store forskel! Dette havde den uheldige effekt, at de beskidte dele af banen blev fortolket som blå med RCX sensoren, og derfor stoppede robotten hurtigt. Vi er dog rimelig sikre på, at robotten ville opføre sig korrekt med to NXT sensorer, da disse havde større granularitet i målingerne. F.eks. målte denne lyssensor følgende værdier:

32 = black
40 = blue
54 = white

onsdag den 6. oktober 2010

Lab Session 4

Balancing Robot:

Vi anvendte Nathanael Wilson's samlevejledning til at bygge robotten. Derefter overførte vi i første omgang Sejway.java programmet uden at ændre på konstanterne i koden. Det virkede ikke så godt. Den kunne ikke holde balancen i meget mere en et enkelt sekund.

Vi prøvede så at ændre int konstanterne til de double værdier, som er angivet af Ole's kommentarer i noten om Sejway programmet og fjerne brugen af SCALE konstanten. Dette ændrede dog ikke noget særligt ved robottens adfærd.

Vi har forsøgt at få robotten til at balancere på gulvet (mørkeblå), et stykke hvidt papir og på bordet. Men ingen af stederne kan den holde balancen uanset hvilke små justeringer vi laver ved robottens hældning ved kalibreringen i starten af programmet.

Det virker som om, at robotten fint står og justerer sin balance i 1-2 sekunder, men herefter kører hjulene kun i én retning, enten forlæns eller baglæns afhængigt af den indledende kalibrering, og mister derfor balancen.

Vi har forsøgt at korrigere lidt ved primært den proportionelle konstant KP i programmet, men en forøgelse af denne konstant havde ikke nogen synlig effekt.

I noten står der, at en forudsætning for at robotten kan balancere er at batterierne er fuldt opladte, men resultatet var det samme med fuldt opladte batterier.