Robotter I Undervisningen - Debugging

Debugging - hvad er det?

Begrebet debugging dækker over at finde fejl i sine programmer. Det stammer oprindeligt fra projektgruppen omkring udviklingen af en af de første radiorørscomputere, MARK II. Gruppen fandt, i 1947, en natsværmer (bug = insekt) som havde lavet en kortslutning i maskinen. Den blev tapet fast i deres logbog, og billeder kan ses her. Debugging blev herefter kendt som værende processen at fjerne bugs, altså at fjerne fejl.

En elektrisk kortslutning i en computer betyder som oftest at de kommandoer man giver maskinen, eller data man skriver til/læser fra maskinen er noget andet end planlagt. Derfor vil programmet opføre sig anderledes end forventet, hvilket fører til at programmet i de fleste tilfælde ikke vil udføres korrekt.

I nyere tid betyder debugging at fjerne sine fejl i den software man skriver på computeren, og I NXT Mindstorm sammenhæng vil debugging ofte være at forstå hvor henne i programmet robotten befinder sig til et givet tidspunkt.

En teknik til at finde ud af dette kaldes for instrumentering af koden. Denne teknik går ud på at indsætte nogle hændelser i koden som ikke direkte udfører robottens opgave, men som giver programmøren nyttige informationer, med det formål at kunne lave programmet færdigt. Herunder beskrives 5 forskellige måder at instrumentere NXT software.

  1. * Stop alle output porte = alle motorer og lamper
  2. * Spil en lyd
  3. * Tænd en lampe
  4. * Skriv noget på NXT displayet
  5. * Send en besked til en anden robot

Instrumentering

1) Stop alle output porte = alle motorer og lamper

NXT_Registrer_m%C3%B8rk_linje.PNG

Hvis man åbner NXT Mindstorm programmeringsmiljøet, er der en række tutorer ovre i venstre side. Vi rettede tutoren "Tegn en firkant" til i den aller første øvelse. Prøv denne gang at vælge tutor nummer 16 kaldet "Registrer mørk linje", Se billedet til højre.

Programmet kræver her at man har sat en lyssensor på standardrobotten. Lyssensoren skal forbindes til port 3. Selve programmet ser ud som følger:

NXT_Program_til_registrer_m%C3%B8rk_linje.PNG

Inde i tutoren er der forklaringer til parametrenes indstillinger. I hovedtræk sættes robotten til at køre fremad uden tidsbegrænsning. Den orange blok kigger på lyssensorværdien (som er en værdi mellem 0 og 100), og og venter på at denne falder til under 40. Først når denne betingelse er sand, fortsætter programflowet. Den næste handling er vigtig. Den stopper motor B og C, hvilket helt lavpraktisk betyder at robotten stopper sin kørsel. Man kan vælge at stoppe alle 3 porte, som overskriften lægger op til, men i tutoren er det nok at stoppe B og C, da der ikke sidder nogen ledning i port A.

Øvelse: Prøv tutoren af i praksis ved at sætte en streg sort tape på et lyst bord. Det kan godt være at værdien 40 skal ændres. Værdien til din robot afhænger af lysforholdene i lokalet , lysforholdene på underlaget samt af tapens glans.

Teknikken kan anvendes i langt større programmer, hvor man kan indsætte en stop blok for at genkende at man er kommet "hertil" i programflowet.

2) Spil en lyd

I stedet for at stoppe robotten helt, kan man gøre noget andet, for eksempel spille en lyd. Her skal du tage programmet ovenfor, og lave om, således at robotten skal passere to streger før den stopper. Programmet ændres så består af en løkke der skal gennemløbes to gange. Inde i løkken er fremad kommandoen, og vent på lysniveau.

NXT_Program_til_registrer_m%C3%B8rk_linje_2_gange.PNG

