tirsdag den 11. januar 2011

2011/01/11 - Line

11. januar

Tilstedeværende: Line
Varighed: 4 timer
Mål: Få robotten til at vende i enderne selvom den har ramt en bold, evt. at få robotten til at køre tættere på bolden inden den skyder. Bygge den anden robots skydearm om.
Plan: Starte med at få robotten til at køre rigtigt, herefter finjustere skydningen

Mystisk problem hvor robotten ikke skiftede retning i enderne selvom dette var den behavior der havde 1.prioritet. Efter lang tids debug + hjælp fra Ole og en anden gruppe fik vi løst problemet, jeg havde været så tumpet at tænke suppress og release lidt som låse som vi kender dem fra concurrency og derfor gladeligt ændret på globale variable - der overhovedet ikke var supressed. Problemet blev løst og robotterne kører nu pænt.
Koden så således ud før problemet blev løst:

public class searchBehavior() extends Behavior{
...
supress();
dir = getDirection();
stop();
delay(500);
driveCloserToBall();
kick();
//TODO: send signal
setDirection(dir);
release();

}
           

Dette problem resulterede i at robotten ikke altid skiftede retning når den nåede enden. Dette skete kun når robotten også skulle slå til bolden. Dette skete når vi så en bold og derfor satte dir = getDirection(), herefter så vi sort og derfor i stopBehavior kaldte setDirection(!getDirection) hvorefter vi i searchBehavior fortsatte og kaldte setDirection(dir) og dermed satte den tilbage til det den var før robotten så sort.

Da setDirection ikke længere var i koden (og driveCloserToBall også var udkommenteret) for searchBehavior kørte robotten igen som forventet, bortset fra at den ikke altid stoppede når den skulle skyde til en bold.

Konklusion
Jeg har fået robotten til at køre mere stabilt, og som forventet, da jeg indså jeg ikke skulle ændre på globale variable i mere end en behavior.
Det næste der skal laves er funktionaliteten med at køre tættere på bolden inden der skal skydes, og at robotten stopper hver gang den ser en bold.

Ingen kommentarer:

Send en kommentar