Med Asbjørn, Christer og Jesper

fredag den 23. november 2007

NXT programmering, lesson 10

Tidsforbrug: 3 timer. Deltagere: Asbjørn, Christer og Jesper.
I dag vil vi undersøge hvordan en adfærdsbaseret arkitektur er implementeret i leJOS NXJs subsumption API.

Vi vil gennemgå disse skridt et for et:
  • BumperCar
    • Ombygge bilen ved at tilføje touch sensor.
    • Hvad sker der hvis man holder touch sensoren inde?
    • Tilføj 3. adfærd.
  • En ny arbitrator.
  • Motivation functions.
  • Resten af tiden.
    • Da Jesper er bortrejst i næste uge, påbegynder vi projekt-brainstorm nu.
BumperCar.
Tidsforbrug: 1 time.

Vi hentede BumperCar koden, tilføjede en touch sensor på bilen og kørte koden. I første omgang kørte bilen baglæns, da vores nuværende konstruktion har motorerne vendt modsat.

Hvis man holder touch sensoren inde, stopper bilen helt. HitWall udføres én gang og bilen venter da på at sensoren slippes igen. På grund af arbitratoren kan den ikke komme videre før sensoren slippes. Hvis takeControl i DriveForward kaldes mens HitWall er aktiv, busy-waiter den indtil sidstnævnte bliver inaktiv.

Sidste delopgave her var, at implementere en tredje adfærd med højeste prioritet. Vi valgte en musikafspiller som foreslået i opgaven. Hver gang den spiller, trumfer den alle de andre adfærdsmønstre. Det vil sige, at når vi holder touch sensoren inde, vil musikadfærden før eller siden komme og undertrykke HitWall, hvorefter robotten ikke behøver vente på at sensoren slippes.
Det er ikke altid at arbitratoren virker som den bør. Det kan godt ske at HitWall fortsætter med at kontrollere motorerne. Det vil sige, at en lav-prioritets adfærd godt kan undgå at blive undertrykt af en høj-prioritetsadfærd.

En ny arbitrator.
Tidsforbrug: 1/2 time.

Vi hentede og compilede den nye arbitrator. Denne gang ser vi en ny adfærd ved HitWall. Nu gentager den undvigemanøvren indtil touch sensoren slippes. Til gengæld virkede vores musikafspiller ikke mere. Den kom aldrig "til fadet" her på trods af sin høje prioritet.

Motivation functions.
Tidsforbrug: 1/2 time.

Man kunne ændre takeControl til at returnere en motivationsværdi. I tilfældet med touch sensoren og HitWall kunne den returnere en værdi når den trykkes og eksempelvis 0 når den ikke trykkes. Jo højere, jo mere motivation. Arbitratoren kunne da bestemme adfærd ud fra disse værdier. Med andre ord kunne man udskifte de statiske prioriteter med dynamiske prioriteter bestemt ud fra sensor input.
Dette svarer cirka til idéen i Thiemo Krinks motivation functions. Touch sensorens input mappes af en funktion til en motivationsvariabel for berøring, som decision-makeren aktiverer et behavior-pattern ud fra. Den adfærd der er mest motivation for, HitWall, udføres og robotten undviger ved at ændre retningen på motorerne.

Resten af tiden.
Tidsforbrug: 1 time.

Da Jesper er på Island i næste uge, besluttede vi at påbegynde projekt-brainstorm nu.

Ingen kommentarer: