Dato: 18/11 2010
Varighed: 3 timer
Tilstedeværende: Daniel, Lars Christian og Line
Plan: Løse opgaverne fra toppen og nedaf.
Mål: Lave øvelserne om behaviorbased architecture
Metode: En person arbejder på ideer til end-course project, en arbejder på koden til dagens opgaver og den tredje laver lab-report og diverse.
BumperCar
Få BumperCar til at køre på NXT og observer.

- Press the touch sensor and keep it pressed. What happends ?
It backs away and turns, and keeps doing that until you stop pressing then sensor, then it drives foreward.
- 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.
Fordi Arbitrator [http://lejos.sourceforge.net/nxt/nxj/api/index.html] finder den behavior [http://lejos.sourceforge.net/nxt/nxj/api/index.html] med højest prioritet ved hjælp af en forløkke der løber igennem alle behaviors og returnerer den første behavior der returnerer true på takeControl, så bliver takeControl på DriveForward ikke kaldt hvis DetectWalls takeControl returnerer true og DetectWall ligger før DriveForward i listen af behaviors. DriveForward ligger før DetectWall, dvs. DriveForwards takeControl altid bliver kaldt.
- Implement a third behavior,
Exit . This behavior should react to the ESCAPE button and callSystem.Exit(0) if ESCAPE is pressed.Exit should be the highest priority behavior. Try to press ESCAPE both when DriveForward is active and whenDetectWall is active. Is theExit behavior activated immediately ?
Nej.
Hvis escape bliver trykket mens vi er igang med at køre en action, venter vi til denne er færdig med at kalde exit. Hvis denne action tager lang tid at udføre kan monitor-tråden overskrive vores exit- behavior med en anden behavior der har takeControl til true. Hvis man holder escape-knappen nede kan dette ikke ske.
Det kan også ske at monitor-tråden ikke når at opfatte exit-behavior prøver at tage kontrol, idet takeControl på exit behavior kun returnerer true når Escape holdes nede. I dette tilfælde bliver der ikke kørt exit-behavior.
What if the parameter to Sound.pause(20) is changed to 2000 ? Explain.
Hvis Sound.pause ændres til 2 sekunder i stedet for 20 ms skal vi vente længere når detectWall prøver at tage kontrol og når monitor-tråden undersøger hvem der har kontrol.
- 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.
Nu bruger DetectWall den sampling samp (Sampling klassen kan findes neders i BumperClass) har
gemt, i stedet for at lave en ny måling hver gang. Dette skulle gerne gøre at vi ikke længere skal vente
de 20 ms som vi skulle før, beskrevet ovenfor.
- 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.
Vi har forsøgt at implementere de to sidste punkter. Vi stødte på nogle problemer undervejs i form af en java exception.
Koden kan ses her:
Ingen kommentarer:
Send en kommentar