MDI/Interaktionsdesign
Interaktionsdesign - Ubiquitous Computing

 
 
program | kurser | studenter | lärare
 
 
 
 


Övning med Lego Mindstorms-robotar

Syftet med denna övning är att ni ska få en känska för hur man kan med relativt enkla medel kan skapa "saker" som uttrycker vad vi människor kan uppfatta som komplexa beteenden. Det är också en övning i att använda sig av datorer, programkod, sensorer och motorer tillsamman med andra byggstenar för att skapa ett önskat resultat.

Vi kommer att bygga ett antal robotar som är inspirerade av Valentino Braitenbergs bok Vehicles. Braitenberg beskriver i sin bok ett antal tankeexperiment med vad han kallar syntetisk psykologi. Hogg, Martin och Resnick på MIT Media Lab (vars forskning bl.a. ledde fram till Lego Mindstorms) anpassade en del av hans idéer till riktiga robotar.

Hogg, D., Martin, F. and Resnick, M. (1991). Braitenberg Creatures. Epistemology and Learning Memo #13. MIT Media Lab, Cambridge, Mass, USA.

Ni ska realisera följande "creatures"beskrivna i den artikeln:
  • Timid
  • Indecisisve
  • Paranoid
  • Driven
  • Attractive and Repulsive
Som överkurs kan ni även bygga en linjeföljare. Det är en robot som följer en godtycklig svart linje ritad på ett stort vitt papper. Linjeföljaren har två nedåtriktade ljussensorer som känner av hur mycket ljus som reflekteras mot underlaget. Om en av sensorerna kör på den svarta linjen ska roboten kompensera för detta och vrida på sig. Många insekter rör sig enligt samma princip, t.ex. följer myror sina myrvägar på ett liknande sätt. De använder sig dock av luktspår.

Praktiska detaljer

Ni kommer att använda er av Lego Mindstorms RCX-enheter, motorer, ljussensorer samt andra legobitar. Allt detta finns i studion.

Era laptopar saknar tyvärr en gammaldags serieport, vilket behövs till Lego Mindstorms-kitet. Därför har vi ett antal USB-till-serieports-omvandlare som ni får låna. Första gången ni använder dem måste ni installera drivrutiner, som finns på en CD.

Ni behöver också ett utvecklingssystem som ni installerar på era datorer. Vi kommer att använda oss av programmeringsspråket NQC (Not Quite C) tillsammans med Bricx Command Center. Den senaste versionen (3.3) kan laddas ner härifrån (lokal kopia). NQC påminner mycket om programmeringsspråket C till syntaxen men är mycket mer begränsat. Detta beror i första hand på att NQC kompilerar programkoden till Legos bytekod, som sedan exekveras i RCX-enheten.

RCX-enheten har en inbyggd microcontroller och en infraröd kommunikationsport. Det finns också platser för att ansluta upp till 3 sensorer och 3 motorer, samt en liten CD-skärm och ett par knappar.

I NCQ adresserar man motorer och sensorer via variablerna OUT_A, OUT_B, OUT_C samt SENSOR_1, SENSOR_2, SENSOR_3.

Här är ett exempel på ett NQC-program:
task main()
{
    SetPower(OUT_A+OUT_C,1);  // kör långsamt
OnFwd(OUT_A+OUT_C);  // Starta motor A och C i framåtriktning
}

En mycket utförligare introduktion till hur man använder NQC finns här. Den är skriven av Mark Overmars som utvecklade föregångaren till BricxCC, RcxCC.
Andra detaljer i NCQ som kan vara bra att känna till:
SelectDisplay(DISPLAY_SENSOR_1);             // Visar invärdet från sensor 1 på skärmen på RCX-enheten
SetSensorType(SENSOR_1, SENSOR_TYPE_LIGHT); // Definierar att sensor 1 är en ljussensor, dvs att invärden
// ska tolkas som ljusdata.
SetSensorMode(SENSOR_1, SENSOR_MODE_RAW); // Definierar hur sensorvärden från sensor 1 ska typomvandlas, t.ex.
// till temperatur eller boolean.
// Här sker ingen typomvandling alls utan invärdet blir ett
// numeriskt värde i intervallet [0..1023]. Detta ger den bästa
// upplösningen på invärden.




©2003 id|c