torsdag den 13. september 2007

NXT Programmering, Lesson 2

Varighed: 3-timer, Deltagere: Mads, Janus og Rolf

Da vi ankom idag kl ca. 14.15 havde vi som mål at lave opgaverne til denne uge.

Vi startede med at bygge UltraSonic sensor delen som skull emonteres på vores bot. Herefter loadede vi SonicSensorTest programmet ind i nxt'en og målte nogle forskellige distancer til forskellige kasser.

Hvid coated pap kasse

Målt med linealSonic Sensor
6972
8284

Brun pap kasse

Målt med linealSonic Sensor
7270
1417
2224
1014

Hvidt plastic krus

Målt med linealSonic Sensor
4550

Kom tingene tættere på end 10cm begyndt sensoren at opføre sig mærkeligt, og målte ikke længere præcist.

Samtidigt havde sensoren svært ved at se plastic kruset, hvilket nok er en konsekvens af at det er rundt.

Efter at have testet sensoren med det given program gik vi videre til at prøve Avoider.java.

Ud fra at se hvordan bot'en opførte sig var det tydeligt at jo længere den var fra sin "target distance" jo hurtigere kørte den, bort set fra at hvis den var ved "255" som viser at den ikke målte et object kørte motorne ved den hastighed de sidst var sat til. Altså skulle den endten sættes tættere end 255cm eller "startes" ved at vifte en hånd forand bot'en. Bot'en bliver styret af en proportional controler da den regulerer alt efter hvor langt den er fra sit mål.

Vi testede hvad der skete ved ændringer af de forskellige parametre, fx distanceThreshold, som resulterede i at den nu havde et andet "mål" for hvor tæt på den gerne ville være. Vi prøvede også at ændre på maxSpeed og minSpeed. Specielt hvis vi satte minSpeed = maxSpeed fik vi en off-on controller da bot'en nu endten kørte ved fuld fart, (Hvis den var mere end distanceThreshold væk), eller stoppede helt.

Ved on-off control stoppede bot'en ca. 10cm for tæt på vægen i forhold til sin "target distance", hvorimod i proportional control stoppede den indenfor 1cm.

Hvis man husker på at vi kun sampler distance hvert 300ms, er det meget rimeligt at bot'en når et køre tættere på end sin "target distance" inden den ser den er for tæt på og stopper. Derfor giver on-off controleren ikke et nært så præcis stop position som proportional controlleren.

Bagefter var vi nu klar til at give os i kast med WallFollower programmet, og i første omgang skrev vi det program der var givet i nqc om til en java version og testede dette, men et lidt ustabilt resultat fik os til at prøve at skrive vores eget wall follower program fra bunden.

Vi havde en del problemer med ultrasonic sensoren, blandt andet havde den svært ved at se væggen overhovedet hvis den var sat til de angivne 45grader, selvom den stod ca . 10cm fra væggen målt vinkelret, sagde sensoren bare 255, altså ingen object set.

Derfor var vi nødsagede til at dreje sensoren så den nu stod i noget der ligner 15grader ud fra væggen.

Vores største problem var at hvis bot'en så at den var for tæt på begyndt den at dreje væk, men så mistede sensoren hurtigt kontakten med væggen og målte blot 255.

Hvad vi til sidst kom frem til men ikke nåede at teste var at indsætte en delta distance værdi som kunne fortælle om bot'en var på vej hen imod eller væk fra muren. Hvis man så er for tæt på muren, (under threshold), drejer man kun væk fra væggen hvis delta værdien afslører at man faktisk bevæger sig endnu tættere på muren. Samme gælder i det modsatte tilfælde.

Det eneste problem vi endnu ikke har fundet en løsning på er hvordan bot'en skal se et hjørne, eller en genstand der står i vejen. Da vi var nød til at bruge en vinkel på 15 grader ser den ikke ret meget frem og kan derfor ikke opdage en forhindring.

Alt i alt nåede vi det meste, men fik ikke lige wall follower programmet til at virke helt som vi gerne ville, men vi kom dog med en ide til sidst som forklaret ovenover, som vi bare ikke nåede at implementere.

/+MJR

Ingen kommentarer: