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