Lab 9

Dato: 19 - 04 - 2012
Varighed: 5 timer
Tilstedeværende: Jonas, Simon


Siden sidst
Der er blevet snakket om End Course Project. Vi vil gerne lave et interaktivt spil, kaldet Rabbit Hunt. Her bevæger spilleren sig i en gridbaseret verden og skal så prøve at undgå to jægere, som styres af en AI.


Goals
Målet med denne laboratorieøvelse er at forsøge at bygge en bil som kan bevæge sig mellem to eller flere punkter i et kartesisk koordinatsystem i stil med det der bliver beskrevet i [1].


Plan
For at opnå målet ovenfor har vi lavet følgende plan.
  1. Lave et program i stil med det der bliver beskrevet i [1].
  2. Køre en række test hvor robotten skal køre mellem en række punkter, for at ende op i startpunktet.
  3. Ombygge robotten, så den kan undvige forhindringer samtidig med den bevæger sig rundt.
  4. Udvide robottens navigation, så den bruger formlen beskrevet i [2].
Results


1: Programmet, er blevet lavet ved hjælp af DifferentialPilot klassen. Klassen giver mulighed for at få robotten til at dreje og køre meget præcist, efter at diameteren på hjulene og afstanden mellem dem er blevet indtastet. Programmet er opbygget sekventielt, hvor afstande og vinkler er blevet indtastet på forhånd. Et udpluk fra programmet kan ses nedenfor.
DifferentialPilot robot = new DifferentialPilot(56, 123, Motor.C, Motor.B);
robot.setAcceleration(150);
robot.setTravelSpeed(280);
robot.setRotateSpeed(28);
robot.travel(1000);
robot.rotate(145);
double turn = Math.sqrt((Math.pow(500, 2) + (Math.pow(500, 2))));
robot.travel(turn);
robot.rotate(135);
robot.travel(750);
turn = -(180 - Math.toDegrees(Math.atan(2)));
robot.rotate(turn);
turn = Math.sqrt(Math.pow(500, 2) + Math.pow(250, 2));
robot.travel(turn);
Figur 1
 2: Der er blevet kørt nogle test med bile hvor denne skulle køre mellem de punkter som er vist på figur 1.
Først viste det sig at robotten overstyrede når den skulle dreje, hvilket resulterede i at vinklen den skulle dreje ikke blev korrekt. Dette blev rette ved at rotationshastigheden blev sat nem, som det er vist i kodeudplukket linie 4. Samtidig blev makshastigheden og accelerationen sat ned for at sikre at bilen stoppede når den skulle.
For at given en bedre idé om hvor godt robotten klarede sig, blev der sat en white board marker til robotten og den blev stillet på et white board der var blevet lagt på gulvet. Dermed kunne man nemmere se hvor godt den kører. En video af kørslen, samt et billede af stien kan ses nedenfor.
Billede 1



Det optimale sted at sætte white board markeren, ville være midt imellem de to hjul, da den så ville markere stien bedst. Men sådan som den er sat i vore forsøg, giver stadig en rigtig god idé om hvor god robotten er til at finde vej.
Billede 2
3: Der er blevet sat en ultrasonisksensor på forsiden af robotten, for at den kan opfange hvis der er en forhindring foran den. Dette kan ses på billede 2. Selve robotten er blevet implementeret ved hjælp af Behavior.java. Der er lavet to behaviors; MoveBehavior og AvoidBehavior. MoveBehavior vælger en tilfældig vinkel og drejer derhen. Derefter vælger den en tilfældig afstand som robotten skal køre. AvoidBehavior har præcedens over MoveBahvior og lytter hele tiden på om afstanden til en forhindring fremad er mindre end 50 cm. Hvis det sker, stopper den robotten, drejer 90 grader mod uret og "ser" om der er frit. Hvis der er frit, frigiver den kontrollen, ellers bliver den ved med at dreje 90 grader indtil der er frit.
Nedenfor ses en video af robotten i aktion.

4: Dette punkt blev desværre ikke nået, da tiden var knap.




References

  • [1], Brian Bagnall, Maximum Lego NXTBuilding Robots with Java Brains, Chapter 12, Localization, p.297 - p.298.
  • [2], Java Robotics TutorialsEnabling Your Robot to Keep Track of its Position.