torsdag den 12. april 2012

Lego LAB uge 7

Tilstede:
Mikkel Nielsen
Søren Bramer Schmidt
Peter Jessen


Tid brugt:
2 timer

Mål

Målet med dagens øvelse er at afprøve SoundCar med forskellige samtidigt kørende adfærd, som beskrevet på ugeseddel 7. 






Plan
Planen er skrevet således, at vi følger opgaveformuleringen for uge 7. [1]
Vi vil:
1. Opbyg robot med ultrasonic sensor, som beskrevet i bygningsmanualen side 8-22 og side 28-30.
2. Installere og køre SoundCar og observere dens adfærd ved at adskille de 3 adfærd.
3. Tilføje en lysfølsom adfærd.

Resultater

 1.Bygning af robot

Vi byggede robotten som beskrevet i manualen. Vi valgte at bruge standard robotten for at undgå potentielle fejl med den robot-race robot som vi byggede på sideløbende.


 2. Observation af SoundCar

Vi kørte først programmet med alle 3 adfærd kørende samtidigt. Vi kunne observere robotten kører tilfældigt rundt med et par sekunders mellemrum, spille en lyd og undgå forhindringer ved at bakke tilbage og dreje til venstre. For at bedre kunne observere de 3 adfærd skilte vi dem ad ved kun at starte enkelte tråde. Med RandomDrive som eneste tråd kunne vi observere at robotten kørte i omkring et sekund hvorefter den holdt pause i et par sekunder. Kørslen var tilfældig mellem at kører fremad, og køre på de enkelte motorer hver for sig. Med PlaySound seperat, spillede robotten regelmæssigt en lyd hvert 10. sekund. AvoidFront alene reagerede når robotten observerede en forhindring 20 cm foran sig. Adfærden var at bakke tilbage og dreje.

 Vi kørte herefter alle 3 tråde samtidigt igen for at teste de forskellige adfærds prioriteter. Vi kunne observere at lyden altid blev spillet med 10 sekunders mellemrum ligegyldigt af hvad robotten ellers foretog sig. Vi kunne også observere at RandomDrive adfærden udeblev når der var en forhindring foran ultrasonic sensoren. Dette passer godt overens med prioriteterne fra denne tegning:   




I konstruktoren for Behavior klassen bliver alle threads gjort til deamon. Dette har den effekt at når en thread dræbes, trækker den alle sine underthreads med ned. I suppress metoden bruges en suppressCount som tæller op for at markere at en thread er suppressed. Dette vil ske når en højere prioriteret thread suppresser sine under-threads for at udføre dets handling.

Fred Martin [2] bygger sin prioritetsalgoritme anderledes. Her er der en overordnet prioritetskø som styre hvilken tråd der skal køre ud fra deres prioriteter. Dette er i højere grad en topstyring af prioriteten. I SoundCar er prioriteten implementeret med et hieraki. Hvis en thread vil køre, og den har højere prioritet, vil den altid komme til, på bekostning af de andre. Prioriteten er derfor styret uden en ekstern prioritetsagent.

3. Tilføjelse af lys-følsom adfærd

Vi udbyggede robotten med en lys-sensor.

Herefter skrev vi kode til lys-styringen, således at vi kan prioritere den forskelligt i forskellige test. Vi valgte at lave den lysfølsome adfærd med et threshold, således at robotten kun reagerede ved stærk lys-påvirkning, f.eks. fra en lygte.

Kode fra ToLight behavioren:

public void run() 
    {
        while (true)
        {
            int lightValue = ls.getLightValue();
         
            while ( lightValue < lightThreshold )
            {
                lightValue = ls.getLightValue();
                drawInt(lightValue);
            }

            suppress();
            
            forward(100, 100);
            drawString("f");      
            delay(1500); 
      
            stop();
            drawString("s");
            delay(100);
      
            drawString(" ");
      
            release();     
       }
    }


I testen her er den lys-følsomme adfærd prioriteret under AvoidFront og over RandomDrive. Prioriteten kunne selvfølgelig også være anderledes.

Demonstration:



 Status

Vi blev færdige med dagens planlagte, noget korte, program. Vi vil næste gang arbejde på at bygge robot-race robotten færdig.


Referencer
[2] Fred G. Martin, Robotic Explorations: A Hands-on Introduction to Engineering, Prentice Hall, 2001.
[3] Kode for uge 7

Ingen kommentarer:

Send en kommentar