Datorlaboration: Rupert the Robot Abstrakt Experiment gjordes med en Mindstorms-robot (här kallad Rupert), tillsammans med ett symbolspråk via dator. Två experiment gjordes; i laboration 1 så interagerade inte Rupert med omgivningen, utan sattes att röra sig i en form av ”hälsningsrörelse”. Här låg svårigheterna i att få roboten att bete sig ”mänskligt”. I laboration 2 så skulle Rupert navigera runt hinder med hjälp av en ultraljudssensor, problem uppstod i att förstå symbolerna, men försöket lyckades med tanke på målet som sattes upp. Syfte Syftet med denna laboration var att förstå symbolspråket som Mindstorms-roboten använder sig av, och i förlängningen en förståelse för programmering i allmänhet. En del av syftet var också att se vilka begränsningar som symbolspråket förde med sig, och hur det påverkades när det översattes till en fysisk robot och miljö. Metod En Mindstorms-robot nyttjades för dessa laborationer, med tillhörande mjukvara för datorn. Roboten har sensor för att mäta avstånd, genom ultraljud, och kan även generera olika ljud. Dessutom kan den förflytta sig fram, bak och rotera. Mindstorms-roboten har andra funktioner, men då dessa inte berörs i laborationerna så anges de inte här. Mjukvaran kommunicerar med roboten genom en usb-sticka (bluetooth), och den aktiveras direkt genom mjukvaran som körs via datorn. Mjukvaran använder sig av ett tydligt och relativt enkelt symbolspråk. Det finns ett grundutbud av symboler som sedan kan kombineras och manipuleras för önskad effekt. De symboler som använts här är ”loop”, ”rörelse”, ”vänta tills...”, ”ljudsignal” och ”förgrening”. ”Loop” gör att roboten kan utföra en handling i all evighet, eller tills ett visst tillstånd uppnåtts. ”Rörelse” styr motorerna ”B” (vänster) och ”C” (höger). Genom en manipulation av motorerna kan fram, bak och rotation uppnås. ”Vänta tills...” får roboten att pausa tills ett visst tillstånd uppnåtts. ”Ljudsignal” gör att en ljudfil spelas upp. ”Förgrening” ger en tillgång till ett sant och falskt-värde, som sedan kan definieras tydligare genom att kombinera symboler och manipulera värden. Laboration 1. Resultat och diskussion Programmeringen följer nedan 1.Startposition 2.Gå fram ett steg 3.Spela upp ”hello” 4.Vänta 1 sekund 5.Spela upp ”goodbye” 6.Vänd 180 grader 7.Gå fram ett steg 8.Vänd 180 grader Syftet med denna laboration var att få roboten att gå fram 1 steg för att hälsa på någon imaginär sak/person, sedan säga ”hej då”, vända sig om, gå fram ett steg och åter vända tillbaka till utgångsläget. Det fanns ett visst mått av trial and error i att förstå det mest "naturliga" sättet för roboten att bete sig. Att roboten skulle gå fram först och sedan hälsa var naturligtvis mest självklart. Sedan följde "goodbye" direkt efter. Det visade sig att det var för kort tid mellan symbolerna "hello" och "goodbye", vilket inte kändes som särskilt mänskligt beteende. Detta löstes genom att sätta en väntesymbol mellan talsymbolerna. I övrigt slirade roboten märkbart ur kurs vid vändningarna, så man kunde aldrig vara säker på att roboten skulle ha exakt samma rotation vid slutläget som vid startläget. Laboration 2. Resultat och diskussion Rupert blev programmerad som följer nedan 1.Startposition 2.Gå fram tills hinder 50 cm 3.Om hinder sant, 50 cm, vänd vänster 90 grader 4.Om hinder sant, 50 cm, vänd höger 180 grader 5.Om hinder falskt på ”3” eller ”4” gå fram tills hinder 50 cm 6.Om hinder sant på både ”3” och ”4”, vänd höger 90 grader och gå framåt tills hinder 50 cm. (Rupert går alltså tillbaka samma väg han kom från startpositionen, tills han möter ett hinder, då deaktiveras han.) Målet var att få roboten att navigera runt i en datasal med hjälp av en sensor. Experimentet började med att Rupert fick gå framåt tills ultraljudssensorn visade 10 cm till hindret. Det visade sig att Rupert hade svårigheter med ett så lågt tal, så efter en höjning till 50 cm så klarade han sig bättre (50 cm visade sig dock inte kunna översättas till realiteten). Ett antagande man kan göra om sensorproblemet är att det är lättare för Rupert att notera förändringar på ett lite längre avstånd. Andra steget var för Rupert att rotera till vänster och gå framåt (ifall det inte fanns ett hinder där), annars rotera höger och gå fram. Om hinder på båda sidor var Ruperts uppgift att gå tillbaka. Detta mittensegment med rotationerna visade sig vara svårare att programmera. Svårighet fanns i förgreningssymbolen, innan förståelsen fanns att det fanns ett värde för sant och falskt, och ifall det hade någon betydelse att man lämnade ett av fälten sant eller falskt tomt. Lyckligtvis gjorde det inte det, och med hjälp av flera försök där hinder ställdes ut för att testa rotationerna så lyckades målet av experimentet. Vidare krävdes för enbart rotation att man endast aktiverade en motor, och en 180 gradig rotation krävde att man ändrade rotationsvärdet till 2 (förvisso verkade detta också gå genom att man gjorde en fullständig 180 gradig rotation med båda motorerna). För att sammanfatta experimentet: Rupert skulle gå fram tills han kände av ett hinder, sedan vända 90 grader vänster, om hinder vända 180 grader till höger. Fanns inget hinder var Ruperts uppgift att fortsätta gå tills han mötte en vägg, och då stanna. Fanns ett hinder på höger sida blev dock Rupert instruerad att vända ytterligare 90 grader till höger och gå tillbaka. Man kan då tänka sig att hela serien blir körd i en loop så att Rupert själv får gå runt hinder i all evighet. Ett uppenbart problem med hans programmering är att han endast rör sig i räta vinklar, så ifall han befinner sig i ett kvadratiskt rum utan andra föremål så kommer han tillslut bara röra sig längs med sidorna av väggen. I övrigt kan man anta att Ruperts beteende visar på ett slags beslutsfattande, om än ytterst begränsat. Benny Andersson