Varighed: 10 timer
Deltagere: Nick, JC, Allan
Formål:
Vi skal lave koden til mobiltelefonen, så vi kan teste billederne den tager, når robotten bevæger sig. Vi skal arbejde videre med banen, for at sikre at den virker sammen med klodserne og vi skal begynde på koden til den endelig robot, så robotten kan finde vej vha. lyssensorerne.
Derudover skal ultrasonicsensoren flyttes, da mobiltelefonen er i vejen, når afstanden måles.
Plan:
-Lave et program til mobiltelefonen, der tager billeder
-Teste robotten på banen med en klods
-Arbejde på koden til lyssensorene
-Ultrasonicsensor flyttet og testet
Test af robot med klods
Vi testede vores robot med en klods i kloen på banen.
Som det kan ses på videoen, så kan kloen ikke holde godt nok fast i klodsen på vores bane. Vi har tapet kanterne mellem papirene, men klodsen vælter stadig. Vi besluttede os derfor for at ændre på kloen frem for at ændre på banen. Dette blev gjort ved at tilføje en ekstra klo på hver siden, så den samlede klo nu har et ordenligt greb om klodsen. Videoen kan ses her:
Videostream
Ultrasonicsensor:
Vi har flyttet den ultrasoniske sensor fremad på robotten, så den nu kan se henover mobilen. Vi har lavet en simpel adfærd til robotten, når den er ved at støde ind i noget. Koden kan ses her:
package BrickSorter;
import Robot.DistanceSensor;
import Robot.LightSensorNavigator;
import Robot.Movement;
import lejos.nxt.LCD;
import lejos.nxt.Sound;
import lejos.robotics.subsumption.Behavior;
public class DetectWall implements Behavior {
private DistanceSensor ds;
private LightSensorNavigator lsn;
public DetectWall(DistanceSensor distanceSensor, LightSensorNavigator lightSensor)
{
ds = distanceSensor;
lsn = lightSensor;
}
public boolean takeControl()
{
int distance = ds.getDistance();
String sd = "" + distance;
if(distance < 100) sd = "0" + sd;
LCD.drawString("Distance: " + sd, 0, 1);
return distance < 15;
}
public void suppress()
{
//Since this is highest priority behavior, suppress will never be called.
}
public void action()
{
int left = lsn.getLeft();
int right = lsn.getRight();
if(left > right){
Movement.drive(-40, -40);
Sound.pause(500);
Movement.drive(40, -40);
Sound.pause(500);
}
if(left < right){
Movement.drive(-40, -40);
Sound.pause(500);
Movement.drive(-40, 40);
Sound.pause(500);
}
}
}
Opførelsen tjekker om sensoren giver en værdi under 15. Hvis dette sker, overtager DetectWall og sørger for at robotten bakker væk fra væggen. Robotten tjekker hvilken lyssensor, der har den højeste værdi, så den kan bakke i den rigtige retning og vende sig ned mod afleveringszonerne.
Alt koden kan findes her http://daimi.au.dk/~u052912/Lego/end_course_uge50/
Navigering med lyssensore:
package BrickSorter;
import Robot.Claw;
import Robot.LightSensorNavigator;
import lejos.robotics.subsumption.Behavior;
public class NavigateBack implements Behavior{
private LightSensorNavigator lsn;
private boolean _suppressed = false;
public NavigateBack(LightSensorNavigator lsn) {
this.lsn = lsn;
}
@Override
public void action() {
int right = lsn.getRight();
int left = lsn.getLeft();
}
@Override
public void suppress() {
_suppressed = true;// standard practice for suppress methods
}
@Override
public boolean takeControl() {
return true;
}
}
Vi er langsomt begyndt på denne opførelse, men som det kan ses i koden, så er det ikke færdigt. Det vil vi se på næste gang.
Adfærdshierarki:
Vi har nu to adfærd, DetectWall og NavigateBack, som skal sættes ind i et adfærdshierarki (subsumption achitecture [Dean3]).
Vores nederste adfærd i hierarkiet er NavigateBack som skal søge mod målzonerne, og skal altid tage kontrollen hvis den ikke bliver undertrykt af et af niveauerne over den. I dette tilfælde er det DetectWall, der tjekker om afstandsmåleren giver en værdi under 15, og tager kontrollen hvis dette er tilfældet.
Dette hierarki skal udbygges med flere adfærdsmønstre for at fuldende robotten.
Resultat for denne uge
Vi fik ombygget kloen til at bedre kunne holde på klodsen, så den ikke vælter når den bliver ført rundt på banen.
Vi fik taget billeder med mobiltelefonen fra robotten. Vi skal arbejde videre med androidkoden, da vi skal kunne tage billeder med ca. 100 ms mellemrum.
Vi fik i ultrasonicsensoren til at virke med en opførelse, så robotten nu bakker væk fra vægge, og vender sig mod målzonerne.
Afslutnngsvis begyndte vi på koden til navigering vha. lyssensorene og farverne på banen, men denne del skal vi arbejde mere med.