Kristan Andersen, Simon Lykke, Jacob Styrup Bang

mandag den 14. januar 2008

Lab Notebook 8


Date: 14.1.08
Duration of activity: 9:15-14:00
Group members participating: Simon, Jacob og Kristian

Dagens mål:
  • Løse memory leak problem
  • Få ordnet de infrarøde kilder
  • Teste videre på den kode vi har lavet

Løse memory leak problemet fra sidst
Oprindeligt havde vi tænkt os at tage en behavior af gangen. Altså lade en Behavior' køre, mens vi aflæser hukommelsesforbruget for at finde den eller de Behaviors, hvor der er memory leaks. Istedet valgte vi at flashe med den nye version af leJOS, da den indeholder garbage collection. Det gik over alt forventning. Programmet compilede og virkede med det samme! Udover vi ikke behøver at tænke over memory leaks kan koden nu også laves mere overskuelig, når man ikke skal erklære værdier uden for fx loops.
Infrarøde kilder
Vi nåede ikke at få målt spændingen over en motorport sidst, så vi tog NXT'en over på elektronik værkstedet og fik det gjort. Spændingen er 8,3 V, ved fuld opladning (samme værdi som kan måles i leJOS). Over hver diode skal der være en spænding på 1.7V. Dvs. at vi kan kan sætte 4-5 dioder i serie og tilslutte dem en motorport. Iflg. Hardware Developer Kit, page 5, kan en outputport kontinuert give en strøm på 700mA, hvilket vi fik at vide var tilstrækkeligt.

Teste videre på den kode vi har lavet
NXT'en opførte sig ikke helt som vi forventet. Vi har sat den til at skrive ud, hvilken Behavior der er aktiv, men den skifter ikke korrekt og engang imellem kørte robotten ud over banen. Derfor kiggede vi koden igennem for at få rettet de bugs der var.
Et af problemerne var at robotten hakkede meget i kørslen. Vi fandt ud af det skete når fx forward blev kaldt på en motor, mens den allerede kørte forward. Fejlen opstod efter vi havde opdateret leJOS til 0.5.0. Løsningen var at lave et tjek på hvilken mode motoren kørte i og kun kaldte forward, hvis det var nødvendigt.
Et andet problem var at vi brugte Thread.sleep i "RandomDrive". Det medførte at robotten undertiden stod stille i op til 1 sek, når den skiftede Behaviors. Istedet brugte vi busy waiting, hvilket løste problemet.
Vi var kommet godt igennem "RandomDrive" og "StayOnTrack", dog manglede der en anden opførsel når NXT'en skulle avoide. Når robotten skal avoide vil vi gerne have den stadig skal kunne se den anden robot med den infrarøde modtager. Dvs. at den skal køre baglæns, når den skal avoide. Vi lavede ændringer i "Locomotion", så den tager en boolsk værdi som parameter til metoderne, som angiver hvilken retning den kører i. Problemet er når robotten bakker ud af banen, så når den forsøger at rette op sker der det at begge sensorer kommer udenfor banen - pga. robottens opbygning. Vi prøvede at rette problemet ved at tilføje forskellige tilstande, der kunne huske hvilken retning robotten skal holde for at komme ind på banen igen.
Konklusion
Vi fik løst memory leak problemet, fandt ud af hvor mange infrarøde sensorer vi kan sætte på og fik rettet en del bugs. Dog skal vi arbejde videre på dette næste gang...

Ingen kommentarer: