Deltagere:
Morten, Lars og Thomas.
Goal:
I løbet af dagens labsession skal der bygges en LEGO car, der udviser forskellig opførsel i forskellige situationer, ved brug af en lagdelt styring.
Plan:
Sideløbende med de aktiviteter der er foreslået til dagens labsession, testes forskellige LEGO-konstruktioner til slutprojektet, med hensyn til præcision. Vi valgte at beholde den nuværende bæltekonstruktion under denne lab-øvelse, istedet for LEGO konstruktionen på side 28-30 i instruktionsbogen.
For hurtigt at komme igang med at teste, er det valgt at anvende Capranis subsumption implementation SoundCar.java. Denne aggregerer 3 klasser der nedarver fra Behaviour.java, som igen nedarver fra java.lang.Thread. Meningen er at de 3 opførsler kører samtidig, men at opførsler på et højere niveau kan undertrykke eller forhindre lavere liggende opførsel, ie. suppresse dem.
Planen for dagen er som følger:
(1a) I første skridt observeres bilen med kun RandomDrive.java aktiveret.
(1b) I Andet skridt indkommenteres også AvoidFront.java.
(1c) Tredje skridt er at observere bilens opførsel med alle Behaviours aktiveret.
(2) Beskrive hvad det vil sige at en tråds Daemon-flag sættes til true.
(3) Undersøge og forklare hvorledes 'suppressed' bruges til at opnå kontrolleret adgang til motorerne.
(4) Der skal implementeres en yderligere 'Drive towards light'-behaviour i subsumptionmekanismen i SoundCar.java.
Aktivities:
Udover ovenstående punkter, blev der også brugt lidt tid på at lave justeringer af bælterne på NXT'en. og på at montere Sonar-sensoren. (aktivitetstid: ca. 25 min)
(1a)(1b)(1c) forløb som forventet.
I første skridt blev der alene observeret en kørsel i vilkårlig retning, uden at der blev taget højde for forhindringer, Det var således ikke muligt at undgå forhindringer.
I andet skridt tog AvoidFront.java over for RandomDrive.java, såfremt en forhindring blev detekteret. I de fleste tilfælde bemærkede AvoidFront.java de forhindringer robotten mødte,, og overtog styringen, dvs. satte 'suppressed' på den underliggende opførsel 'RandomDrive.java'.
I tredje skridt tog 'PlaySounds.java' over og kaldte stop() på motorene - udførte sin handling og lod de andre tage over igen. (aktivitetstid: ca. 40 min)
(2) At daemon-flaget sættes, betyder at main-metoden ikke skal vente på at tråden afsluttes, at vi ikke skal vente på et "join" eller interrupt'e, men at vi bare kan stoppe uden videre.
(3) 'suppressed' er en boolsk attribut hos en Behaviour, værdien kan sættes af en 'overliggende' Behaviour. Hvis en Behaviour har fået sin suppressvariabel sat til true, er meningen at den ikke må kunne sende kommandoer til Motoren. Dette er implementeret ved at tilføje en if-sætning inden kaldet til moteren. Hvis suppress er sand ignoreres kaldet til motoren.
(4) ToLight.java blev tilføjet i SoundCar.java, den blev indsat i mellem RandomDrive.java og AvoidFront.java. Vi brugte meget af koden fra forrige og tilføjede en lys-grænse på en værdi af 30. Hvis lysmålingen oversteg grænsen på 30, ville ToLight-opførslen tage over og undertrykke RandomDrive. (aktivitetstid: ca. 110 min)
Conclusion:
I gennem dagens labøvelser blev der opnået en indsigt i princippet for fler-laget kontrolsystem.
Det kunne være spændende, at teste skalerbarheden af Brooks koncept sammen med hardwaren i NXT'en.
Brooks' er tænkt til et meget lavere abstraktions niveau end Javas programmerings paradigme. Dette betyder at der enten bliver en meget tæt kobling, hvilket går imod principper for Java, eller også må man implementere en form for scheduleringsklasse - hvorved simpliciteten mistes, hvilket var det Brooks netop ville undgå.
fredag den 7. november 2008
Abonner på:
Kommentarer til indlægget (Atom)
Bidragydere
tagtagtag
- EndProject (9)
Ingen kommentarer:
Send en kommentar