onsdag den 21. januar 2009

lab 5

Hvornår: Onsdag d. 21/1
Hvem: Asger, Peter, Michael
Varighed: 15 timer

Mål




  • Lave testopstillingen

  • Konstruere behaviors til robotten

  • Udvide bluetooth forbindelsen til at kunne sende flere beskedtyper

  • Lave 2 vejs bluetooth kommunikation



Arbejdsgang



Testopstilling



I dag konstruerede vi testopstillingen. Til dette brugte vi følgende ting:


  • Webcam + lang ledning

  • Træpinde

  • Tape





Det tag der sidder i hjørnet af banen repræsentere vores nulpunkt,
således at kameraets placering er underordnet.

De tags der sidder på robotterne er placeret så de sidder lige over
hjulaksen, så deres koordinater ændre sig så lidt som muligt når de
rotere om sig selv.


Player abstraktionen



Vi lavede vores abstraktion af en spiller i player klassen.

En spiller skal kende til et SoccerField, så spilleren har mulighed
for at få sin egen position, modstanderens position og boldens
position.

Ud over det bruger vi til spilleren en tachonavigator, som senere blev
udskiftet med vores egen CamTachoNavigator. Dette har vi gjort for at
spilleren løbende kan opdatere sin position mellem opdateringer fra kameraet.

Spilleren skal så initialiserer sine behaviors og disse overtager herfra.

code
http://www.daimi.au.dk/~mkm/LEGO/project/src/legodart/nxt/Player.java
http://www.daimi.au.dk/~mkm/LEGO/project/src/legodart/nxt/SoccerField.java
http://www.daimi.au.dk/~mkm/LEGO/project/src/legodart/nxt/CamTachoNavigator.java

Autonomous behavior model



De første 3 behaviors blev lavet til spillerne. En behavior som får
dem til at løbe om bag ved bolden, en der vender dem mod bolden og en
som får dem til at løbe med bolden mod målet.
Uddybende forklaring på de forskellige behaviors kan findes i lab
reporten for d. 22/1

code

http://www.daimi.au.dk/~mkm/LEGO/project/src/legodart/nxt/DriveTowardsBall.java


http://www.daimi.au.dk/~mkm/LEGO/project/src/legodart/nxt/FaceBallBehavior.java


http://www.daimi.au.dk/~mkm/LEGO/project/src/legodart/nxt/Dribble.java


http://www.daimi.au.dk/~mkm/LEGO/project/src/legodart/nxt/Stopped.java


Problemer



Testopstilling



Vores bold er en del lavere end robotterne, og det er derfor muligt
for dem at skygge for dens tag, når det sker vil positionen af bolden
ikke blive opdateret, og robotterne vil navigere efter forældet
information indtil bolden igen er synlig.

Bluetooth er mildt sagt lidt problematisk på NXT'erne, og det er
begrænset hvor hurtigt vi kan sende ny information til vores
robotter. Derfor arbejder de efter lidt forældet information, hvilket
giver problemer ved bl.a. rotation. I nogle tilfælde, hvor vores robot
skal rotere 180 grader om sig selv, får den forældede informationer,
som siger at den stadig mangler at rotere 180 grader. Dette resultere
i at den konstant drejer rundt om sig selv. Vi har yderligere
undersøgt problemet og fundet ud af at når man bruger goTo metoden i
lejos TachoNagigator, så laver den først et blocking kald til rotate
metoden for dernæst at lave et nonblocking kald til travel metoden,
hvis man velogmærke har bedt den om at lave imediately return. Altså
ligger en del af problematikken også her at man ikke løbende opdateres
med den nyeste rotation.

Sende forskellige typer beskeder via bluetooth



Indtil videre har vi kun kunne sende en slags beskeder til robotten,
nemlig beskeder hvori der står informationer om position og rotation
på robotterne. Målet er så at udvide dette således vi kan sende
flere slags beskeder til robotten, med information om at de skal
starte, stoppe eller måske lukke programmet ned.

For at kunne sende forskellige slags beskeder har vi lavet en
konvention for hvordan de nye beskeder er konstrueret. Det blev
følgende format:


-----------------
| Type | Besked |
-----------------


Type er en byte der siger hvilken type den sendte besked er, hvor
Besked er en serie af bytes der er indholdet af beskeden. Det er
således optil den enkelte beskedtype at vide hvorlang beskeden er.

Vi har lavet et switch statement der så tjekker på byten Type. Udfra
denne information konstrueres et objekt med supertypen Message, denne
nye besked bliver så sendt til alle objekter der har bedt om at få
besked når der kommer nye beskeder.

Det er let at understøtte nye beskedtyper, fordi det eneste det
kræver, for at lave en ny type besked er at lave en klasse der
nedarver fra Message http://www.daimi.au.dk/~mkm/LEGO/project/src/legodart/util/Message.java

Tovejs kommunikation mellem computer og NXT'er



Vi vil gerne kunne sende beskeder fra NXT'en til computeren, for
bl.a. at få en ide om hvordan dens opfattelse af virkeligheden er.

Dette er en simpel udvidelse af koden som vi ellers har brugt til
Bluetooth kommunikationen, NXT'ens kode skal udvides med en tråd der
sender beskeder via bluetooth og computer versionen af koden skal
udvides med en tråd der lytter efter bluetooth data og parser
beskederne der kommer.

Dette er tilmed også det sidste vi har lavet på bluetooth koden. De
følgende 4 filer er dem der er ansvarlige for bluetooth
kommunikationen.

Sender beskeder, http://www.daimi.au.dk/~mkm/LEGO/project/src/legodart/util/BTSender.java

Konstruerer beskeder, http://www.daimi.au.dk/~mkm/LEGO/project/src/legodart/util/MessageFactory.java

Computer specifik kode for afsending og modtagelse af beskeder, http://www.daimi.au.dk/~mkm/LEGO/project/src/legodart/pc/Sender.java

NXT specifik kode for afsending og modtagelse af beskeder, http://www.daimi.au.dk/~mkm/LEGO/project/src/legodart/nxt/BTConnection.java

Derudover er er der i pakken legodart.util implementationen af de
forskellige beskedtyper og interfaces som man skal implementere hvis
man vil notificeres om modtagene bluetooth beskeder.

Konklusion



Testopstilling



Om end vi opdagede nogle nye problemstillinger fungerede banen fint,
givet at det var første test med hele systemet.

Autonomous behavior model



Der var et par problemer med opførslerne.

Drive towards ball ville ikke altid køre om bag bolden, men kunne køre
lidt forvirret rundt ved siden af bolden. Vi mener at dette skyldes
det delay vi har når billeder fra kameraet skak processeres og
derefter sendes til robotten, så robotten bliver opdateret med en lidt
forældet position. Vi vil prøve at fikse dette senere i
CamTachoNavigator.

Dribble opførslen stopper ofte for tidligt med at drible og går
tilbage til drive towards ball. Dette mener vi kan rettes ved at
tweake parametre.

Ingen kommentarer: