torsdag den 19. april 2012

Lego LAB uge 9

Tilstede:
Mikkel Nielsen

Peter Jessen


Tid brugt:
5 timer

Mål

Målet med dagens øvelse er at afprøve navigation via tacho-counters og prøve de forskellige esperimenter beskrevet på ugeseddel 9.[1]






Plan
Planen er skrevet således, at vi følger opgaveformuleringen for uge 9. [1]
Vi vil:
1. Opbyg robot med ultrasonic sensor, som beskrevet i bygningsmanualen side 8-22 og side 28-30.
2. Tilføje en marker så robotten trækker et spor efter sig.
3. Programmere og installere et program der er baseret på differentialPilot klassen.
4. Tilføje en avoid funktion der kan undgå forhindringer.

Resultater

 1. og 2. Bygning af robot

Vi byggede robotten som beskrevet i manualen. Vi valgte at bruge standard robotten, da den er nem at tilføje flere elementer til. Vi tilføjede en marker-tus ved at bruge elastikker der trækker tussen efter robotten.


  3. Programmet

Vi brugte differentialPilot til at syre robotten. Vi programmerede robotten således at den køre lige frem 20 cm, for herefter at dreje 90 grader til venstre. Denne lille sekvens gentog vi så 4 gange for at få robotten til at køre i en firkant.

Koden er vist her:


DifferentialPilot pilot = new DifferentialPilot(5.75f, 12.0f, Motor.A, Motor.C);

pilot.setTravelSpeed(10);
pilot.setRotateSpeed(30);

for(int i = 1; i <= 4; i++) {
pilot.travel(20);
pilot.rotate(90);
}


Vi tilførte herefter en marker tus og lod robotten køre rundt på et whiteboard på gulvet. Resultatet er som vist på videoen her:



Som man kan se stopper tussen cirka 1-2 cm fra hvor den startede. Dette fik vi fixet ved at ændre hjuldiameteren fra 5.6 cm til 5.75 cm. Dette fik tussen til at ramme inden for ½ cm af hvor den startede.


På den næste video, hvor vi havde ændret hjuldiameteren, er robotten sat til at køre firkanten 3 gange i træk. Som man kan se på videoen rammer tussen meget præcist oven på stregen fra de foregående omgange.



Vi lod herefter robotten kører firkanten 10 gange for at se forskellen. Her blev resultatet, at robotten kørte mere og mere upræcist. Som man kan se på billedet, er den 10. omgang markant anderledes end de foregående 9. Vi betragter dog denne omgang som en outlier, der skyldes en ukendt fejlkilde.





4. Avoid funktion

Vi tilføjede et while loop således at robotten vil afbryde sine kørsler fremad, såfremt den opdager at der befinder sig en forhindringer indenfor 10 cm foran robotten. I såfald skal robotten gå direkte til at dreje. Vi ændrede programmet til at køre en tilfældig afstand fremad og dreje et tilfældigt antal grader.

kode for tilfældig kørsel:




DifferentialPilot pilot = new DifferentialPilot(5.75f, 12.0f, Motor.A, Motor.C);
UltrasonicSensor sensor = new UltrasonicSensor(SensorPort.S1);

pilot.setTravelSpeed(10);
pilot.setRotateSpeed(30);

Random random = new Random();

while (true) {
pilot.travel(random.nextInt(200), true);

while (pilot.isMoving()) {
if (sensor.getDistance() <= 10) {
pilot.stop();
}
}

pilot.rotate(random.nextInt(180));
}




Resultatet er som vist på videoen her:



BONUS:

Vi prøvede tilsidst at tilføje en ekstra marker og legede lidt med variablerne i koden for at få robotten til at tegne en blomst. resultatet kan ses her:



 

 Status

Vi blev færdige med dagens program. Vi nåede det vi havde planlagt at lave, og fik samtidig tid til at lave en pæn tegning. Vi fandt ud af, at det svære problem er, at finde ud af, hvor robotten er efter den har roteret. Det er nemt at holde styr på hvor man er efter at have kørt lige ud. Udfordringen er at finde ud af hvor robotten er efter at have drejet.


Referencer

Ingen kommentarer:

Send en kommentar