Strukturerad problemlösning Metoder och verktyg för datavetare Ht09
Syfte Syftet med uppgiften är att få kännedom om ett strukturerat arbetssätt för hur ett problem kan angripas i de olika steg som svarar mot CDIO (Concieve-Design-Implement-Operate). Mål Målet med uppgiftens första moment är att lära känna den teknik som finns till förfogande (en MindStorm Legorobot), inse dess begränsningar och möjligheter (concieve). Målet med uppgiftens andra moment är att utgående från den tillgängliga tekniken designa (design) och realisera (implement) ett fungerande system som sedan skall testas och användas (operate). Ytterligare målsättningar med uppgifterna är att öva på att arbeta i grupp (om två personer), kommunicera de resultat som erhålls muntligt samt få kännedom om det processorienterande lärande som kommer att användas under utbildningen. Uppgiftens aktiviteter kommer att resultera i en insikt i hur en robot kan styras med hjälp av enkel programmering med ikoner. Uppgiften kommer också ge tillfälle till reflektion kring hur man ger en robot ett beteende och vilka beteenden som är enkla att programmera och vilka som är svårare. Förhoppningen är att programmering med ikoner ska ge insikt i många koncept som används vid vanlig programmering med text. Uppgift Uppgiften är uppdelad i två moment. Första momentet är till för att bekanta sig med roboten och programvaran som används för att programmera den. Ni ska efter hand öka på robotens förmåga att röra sig i en omgivning och målet är att ni i moment 2 ska definiera ett eget (utmanande) problem som roboten ska klara av och sedan programmera detta beteende. När uppgiften startar finns en trycksensor kopplad till ingång (port) 1 på roboten, en ljudsensor (mikrofon) på port 2 och en ljussensor på port 3. På port 4 sitter en ultraljudssensor som kan mäta avstånd till ett hinder (t.ex. en vägg) upp till 65 cm bort. Det finns två motorer på roboten som styr vänster respektive höger hjul. Motorerna är kopplade till portarna B och C. Moment 1: Introduktion. Lär känna Lego Mindstorms För att komma igång med programmeringen ska ni börja med några enklare övningar för att få roboten att röra sig och ta hänsyn till omgivningen. Deluppgift 1: Lär dig styra roboten Skriv kod som gör att roboten åker framåt roboten åker bakåt roboten svänger vänster roboten svänger höger Testa att svänga olika mycket och att variera hastigheten på roboten. Kan du få roboten att svänga 90 grader? Deluppgift 2: Kör runt i en hockeyrink Skapa ett program som gör att roboten kör runt i en "hockeyrink" med ett hinder i mitten utan att köra in i väggarna eller i hindret. Roboten ska klara minst ett varv utan att använda sensorerna.
Deluppgift 3: Börja använda sensorer Börja med att göra ett program som kör rakt fram till trycksensorn blir intryckt och stanna sedan roboten. Spara detta beteende i en egen subrutin (eller Mina ikoner som det heter i programmet). Detta är motsvarigheten till att göra en funktion i språk som t.ex. C Så här skapar man en subrutin (Mina ikoner) i Mindstorms: 1. Markera de ikoner du vill ha med i rutinen med musen 2. Klicka på Redigera -> Skapa en ny Min ikon-fil. 3. Ge ett lämpligt namn på den nya rutinen och en kommentar på vad den gör för något. Tänk på hur ni namnger era rutiner, det ska vara enkelt att förstå vilken man ska använda även om man inte sett koden för rutinen. 4. Klicka på nästa för att designa en ikon för den nya rutinen (eller på slutför om ni inte ids ) Så här lägger man in en sparad subrutin i ett program: 1. Klicka på fliken Egen palett under programmeringspelleten 2. Under ikonen Mina ikoner bör er nya rutin dyka upp. Lägg in den precis som en vanlig ikon i ert program. Nästa steg är att göra samma sak som i deluppgift 2, men med trycksensorn. Använd nu er rutin för att få roboten att köra rakt fram tills trycksensorn känner av väggen. Stanna roboten, sväng åt lämpligt håll och låt sedan roboten fortsätta till nästa vägg. Upprepa tills roboten tar sig runt hela banan. Gör om samma sak med ultraljudssensorn. När roboten är nära en vägg ska den svänga och fortsätta till nästa vägg. Få roboten att göra något roligt när man klappar händerna (t.ex. göra en piruett och spela upp något roligt ljud). Använd mikrofonen för att känna av när man klappar i händerna (eller något annat högt ljud). Kan ni få den att köra olika fort beroende på hur högt ljud mikrofonen fångar upp? Moment 2: Designa en egen utmaning som roboten ska klara av samt realisera en lösning I den här uppgiften ska ni designa ett beteende för roboten. Det ska vara lagom svårt så ni hinner lösa problemen på två labbtillfällen. Om ni hinner färdigt innan tiden är slut får ni utöka uppgiften och göra den än mer komplex. Planera hur uppgiften skall lösas innan ni sätter igång och programmerar (vilka beteenden krävs, vilka sensorer ska användas etc.). Innan moment 2 ska ni lämna in en kort skriftlig planering som ska godkännas av handledarna. I planeringen ska ni kort beskriva vad ni tänkt göra och uppskatta hur mycket tid ni tror går åt till uppgiften. Ta även upp vilka material som behövs (t.ex. väggar till en labyrint, tejp, bollar, etc.) och eventuella modifikationer av roboten som behövs (t.ex. fler sensorer). Tänk på att en eventuell ombyggnad av roboten måste göras på labbtid och att roboten måste återställas efteråt så att de som kommer efter kan börja direkt. Senaste inlämning av skriftlig planering Fredag 11/9 klockan 15:00. Redovisning Arbetet med moment 2 ska redovisas muntlig Torsdag 1/10 eller Fredag 2/10, redovisningsschema presenteras senare. Båda gruppmedlemmarna skall aktivt delta i redovisningen och planeringen av denna. Redovisningen bör ta 10 minuter (± 1 minut). Publiken är övriga grupper som har gjort likande labbar så det är viktigt att lyfta fram det som utmärker er design och lösning. Om ni inte hunnit lösa allting som ni planerat så redogör för hur långt ni kommit och hur ni skulle gått vidare om mer tid funnits. Programvaran Mindstorms Nedan följer en förklaring på de viktigaste delarna av programvaran Lego Mindstorms. En mer utförlig användarhandledning finns på http://www.cs.umu.se/kurser/5dv033/ht09/mindstorms/9797_lme_userguide.pdf.
Pr o gr a mvar a Programmeringspalett Programmeringspaletten innehåller alla programmeringsikoner du behöver för att göra dina program. Varje programmeringsikon innehåller instruktioner som din NXT-enhet kan tolka. Du kan kombinera ikonerna för att göra ett program. När du är klar med ett program laddar du ner det till din NXT-enhet. Kom ihåg att sätta på och ansluta din NXT-enhet innan du laddar ner programmet.
Programvara Programmeringspalett Standardpalett För att förenkla användningen har programmeringspaletten delats in i tre olika palettgrupperingar: standardpaletten, den fullständiga paletten och den egna paletten (som innehåller ikoner du skapar själv eller laddar ner från webben). Standardpaletten rekommenderas som startpunkt. Kör-ikon Kör-ikonen aktiverar robotens motorer eller får lampor att tändas. Spela in/spela upp-ikon Med hjälp av spela in/spela upp-ikonen kan du programmera roboten med fysiska rörelser och sedan spela upp rörelsen på önskat ställe i programmet. Vänta-ikon Vänta-ikonen får din robot att vänta på en viss sensoraktivering, exempelvis ett ljud eller ett tidsintervall. Ljud-ikon Ljud-ikonen gör det möjligt för roboten att spela upp ljud, exempelvis inspelade ord. Loop-ikon Använd loop-ikonen om du vill att din robot ska fortsätta göra samma saker om och om igen, exempelvis åka framåt och bakåt tills en trycksensor aktiveras. Display-ikon Med display-ikonen kan du kontrollera NXT-enhetens display. Du kan skriva, visa symboler eller till och med rita på displayen med ditt program. Förgrenings-ikon Förgrenings-ikonen gör det möjligt för roboten att fatta egna beslut, exempelvis åka åt vänster när den hör ett starkt ljud och åt höger när den hör ett svagt ljud. 57
Programvara Programmeringspalett Fullständig palett Standardikoner Standardikonerna är samma ikoner som finns i standardpaletten. Åtgärdsikoner Med åtgärdsikonerna kan du styra specifika beteenden för olika utenheter: interaktiv servomotor, NXT-ljud, NXT-display, Bluetooth (skicka) och lampor. Sensor-ikoner Sensor-ikonerna används tillsammans med sensorerna på roboten för att styra robotens beteende. Ikonerna motsvarar tryck-, ljud-, ljus- och ultraljudssensorerna, NXT-knapparna, de interaktiva servomotorernas rotation, timer-funktionerna, Bluetooth (mottagning) och valfria temperatursensorer. Flödesikoner Med de här ikonerna kan du skapa mer komplexa beteenden. Bland ikonerna finns kontroll av funktionerna "repetera", "vänta på" och "variabel", ikoner för att stoppa beteenden eller logiskt flöde i ett program och beslutsikoner för att programmera reaktioner på specifika sensorförhållanden.
Programvara Programmeringspalett Fullständig palett Data-ikoner Skapa boolesk logik-ikonen, matematik-, jämförelse-, intervall-, slumpvillkor-, variabel- och konstant-ikonerna. Avancerade ikoner Använd de här ikonerna när du vill omvandla data till text, lägga till text, styra NXT-enhetens vilofunktion, spara filer på NXT-enheten, kalibrera sensorer, återställa motorer, starta och stoppa datauppsamling och ansluta med Bluetooth. Egen palett Mina ikoner Med hjälp av Mina ikoner kan du spara ett program som en ikon och återanvända det i andra program. Webbnerladdningar Med hjälp av ikonen för webbnerladdningar kan du spara program som du fått av en vän via e-post eller som du laddat ner från portalen eller från en webbplats som www.mindstormseducation.com
Programvara Inställningspanelen Varje programmeringsikon har en inställningspanel där du kan justera inställningarna för den valda ikonen. När en ikon har valts i arbetsområdet blir dess inställningspanel synlig och aktiv längst ner på skärmen. Genom att ändra parametrarna på inställningspanelen kan du välja hur en specifik ikon ska bete sig. Till exempel kan du få din robot att röra sig snabbare genom att ändra egenskapen Styrka [Power] i inställningspanelen för kör-ikonen. Kontrollenheten De fem knapparna på kontrollenheten används för att datorn ska kunna kommunicera med NXT-enheten. Knappen "NXT-fönstret" ger dig tillgång till NXT-minnet och kommunikationsinställningar. Knappen "Ladda ner och kör vald" laddar bara ner och kör en del av din programkod (exempelvis en enstaka ikon eller bara några få ikoner). Du kan på så sätt se hur den lilla delen av ditt program påverkar NXT-enheten utan att behöva ladda ner hela programmet. Knappen "Ladda ner" laddar ner programmet till din NXT-enhet. Du kan sedan köra programmet på NXT-enheten. Knappen "Ladda ner och kör" laddar ner ett program till NXT-enheten och börjar sedan köra programmet. Knappen "Stopp" stoppar ett program som körs.