Documentatie
Voorbeeld programma's
Overzicht
Basisinstructies
Programmeerstructuren
Voorbeeld programma's
- je naam schrijven
- vind de stip
- lijnvolger
- een doolhof ontrafelen
Lego Mindstorms support
Meer

Voorbeeld programma's

In de volgende programma's krijg je een idee hoe de basisinstructies en programmeerstructuren tot interessant gedrag van de robot leiden. Probeer te begrijpen wat er in het programma staat, en waarom het werkt. Deze voorbeelden zijn ook in het boek te vinden met een uitgebreidere uitleg.

Probeer de programma's ook gewoon uit. Je kunt de ondestaande code kopieëren en in het scriptvenster van RoboMind plakken. Open van te voren ook de juiste kaart die staat aangegeven bij eslk voorbeeld.

 

Voorbeeld 1 : Je naam schrijven

Doordat de robot kan verven heb je de mogelijkheid simpele tekeningen te programmeren. Met de opdrachten verfWit() en stopVerven() kan je de robot zijn kwast op de grond laten zetten of juist niet. Als je de robot vervolgens laat rijden, zal er een streep op de grond achterblijven. Op deze manier kan je bijvoorbeeld de letter 'A' tekenen.

In de kaart openruimte.map heb je genoeg ruimte voor een kunstwerk. Probeer de afstandsbediening (menu: Uitvoeren > Afstandsbediening) eens uit om de robot te laten schilderen.

Zie ook: basic instructions: verven, bewegen

# Schrijf de letter 'A'
verfWit()


vooruit(2)
rechts()
vooruit(1)
rechts()
vooruit(2)
achteruit(1)
rechts()
vooruit(1)


stopVerven()

Voorbeeld 2 : Vind de stip

In de kaart findSpot1.map die standaard meegeleverd is met RoboMind zit er ergens in de muur links een nis. In deze nis vind je een witte stip. Stel dat je van te voren niet weet waar deze witte stip zich precies bevind, hoe moet de robot deze dan vinden als hij ergens langs de muur begint? Natuurlijk kan je van te voren zelf het aantal hokjes uittellen, maar er is een slimmere manier.

Laat de robot telkens één stapje vooruit zetten en laat hem controleren of hij nu een witte stip ziet. Als hij hem ziet, dan moet hij erop gaan staan en dan is hij klaar. Anders doet hij nog een stapje vooruit en controleert opnieuw, net zo lang tot hij hem heeft gevonden.

Zie ook: basisintructies:bewegen, zien, programmeerstructuren: herhalingen, als-structuren, eind

herhaal(){
    als(linksIsWit()){
        # Je staat naast de witte stip links
        links()
        vooruit(1)
        einde
    }
    anders{
        # Je hebt de stip nog niet gevonden. 
        # Ga een stap verder.
        vooruit(1)
    }
}

Een andere aanpak vind je in het volgende script. Hier gaat de robot net zo lang vooruit, totdat hij de muur links niet meer ziet. Dit moet de hoek zijn waar we de stip is. Dan draait de robot en gaat vooruit zodat hij op de stip beland.

herhaalZolang(linksIsObstakel()){
    vooruit(1)
}


links()
vooruit(1)
            

Voorbeeld 3 : Lijnvolger

De standaard kaart die wordt geopend in RoboMind is default.map. Hierin bevind zich een witte verfstreep die een spoor vormt door de omgeving. Hoe zou je de robot dit spoor kunnen laten volgen? De oplossing lijkt wel wat op het voorgaande voorbeeld. Nadat de robot naar het begin van de lijn gereden is, bepaalt de robot per stapje wat hij moet doen.

Zie ook: basic instructions:bewegen, zien, programming structures: herhalingen, procedures, als-structuren, end

# Ga naar het begin
rechts()
vooruit(8)


# Start de vervolging
herhaal()
{
    als(voorIsWit()){	
        vooruit(1)
    }
    anders als(rechtsIsWit()){
        rechts()
    }
    anders als(linksIsWit()){
        links()
    }
    anders als(voorIsVrij()){
        end
    }
}

Een andere aanpak is door gebruik te maken van een recursieve procedure. In het volgende script zie dat er een procedure volg() is gedefinieerd. Deze wordt een keer 'van buitenaf' aangeroepen (#Start de vervolging). In de procedure zelf zie je dat volg() zichzelf aanroept, nadat er een stap in de juiste richting is gezet. Hierdoor krijg je een hele reeks aanroepen volg(...volg(...volg(...)...)...) die telkens de juiste stap zet op het moment dat de procedure wordt uitgevoerd. Dit soort cyclische definities noemt men recusief. Het is waarschijnlijk wat vreemd wanneer je dit voor de eerste keer ziet. Maak je geen zorgen. Speel ermee, voor het programma langzaam uit, en het wordt duidelijker.

# Ga naar het begin
rechts()
vooruit(8)


# Start de vervolging
volg()


# Recursieve definitie
procedure volg(){
    als(voorIsWit()){	
        vooruit(1)
        volg()
    }
    anders als(rightIsWhite()){
        rechts()
        volg()
    }
    anders als(linksIsWit()){
        links()
        volg()
    }
    anders als(voorIsVrij()){
        # Spring uit deze aanroep,
        # en daardoor uit alle 
        # voorgaande aanroepen
        retourneer
    }
}
    

Voorbeeld 4 : Een doolhof ontrafelen

Hoe ontrafel je een willekeurig doolhof? Het blijkt dat je door simpelweg altijd de linker of de rechter muur te volgen ieder oplosbaar doolhof doorkomt. Hieronder vind je het programma waarmee je bijvoorbeeld de kaart maze1.map kunt doorkruisen.

Zie ook: basic instructions:bewegen, zien, programming structures: herhalingen, als-structuren, end

herhaal(){	
    als(rechtsIsObstakel()){
        als(voorIsVrij()){
            vooruit(1)
        }
        anders{
            links()
        }
    }
    anders{
        rechts()
        vooruit(1)
    }

    als(voorIsBaken()){	
        pakOp()
        end
    }
}
    

RoboMind - Copyright © 2005 - 2014 - Research Kitchen