Logistieke Robots/les 3: verschil tussen versies

Uit Lab
Naar navigatie springen Naar zoeken springen
Regel 79: Regel 79:
* (r. 4-15) De definitie van de functie <code>main()</code>;  
* (r. 4-15) De definitie van de functie <code>main()</code>;  
* (r. 17) Een aanroep van de functie <code>main()</code>: de opdrachten in de definitie daarvan worden uitgevoerd.
* (r. 17) Een aanroep van de functie <code>main()</code>: de opdrachten in de definitie daarvan worden uitgevoerd.
Het is belangrijk om te begrijpen hoe een script werkt. Wanneer deze controller geactiveerd wordt (bijvoorbeeld door een sensor), wordt het script uitgevoerd, en gebeurt er het volgende:
# <code>import bge</code>    - Het script importeert de module ‘bge’ en beschikt zo over alle gedefinieerde functies in de bge module.
# <code>def main():<code>    - definieert de functie main met de daarop volgende opdrachten.
# <code>main() <code>  - aanroep van de functie main. De opdrachten in de definitie (“body”) van de functie main worden uitgevoerd.

Versie van 9 dec 2014 09:31

Logistieke Robots

Lessen

  1. Les 1
  2. Les 2
  3. Les 3
  4. Les 4
  5. Les 5
  6. Les 6
  7. Les 7
  8. Les 8

Software

Zie ook Regels en richtlijnen
Zie ook Artikelen bewerken

Morsy besturen met Python

In de vorige les hebben we gezien dat de controller van Morsy veel complexer wordt als we hem autonoom aan willen sturen. Wanneer we Morsy nog meer taken willen geven, en wanneer we Morsy in een groep willen laten werken, zijn de logic bricks niet meer toereikend. Daarom gaan we Blender combineren met de programmeertaal Python.

Controleer eerst of de juiste versie van Python op je systeem geïnstalleerd is, op de juiste plaats. (Zie: Python installeren voor verdere aanwijzingen.) In sommige gevallen is Python geïnstalleerd als onderdeel van Blender.

Blender combineren met programmeertaal Python

In deze les gebruiken we warehouse.blend. Deze omgeving zullen we gedurende de rest van het project gebruiken. Het openen van het bestand gaat nu anders omdat we de Python output willen zien.

OS X: Blender opstarten met Terminal

Ga naar de Blender applicatie en open de Package Contents van Blender.

Show Package contents

Open vervolgens het blender executable bestand via het openen van de volgende folders:

Blender starten met terminal

Als Blender opstart, kun je via File>Open het bestand “warehouse.blend” openen.

Windows:

Open Blender op de gebruikelijke manier. Ga naar de Info Window en klik op Window >Toggle System Console. Er is nu een extra scherm in beeld.

Wanneer je de file “warehouse.blend” geopend hebt, zie je in het window linksonder een Tekst Editor. Hier kun je een Python controller ontwikkelen.

Controleren of Python werkt in Blender

Om te testen of de link tussen Blender en Python werkt, voeren we de volgende stappen uit:

  1. Voeg aan Robot_11 (de voorste) een Always sensor toe.
  2. Maak een nieuw Python script aan:
    1. klik op de "+" onderin het Text Editor venster (naast de naam van het bestand).
    2. verander de naam van het bestand in "Text.py"
    3. typ in de Text Editor: print(“Hello”)
  3. Voeg aan Robot_11 een Python controller:
    Voeg Python controller toe
  4. Selecteer als script voor deze Python-controller: "Text.py"
  5. Link de controller met de sensor:
    Link sensor en controller
  6. Ga na de spel modus (of, voor OS X, naar de Terminal) en kijk naar de console. Dit moet er nu in de console te zien zijn:
Blender Game Engine Started
Hello
Blender Game Engine Finished

Ontwikkelen van een controller in Python

Nu je weet hoe je Python aan Blender moet koppelen, kunnen we een Python controller maken. We gaan Morsy, nu genaamd Robot_11, naar een kast laten lopen om een artikel op te halen en in de box te zetten op tafel. Voordat we hieraan kunnen beginnen moeten we begrijpen hoe je sensoren kunt opvangen en actuatoren kunt aansturen via een Python controller.

Morsy laten lopen door een Python controller

Wat je in deze paragraaf gaat leren lijkt op wat je geleerd hebt in les 2, het autonoom laten ophalen van objecten en naar een bepaald doel brengen, maar nu doen we dat via een Python controller.

Stap 1: Onderdelen van een script

Blender heeft al een opzet voor hoe je een robot moet aansturen. Ga in de Tekst editor window naar Templates > Python> GameLogic Simple. Je ziet nu de volgende code verschijnen:

import bge


def main():

    cont = bge.logic.getCurrentController()
    own = cont.owner

    sens = cont.sensors['mySensor']
    actu = cont.actuators['myActuator']

    if sens.positive:
        cont.activate(actu)
    else:
        cont.deactivate(actu)

main()

Dit heet een script. Dit script bestaat uit verschillende onderdelen.

  • (r. 1) import bge importeert de Blender Game Engine module voor Python. In deze module is onder andere de functie logic.getCurrentController() gedefinieerd.
  • (r. 4-15) De definitie van de functie main();
  • (r. 17) Een aanroep van de functie main(): de opdrachten in de definitie daarvan worden uitgevoerd.

Het is belangrijk om te begrijpen hoe een script werkt. Wanneer deze controller geactiveerd wordt (bijvoorbeeld door een sensor), wordt het script uitgevoerd, en gebeurt er het volgende:

  1. import bge - Het script importeert de module ‘bge’ en beschikt zo over alle gedefinieerde functies in de bge module.
  2. def main(): - definieert de functie main met de daarop volgende opdrachten.
  3. main() - aanroep van de functie main. De opdrachten in de definitie (“body”) van de functie main worden uitgevoerd.