Fremmødte
Pepe og Rfogh
Forbrugt tid
Påbegyndt kl. 12 afsluttet 14:48 -- 2 timer 3 kvarter.
Formål
Formålet med denne øvelse er at afprøve Arbitrator klassen for at udforske betinget adfærd.
Forventet Fremgangsmåde
Følgende spørgsmål er blevet stillet i opgaven:
- Press the touch sensor and keep it pressed. What happens ? Explain.
- Both DriveForward and DetectWall have a method takeControl that are called in the Arbitrator. Investigate the source code for the Arbitrator and figure out if takeControl of DriveForward is called when the triggering condition of DetectWall is true.
- Implement a third behavior, Exit. This behavior should react to the ESCAPE button and call System.Exit(0) if ESCAPE is pressed. Exit should be the highest priority behavior. Try to press ESCAPE both when DriveForward is active and when DetectWall is active. Is the Exit behavior activated immediately ?
- What if the parameter to Sound.pause(20) is changed to 2000 ? Explain.
To avoid the pause in the takeControl method of DetectWall a local thread in DetectWall could be implemented that sample the ultrasonic sensor every 20 msec and stores the result in a variable distance accessible to takeControl. Try that. For some behaviors the triggering condition depends on sensors sampled with a constant sample interval. E.g. a behavior that remembers sensor readings e.g. to sum a running average. Therefore, it might be a good idea to have a local thread to do the continous sampling. - Try to implement the behavior DetectWall so the actions taken also involve to move backwards for 1 sec before turning.
- Try to implement the behavior DetectWall so it can be interrupted and started again e.g. if the touch sensor is pressed again while turning.
Forsøg
Første forsøg, at få lagt bumperCar programmet i NXTen virkede fint, da vi benyttede Tribot modellen fra sidst var touch- og afstands sensoren allerede monteret, dog skulle portene rettes.
Når bilen kører frit kører den ret fremad. Når bumperen rammer noget bakker bilen ca. 5 cm og drejer omkring 30 grader mod venstre for at finde et frit område.
Hvis bumperen holdes trykket, gentages proceduren indtil trykket lettes.
Det står at læse ud fra JavaDoc'en (fundet i koden) at takeControl ikke bliver kaldt med mindre der ikke er andre der er aktive (herunder også detectWall)
For at implementere exit metoden blev en klasse Exit tilføjet der implements Behavior hvor det eneste interessante er at takeControl kontrollerer ESCAPE for tryk og har action(){System.exit(0);}
Da DetectWall bruger blokerende kald er det nødvendigt at vente til den er færdig før det er muligt at få den ønskede funktionalitet ud af ESCAPE trykket.
Sound.pause() venter det givne antal millisekunder før der sker noget nyt. Da dette også er en blokkerende handling ødelægger en forøgelse fra 20 til 2000 indtrykket af realtid. Pausen gør at der opstår standsninger mellem alle bevægelser robotten gør og gør robotten ude af stand til at detektere vægge den skulle være kørt ind i.
For at gøre det muligt at afbryde også når der bakkes, er bakke kaldene blevet lavet med et ikke blokkerende kald, og _suppress variablen læses og vurderes sammen med hjulenes bevægelse om handlingen skal afbrydes.
Der er implementeret en tråd i DetectWall til at måle afstanden. Denne skrives ud til en variabel i DetectWall klassen. Denne læses også i takeControl funktionen, og hvis den er under 25 undviges der.
Rent trådsikkerhedsmæssigt er dette også forsvarligt, da det kun er en enkelt variabel der ændres vil takeControl enten læse den nye eller den gamle værdi.
Bevægelsen baglæns blev implementeret ved at øge den afstand de enkelte hjul i forvejen kører. Ved at forøge begge med samme værdi kører tribotten bagud i længere tid inden den drejer.
Forløsning
Arbitrator klassen åbner op for betinget adfærd, dog ikke i større grad end det subsumption vi tidligere har behandlet.
Den største forskel i de to er måden det kodes op på. Begge bruger tråde og begge kan afbryde "laverestående" tråde.
Hvis vi havde mere tid kunne forskellen dog have været implementeret idet det er muligt med arbitratoren at lade de enkelte tråde returnere værdier i stedet for sandt eller falsk.
Det at der er en arbiter giver mulighed for at prioritere efter motivation frem for efter prioritet, en mulighed der ikke er til stede i den tidligere model, hvor hvad der sker kun afgøres af mere eller mindre frivillig afgivelse af kontrollen til en anden der er højere eller lavere i hierarkiet.
Ingen kommentarer:
Send en kommentar