18
1 Lego Mindstorm Kompendie Udarbejdet af: Studenterstudievejlederne på Ingeniørhøjskolen i København Danni Ejbjerg Sørensen Simon Staudt

Lego Mindstorm Kompendie

Embed Size (px)

Citation preview

Page 1: Lego Mindstorm Kompendie

1

Lego Mindstorm Kompendie

Udarbejdet af:

Studenterstudievejlederne på Ingeniørhøjskolen i København

Danni Ejbjerg Sørensen

Simon Staudt

Page 2: Lego Mindstorm Kompendie

2

Indholdsfortegnelse

The NXT…………………………………….. 3

The Light Sensor…………………………… 4

The Touch Sensor…………………………. 5

The Servo Motor…………………………... 5

The Ultrasonic Sensor…………………….. 6

Hvad er et program? …………………........ 7

- Lego Mindstorm

Vandfalsmodellen……………………….... 9

- Krav

- Design

- Konstruktion

- Test

- Vedligeholdelse

Guide til RoboLab……………………..... 12

Tips og Tricks til Lego Mindstorm…… 17

- Hvordan bygger man et program

- Tips & Tricks

Page 3: Lego Mindstorm Kompendie

3

The NXT

NXT er Lego Mindstorm robottens hjerne.

Det er en intelligent computer-styret Lego brik

som vækker Lego Mindstorm robotten til live

og udfører komplicerede operationer.

Motor Porte

NXT har tre motor outputs, hvor motorerne

kan tilsluttes – Port A, B og C.

Sensor Porte

NXT har fire sensor inputs, hvor sensorerne kan tilsluttes – Port 1, 2, 3 og 4.

USB Port

Tilslut et USB kabel til USB porten og download programmer til NXT eller upload data/informationer fra

robotten til computeren.

Højttaler

Lav et program med lyd og lyt til det når programmet kører. Dette kan være en hjælp, når man skal fejlsøge i

et program.

NXT Knapper

Orange knap: On/Enter/Run

Lyse grå pile: Bruge til at bevæge sig til venstre eller højre i menuen.

Mørke grå knap: Clear/Gå tilbage

NXT Display

Der kan vises rigtig mange ting på displayet – se evt. i manualen hvad de forskellige ikoner betyder, og hvad

displayet kan bruges til.

Tekniske Specifikationer

32-bit ARM7 microcontroller

256 Kbytes FLASH, 64 Kbytes RAM

8-bit AVR microcontroller

4 Kbytes FLASH, 512 Byte RAM

Bluetooth wireless communication

USB full speed port (12 Mbit/s)

4 input ports, 6-wire cable digital platform

3 output ports, 6-wire cable digital platform

100 x 64 pixel LCD graphical display

Loudspeaker - 8 kHz sound quality. Sound channel with 8-bit

resolution and 2-16 KHz sample rate.

Power source: 6 AA batteries

Page 4: Lego Mindstorm Kompendie

4

The Light Sensor

Lyssensoren er en af de to sensorer som er robottens øjne. (Den

anden sensor er Ultralydssensoren.)

Lyssensoren giver robotten mulighed for at kunne kende

forskel mellem sort og hvid. Den kan måle lys intensiteten i

rummet, og den kan måle lys intensiteten på farvede

overflader.

Dette er hvad øjet ser:

Dette er hvad lyssensoren ser:

Måling af det omgivende lys

Test lyssensorens evne til at opfange det omgivende lys ved at måle lysniveauet i forskellige dele af rummet.

Fx hold lyssensoren foran et vindue, og hold derefter sensoren under et bord. Se hvordan tallene på

displayet ændrer sig.

Test!

Test lyssensoren målinger her:

1. Tilslut lys sensoren til NXT.

2. Vælg view i menuen på NXT display. Vælg lys sensor ikonet og den port som lyssensoren er tilsluttet, og

tryk på den orange knap.

3. Hold lyssensoren op imod forskellige farver. Se de forskellige målinger på displayet.

Try Me

NXT kommer med en Try Me funktion. Tilslut en lys sensor til port 3 og vælg Try

Me i menuen på NXT for at teste lyssensoren.

Page 5: Lego Mindstorm Kompendie

5

The Touch Sensor

Tryksensoren giver robotten følelse. Tryk sensoren registrer når

den bliver trykket af noget, og når den slippes igen.

