Wednesday, February 19, 2014

Opstart af blog

Opsummering af arbejde

Dato: 19 Feb 2014
Varighed: ~ 1 måned (det beskrevne arbejde)

Introduktion

Mit overordnede skellet til udvikling af subsumption/robotkontrol er nu færdigt. Der har ikke været noget nyt i denne del, sammenlignet med det projekt jeg har baseret denne opgave på, men det har dog været et stort og tidskrævende stykke arbejde. Da nye indsigter ifm. dette arbejde har været begrænset, har jeg valgt ikke at skrive detaljeret lab-rapport for hver lab-session. Herunder vil der dog være en kort opsummering af hver "indsigt" jeg har noteret mig.

Automatisk PID-kalibrering

Jeg har benyttet PID til at få mange af mine adfærd til at korrigere for fejl, og som doven datalog besluttede jeg derfor at jeg ville lave en kalibrerings-adfærd der kunne finde gode konstanter for mig, i stedet for at jeg skulle bruge tid på manuelt at tilpasse hver adfærd 2 gange: 1 gang pr robot.
Desværre viste det sig at jeg efter halvanden dag stadig havde... udfordringer. På dette tidspunkt besluttede jeg at droppe denne ekstra feature, og blot bruge den tid der skulle til at finde nogenlunde konstanter manuelt - det betyder dog ikke at jeg tror at det ikke kan lade sig gøre at løse udfordringerne, blot at jeg ikke vil bruge mere tid på noget der ikke har direkte relevans for specialet.

Kompas

Jeg har benyttet kompasmålinger til orientering af robotten. Dette har vist sig at være lige så udfordrende som frygtet, men denne udfordring kunne løses ved at lave flere forskellige målinger og lave en slags sensor fusion med farvesensoren og ultralydssensoren. Farvesensoren er generelt meget præcis til at fortælle hvilken konkret farve robotten er på og ultralydssensoren kan fortælle om hvor langt der er til væggen, under antagelse af at der ikke er fjender foran robotten. Denne antagelse kan sagtens vise sig ikke at holde i virkeligheden, men i lab-test hvor der kun er 1 robot på banen fungerer det godt (jeg har desværre kun adgang til 1 sæt EV3 indtil videre...). Endvidere fandt jeg frem til at mit kontor har en særdeles kraftfuld påvirkning af jordens magnetfelt, som desværre betyder at jeg ikke kan benytte nogen form for kompas derinde :(
Herunder ses de positioner jeg har udvalgt til at lave målinger.

Målepositioner på banen. Derudover bliver farveværdien af sort også gemt.
Venstre side af banen er robottens hjemmebane. Målepositionerne er valgt ud fra eksperimentering: Venstre og højre skal være ydrepunkter for hvor robotten har brug for kompasmålinger, men jo tættere de er på hinanden, desto bedre præcision.

Robotten kan på baggrund af disse målinger, med nogenlunde præcision, finde ud til en ydrebane, køre ned langs denne bane, samt pege ind på en bestemt vinkel et hvilken som helst sted på denne bane.

Jeg vil vende tilbage til netop kompasset senere, for at lave bedre dokumentation af hvori problematikken med orientering med kompas ligger.

Farvesensor

Under mine eksperimenter med ev3-farvesensoren kom jeg frem til at selve hardwaren er i stand til at måle farver langt mere præcist end de sensore der har været til rådighed. Desværre er jeg også kommet frem til at LEGO har afleveret den nye sensor med firmware-fejl der i praksis betyder at jeg ikke kan få de rå værdier af en farve-måling. Forsøger jeg at indhente rå værdier, crasher sensoren (jf. Andy fra leJOS), pga. en uventet checksum. Problemet kan delvist rettes (da firmwaren er frigivet som opensource), men selv med rettelsen crasher sensoren fra tid til anden. Disse ændringer er IKKE med i leJOS-frameworket og for at jeg selv skal kunne rette dem, ville jeg være nød til at bevæge mig langt ud over hvad jeg vil arbejde med ifm. specialet. Min løsning bliver derfor i stedet, i første omgang, at ignorere problemet. Hvis det ikke bliver rettet af folkene bag leJOS eller LEGO inden for en månedes tid, udskifter jeg den problematiske mørkegrønne farve med en anden lettere genkendelig farve.

Der er kun 2 muligheder for farvelæsning med den nye farvesensor som virker: 
  1. Aflæs hvilken legofarve der måles. Hurtigt nok til mine behov, selvom jeg ikke har klare tal for hvor hurtigt. Sample rate er 1kHz/s, men jeg er ikke sikker på præcis hvor hurtigt den får en konkret farve; den gamle sensor skulle skifte mode 2 gang, hvilket var meget langsomt, dette virker ikke til at være et problem ved den nye.
  2. Aflæs det reflekterede lys fra en RØD laser.
Eftersom mine læsninger for sort (2-3) og mørkegrøn (3-4) overlapper får jeg massive problemer når jeg støder på en af de 2 farver. Hvis jeg derimod bruger funktion 1 får jeg med det samme den korrekte farve. Som sådan kunne jeg derfor godt bygge endnu et lag af kompleksitet ind ved at skifte mode når jeg støder på sort/mørkegrøn, men jeg har rigtig dårlig erfaring med at skifte sensormode, så jeg har holdt mig fra dette hack indtil videre.

HiTech IRSensor

I det nye sensorframework som leJOS har implementeret til EV3 har de besluttet at IRSensoren ikke skal kunne give rå værdier. Dette er en ret dum beslutning da det man i stedet får er:


Nul betyder at lyskilden er nogenlunde ligefrem; imellem +30 og -30 grader. For at forvirre mig yderligt har de valgt at deres grader går imod uret... Jeg antager at de yderste +/-60 har ekstra grader (?), da sensoren har en målesfære på 240 grader, men det er meget udfordrende at forstå selve kildekoden, som det kan ses herunder. Hvis min forståelse af hvad der sker er forkert, så ret mig endelig.

    getData(0x49, buf, 1);
   float angle = Float.NaN;
   if (buf[0] > 0)
// Convert to angle with zero forward, anti-clockwise positive angle = -(buf[0] * 30 - 150);
   sample[offset] = angle;

Uanset hvad, så er en præcision på +/-30 grader er ikke nok for min PID. Derfor skrev jeg deres klasse om til at hente data fra registers på samme måde som deres gamle implementation, hvor man i stedet får et array af længde 5, hvor hver zones rå værdi gemmes.

Kørende prototype

Herunder er hvordan min fodboldspiller fungerer lige nu. Der er tydeligvis ting der kan forbedres, særligt ifm. at skyde, men selve strategien fungerer. Jeg tester bevidst kun på den lysegrønne side, da robotten ellers bliver forvirret over at køre ud på "sort" (se afsnit om farvesensor).