Forestil dig nu at du er i problemer (måske er den værdi vi venter på for lav), og vil finde ud af om Lysbetingelsen bliver opfyldt første gang. Vi indsætter nu en lydkommando, der afspiller den passende lyd "Object detected"

NXT_Program_til_registrer_m%C3%B8rk_linje_2_gange_debug_med_lyd.PNG

Klik på lydikonet, og parametrene skal stå således:

NXT_Lyd_Object_Detected.PNG

Øvelse: Prøv nu at sætte to tapestykker på bordet som robotten skal passere henover. Bemærk at med to tapestykker der er langt fra hinanden, så virker programmet, men hvis de to tape-stykker sidder tæt på hinanden, så virker programmet ikke. Robotten risikerer at overse det sidste stykke tape. Forklar hvorfor. Hvad kan man gøre for at få det til at virke? Kig evt. godt på parametrene til afspilningen af lydfilen ovenfor.

3) Tænd en lampe

Problemet i afspilning af lyd ovenfor er at lydfilen tager lang tid at afspille, og vi har stillet parametrene sådan at programmet venter på at lydfilen er færdigafspillet, og derfor kigger programmet ikke på sensorværdierne mens robotten fortsætter kørslen i den periode.

Vi må altså forstå, at når vi måler på et system, så påvirker vi det også, og ændrer måske dets tilstand. Når man debugger meget tidskritiske ting, hvor systemet måske bare få mikrosekunder senere er i en anden tilstand (fx radiotransmission på mobiltelefoner), skal man altså udlæse sin debuginformation meget meget hurtigt. På de fleste NXT systemer vil det at tænde en lampe være meget hurtigt, set i forhold til andre handlinger man kan udføre i systemet. Så har man en port i overskud, fx port A i programmet ovenfor, så kan man i stedet for at spille en lyd, tænde en lampe på port A.

Øvelse: Erstat afspilningen af lyd ovenfor med at tænde en lampe på port A. Kør programmet. Hvor tæt kan de to stykker tape nu sidde, såden at robotten opdager begge stykker tape?

4) Skriv noget på NXT displayet

NXT_skabelon_send_besked_og_vis_tekst.PNG

Her til højre kan man se tutorer for de næste to debugmetoder. Tutor nummer 35 "Vis tekst", tager et tal som kommer som input fra en sensor, og skriver det på displayet. Man kan let følge tutoren, der bruger en afstandsmåler (en ultralydssensor) og skriver afstanden på displayet.

Der er lidt nødvendig teori for at forstå hvad der foregår. Sensorens output er et tal, men det kan man ikke skrive direkte på et display. Til gengæld kan man skrive tekst i et display. Det kræver lidt forklaring at forstå hvorfor fx tallet 50 ikke er det samme som teksten "50". Spørg evt. læreren hvad forskellen er. Så for at kunne skrive sensorens output værdi, skal dette tal igennem en konvertering til en tekst. Det er ikonet efter sensoraflæsningen. Konverteringen viser netop tallet som en tekst, og denne gives som input til displayet.

Øvelse: Modificerer vis tekst tutoren, så den i stedet viser værdien fra den påmonterede lyssensor, som vi har brugt i øvelserne ovenfor.

5) Send en besked til en anden robot

Tutor nummer 30 handler om at forbinde to NXT klodser via Bluetooth interfacet. Det gøres som vist i tutoren. På den ene kan man så sende en besked som modtages på den anden robot. Det svarer lidt til at tænde en lampe, men der er mulighed for at få mere information. Lampen kan skifte tilstand fra slukket til tændt. Men beskeden kan indeholde mange forskellige værdier, og værdien kan fx indeholde information hvor man er henne i programmet. Så at sende beskedder giver mulighed for mere sofistikeret debugging.

Øvelse: Gennemfør tuturen, ved at sende information til en anden NXT.

Medmindre andet er angivet, er indholdet af denne side licenseret under Creative Commons Attribution-NonCommercial 3.0 License