The Servo Motors

De tre servo motorer giver robotten mulighed for at bevæge

sig. Hvis du bruger ”Move block” i Lego Mindstorm NXT

softwaren til at programmere motorerne, vil de to motorer

automatisk synkronisere, så robotten vil bevæge sig i en lige

linie.

Indbygget rotations sensor

Hver motor har en indbygget rotationssensor. Dette gør at du kan styre robottens bevægelser meget

præcist. Rotationssensoren måler motorens rotationer i grader eller fulde rotationer. En rotation er lig 360

grader, så hvis du sætter en motor til at dreje 180 grader, vil den køre en halv omgang.

Den indbyggede rotationssensor i hver motor giver også mulighed for at sætte en bestemt hastighed for

hvor af motorerne (ved at sætte forskellige ”power settings” inde i softwaren.

Test

Test rotationssensorens evne til at måle distance.

1. Tilslut en motor til NXT.

2. Vælg VIEW i menuen på NXT.

3. Vælg Motor rotations ikonet.

4. Vælg den port, hvor motoren er tilsluttet.

5. Sæt et hjul på motoren og mål rotationerne menes

du ruller hjulet på gulvet.

NXT kommer med en Try Me funktion. Tilslut en tryk sensor til port 1 og vælg Try

Me i menuen på NXT for at teste lys sensoren.

Page 6: Lego Mindstorm Kompendie

6

The Ultrasonic Sensor

Ultralydssensoren er den anden sensor som udgør robottens øjne.

Med Ultralydssensoren kan robotten se og registrere objekter. Den

kan også bruges således, at robotten kan undgå forhindringer, måle

distance og opfange bevægelser.

Ultralydssensoren måler distance i centimeter og inches. Den er i stand til at måle distancer fra 0 til 255

centimeters med en præcision på +/- 3 cm.

Ultralydssensoren bruger det samme princip som ses hos flagermus: Altså den måler distancen ved at

udregne den tide det tager for en lydbølge at ramme et objekt og komme tilbage igen – ligesom et ekko.

Store objekter med en hård overfalde returnerer de bedste målinger. Objekter lavet af blødt materiale,

kurver (som en bold) eller som er meget tynde og små kan være svært for sensoren at opfange. Derfor skal

denne sensor bruges med omtanke!

(Vær opmærksom på, at brugen af to ultralydssensorer i sammen rum kan forstyrre hinandens målinger)

Test

Test Ultralydssensorens evne til at kunne måle afstande.

1. Tilslut Ultralydssensoren til NXT.

2. Vælg VIEW i menuen på NXT.

3. Vælg Ultralydssensor ikonet og porten, hvor sensoren er tilsluttet.

4. Mål distancen til et objekt. Fx flyt hånden tættere på sensoren and aflæs målingerne på displayet.

Page 7: Lego Mindstorm Kompendie

7

Hvad er et program?

En computer er en boks med lamper og forskellig hardware, som i sig selv ikke kan noget. Det smarte ved en

computer er, at den hurtigt kan gøre det, som den får besked på og ikke andet. Det er her vi som mennesker

giver computeren liv ved, at fortælle hvad den skal gøre igennem forskellige programmer, som vi

mennesker selv designer og udvikler. Et computerprogram eller et program er altså instruktioner til

computeren.

Et computerprogram består af kildekode, som ofte er skrevet af professionelle programmører. Kildekode er

altid skrevet i et programmeringssprog. Et programmeringssprog er det sprog, som programmøren bruger

til at forklare computeren, hvad den skal gøre. Når kildenkoden for et program er skrevet skal dette kode

oversættes, så computeren kan forstå det. Det eneste sprog som computeren faktisk forstår, er nuller og et-

taller, som også bliver kaldt maskinkode. Det stykke software som oversætter kildekode til maskinkode

hedder en kompiler.

Lego Mindstorm

Et program lavet i Lego Mindstorm kan faktisk sammenlignes med et rigtigt computerprogram, da NXT

Robotten er en lille computer med en CPU. Når man laver et program i Lego Mindstorm fortæller man hvad

NXT Robotten (computeren) skal gøre ved, at trække nogle forskellige kommandoer ud på ”tegnebrættet”.

Bag disse klodser ligger der faktisk en stump af det omtalte kildekode, som evt. kan se således ud:

(se evt. Figur 1)

case SAMBA_TURN_ARM_OFF_AND_WAIT :

{

if (!StateTimer)

{

dPowerHigh();

dPowerDeselect();

dPowerWriteOn(FALSE);

}

if (++StateTimer >= SAMBA_POWEROFF_TICK)

{

State = SAMBA_TURN_ARM_ON_AND_WAIT;

}

}

break;

Figur 1

Page 8: Lego Mindstorm Kompendie

8

Når programmet er færdigt sættes koden fra alle klodserne sammen i den rækkefølge, som det vises i

LabView. Herefter bliver alt koden kompileret/behandlet, og lavet om til en instruktionsfil, som NXT

robotten kan forstå. Herefter overføres instruktionsfilen til NXT robotten. Når denne fil eksekveres/udføres

af robottens CPU, ved den præcist lige hvad den skal gøre.

Figur 2 viser flowet fra det færdige program i LabView, og til det overføres til NXT Robotten.

Figur 2

Page 9: Lego Mindstorm Kompendie

9

Vandfaldsmodellen

Når man skal udvikle et eller flere stykker software (programmer), er det vigtigt at have en struktureret

fremgangsmåde. Er man ikke struktureret i udviklingsfasen, er sandsynligheden for, at projektet fejler eller

programmet er fyldt med fejl stor.

Der er lavet rigtig mange modeller for, hvordan man skal strukturere sit arbejde i forbindelse med

udviklingen af et program. En model som er let at forstå og følge, er vandfaldsmodellen. Denne model bliver

dog ikke brugt så meget mere, da mange virksomheder synes modellen er ”lidt tung at danse med”, men

fordi den har en synlig proces og en klar arbejdsfordeling tages der derfor udgangspunkt i denne.

Med vandfaldsmodellen er fremgangsmåden delt op i nogle forskellige faser. Faserne i modellen er: Krav og

Analyse, Design, Konstruktion, Test og Vedligeholdelse. Grunden til at modellen hedder vandfaldsmodellen

er, at man går fra den ene fase til den næste i den rækkefølge som vist på figur 3.

Faserne i vandfaldsmodellen vil blive beskrevet således, at I kan relatere dem til udarbejdelsen af

programmet/programmerne til jeres NXT Robot.

Krav:

I denne fase findes alle kravene til programmet/programmerne. Kravene er et set af funktionaliteter, og

fortæller hvad en bruger kan forvente af programmet.

I jeres tilfælde er kravene stort set givet på forhånd i form af de opgaver, som NXT Robotten skal løse på

banen. I denne fase kunne i derfor sikre jer, at I havde alle kravene og læse dem igennem, så i er helt sikre

på, hvilke opgaver NXT Robotten skal løse.

Design:

I design fasen ser man yderligere på kravene og laver den overordnede system struktur. Det er også i denne

fase man skal beslutte sig for, om man skal løse opgaverne på banen ved hjælp at et stort program eller flere

små programmer som løser hver deres opgave. Fordelen ved at lave flere små programmer er, at det er

Figur 3

Page 10: Lego Mindstorm Kompendie

10

lettere at fejl søge i små programmer, da mængden af kode/klodser ikke er så stor. Ulempen er at NXT

Robotten skal bruge tid på at køre tilbage til basen, så man kan skifte program.

Før man starter med at lave programmet/programmerne til NXT Robotten i LabView, er det vigtigt, at man

ligger en plan for hvad NXT Robotten skal kunne for at løse de forskellige opgaver. Dette kan fx gøres ved,

at tage et kig på banen og derved visualisere sig, hvordan NXT Robotten skal navigere sig gennem

opgaverne. Derefter skal man så notere ned, hvilke funktioner der kræves for at kunne løse opgaverne. Nu

har man altså et overblik over, hvor NXT Robotten kan gøre bruge af sin lyssensor, tryksensor osv. Til sidst

kunne kan også tage forskellige målinger med motorerne og se hvor mange grader robotten skal dreje for at

udføre et bestemt sving. Derudover får man ide om hvilken konstruktion NXT Robotten skal være af. Alt

dette bevirker, at programmeringen og konstruktionen af NXT Robotten tager kortere tid.

En måde at visualisere sit program til NXT Robotten på, er ved hjælp af diagrammer som fx et state diagram.

Et state diagram bliver brugt til at beskrive hvordan et system skal opføre sig. Ydermere kan det beskrive

mulige stadier som fx NXT Robotten kan befinde sig i. For bedre at forstå dette diagram vil der tages

udgangspunkt i et eksempel.

Figur 4

Page 11: Lego Mindstorm Kompendie

11

I eksemplet her skal NXT Robotten hen til Lego manden, samle han op og køre tilbage igen. Pilene viser

hvilken vej robotten skal køre, og de røde cirkler viser de steder NXT Robotten kan bruge sine sensorer til at

orientere sig.

Forløbet er således, at NXT Robotten kører frem indtil den ”ser” den grå vej dvs. at dens lyssensor måler en

værdi på under 20. Herefter drejer den så 90 grader på sit højre hjul. Nu kører den så frem indtil den rammer

fabrikken med sin tryksensor. Derefter skal den så igen dreje 90 grader på sit højre hjul. Den kører nu frem

indtil den ser den grå vej ved Lego manden (lyssensorens værdi ved vejen er under 20). Den samler Lego

manden op og drejer 90 grader på sit højre hjul. NXT Robotten kører frem og følger den grå vej, og stopper

når dens lyssensor måler en værdi over 20. Til sidst drejer den så 90 grader på sit venstre hjul og kører frem

hele tiden. Dette forløb er vist med et diagram (se figur 5).

Dette state diagram viser hele den nævnte forløb. Hvis vi tager udgangspunkt i den første cirkel på

diagrammet, som hedder Kører Frem. Denne cirkel kaldes også for en state, og fortæller at NXT Robotten nu

er i stadiet: Kører Frem. Så længe lyssensoren måler en værdi på over 20, bliver NXT Robotten ved med at

Figur 5

Page 12: Lego Mindstorm Kompendie

12

køre frem. Først når lyssensoren måler en værdi på under 20, kan NXT Robotten gå videre til næste state:

Drejer 90°. Prøv at se om i kan se sammenhængen mellem det skrevne forløb og dette state diagram.

Med dette state diagram er det nemt at lave et program til NXT Robotten, da man uden tvivl ved hvad

robotten skal gøre. Hver af disse state’s kan faktisk sammenlignes med en ”klods”/funktion i RoboLab.

Konstruktion:

Når man har designet programmet/programmerne kan den egentlig programmering begynde. Her er det

vigtigt at programmere et overskueligt program. I den ”virkelige” verden bruger man ordet spaghetti-kode

om et program, der er ustruktureret. At læse og forstå et program baseret på spaghetti-kode kan

sammenlignes med at skulle skaffe sig et overblik over, hvor hvert enkelt bånd i en portion spaghetti

begynder og slutter. Spaghetti-kode er især et problem ved vedligeholdelse af programmer, idet der er en

sammenhæng mellem et programs mangle på struktur og den tid det tager at sætte sig ind i det og ændre

det uden at introducere nye fejl. Skal i fx lave ændringer i jeres programmer på finaledagen, fordi noget skal

justeres, er det godt at have en struktureret program, da chancen for at tilføje programmerne nye fejl er

mindre.

Test:

I denne fase tester man sit program/programmer. Det er vigtigt, at man er grundig i sine tests, da man skal

sikre sig at programmet/programmerne lever op til de fastsatte krav. Finder man nogle fejl må man tilbage i

programmeringsfasen (konstruktion) for at udbedre fejlene. Det er ikke unormalt at gå frem og tilbage

mellem konstruktionsfasen og testfasen.

Vedligeholdelse:

Vedligeholdelsesfasen er den sidste fase i denne vandfaldsmodel, men er også den længste. Problemer som

opstår i forbindelse med den praktiske brug af programmerne bliver løst i denne fase. Denne fase vil inok

opleve på finaledagen, når i efter en kørsel eller to finder ud af at et eller flere programmer i NXT Robotten

skal justeres.

Denne beskrivelse af vandfaldsmodellen skulle gerne give jer, i store træk, en indsigt i hvordan nogle

virksomheder udvikler computerprogrammer. Denne vandfaldsmodel er beskrevet således, at vi vil kunne

bruge noget af det, når I skal udvikle jeres programmer til NXT Robotten. I behøver ikke at følge denne

model slavisk, men brug den som i nu har lyst til.

Page 13: Lego Mindstorm Kompendie

13

Guide til LabView

Her er en kort gennemgang af et simpelt program, som kommer rundt om de sensorer, vi synes er de

vigtigste.

Når vi starter LEGO Mindstorm Education NXT ser det sådan ud. Her kan vi vælge at starte et nyt projekt

eller fortsætte på et tidligere projekt. Vi vælger her at starte et nyt projekt. Vælg et passende navn til dette

projekt og tryk på ”Go”.

Page 14: Lego Mindstorm Kompendie

14

Så vil skærmbilledet komme til at se sådan ud. Her kan vi få en oversigt over alt hvad vi kan. I den røde

firkant kan man finde hjælp til hvordan man programmere NXT’eren. I den grønne firkant kan man finde de

”klodser” man skal bruge til at programmere NXT’eren. I den blå firkant kommer de forskellige ”klodsers”

egenskaber frem.

Den første del af denne opgave, skal vi have NXT’en til at køre frem uendeligt, indtil der bliver trykket på

den bagerste ”bumper” så skal den dreje til venstre med 2 omgange. Programmet skal meget gerne komme

til at se sådan ud.

Page 15: Lego Mindstorm Kompendie

15

Nu vil vi meget gerne have vores lys sensor med i programmet. Når man trykker på den kommer dens

egenskaber frem som vist nedenfor, i den grønne firkant kan man, hvis man har sluttet NXT’en til, se

værdien som sensoren har på et givet tidspunkt.

Her sætter vi så første del af programmet i den ”lyse” del af sensoren. Nu skal vi så have robotten til at lave

noget i den anden tilstand. Her vil vi godt motorerne til at køre tilbage i 1 rotation og derefter skal de køre

tilbage og drejes helt til venstre 230 grader.

Page 16: Lego Mindstorm Kompendie

16

Nu vil vi så meget gerne have robotten til at blive ved med udfører denne øvelse uendeligt. Derfor sætter vi

en gentagelses klods ind og vælger, at den skal gentage uendeligt.

Man kan også hvis man har en kombination af klodser, man skal bruge flere gange, lave en ”my block”, hvor

en klods laver en hel kombination af klodser. Vi prøver at gøre det på den sidste kombination vi lavede.

Først skal man markere de klodser man vil bruge, derefter trykker man på knappen ”edit” og så på knappen

”make a new my block”. Hvorefter klodserne bliver skiftet ud med en blå klods, som vist nedenfor.

Page 17: Lego Mindstorm Kompendie

17

Nu kunne det være godt, hvis vi selv kunne bestemme hvornår robotten starter. Det kan vi så gøre ved at

sætte en vente box ind, vi vælger at den skal vente på at vi trykker på knappen bagpå robotten.

Nu har vi så lavet et program som skulle kunne holde NXT robotten på et bord uden at falde ned. (dog kan

den efter et stykke tid køre skævt på en kant og få overbalance, så hold et vågent øje med den.)

Page 18: Lego Mindstorm Kompendie

18

Tips og Tricks til LEGO Mindstorms

Her vil vi prøve at gennemgå nogle gode ting man kan huske på, når man skal programmere en LEGO robot

fra LEGO Mindstorms.

Vi har tidligere gennemgået de forskellige sensorer, hvad de kan, hvordan de virker og hvorfor de er så

vigtige at bruge. Men ud over det er det også meget vigtigt at man strukturere sit program så man stadig har

et overblik over hvad der sker.

Hvordan opbygger man et program

Nok det vigtigste, når man laver et program, lige meget hvilken type, er at bevare et overblik over hvad der

sker hvornår, og hvordan, i dette tilfælde, NXT robotten opfører sig.

Tips og Tricks

Det er altid en rigtig god ide at lave de små hjælpe opgaver for at få en forståelse for hvordan LEGO

Mindstorm NXT robotten opfører sig. På den måde får I også en forståelse for, hvordan man laver et

program til NXT’en, og hvad de forskellige ”klodser” kan og hvordan de bruges.

Brug lidt tid på at forstå og udnytte de forskellige sensorer, og find ud af hvilke der er mest hensigtsmæssige

at bruge til denne turnering.

Udarbejdet af :

Studenterstudievejlederne på Ingeniør Højskolen i København

I forbindelse med 2. kursusgang i First Lego League 2008.