Jython

6. Der lernende Roboter


Das Verhalten vieler Roboter ist nicht fest einprogrammiert, sondern die Roboter verhalten sich gemäss Informationen , die sie aus einem Speicher, analog einem Gedächtnis, zurück  holen. Der Speicher kann entweder durch "Anlernen" mit einen "Teacher" oder durch "Selbstlernen" (Lernen aus eigener Erfahrung) gefüllt werden. In den folgenden Beispielen wird an einfachen Beispielen aufgezeigt, wie ein Roboter durch einen Mensch angelernt wird Dann soll er auch mit Hilfe seiner Sensoren selbst lernen, eine Aufgabe zu erfüllen.

Beispiel 1: Der Roboter lernt im "Teach-Mode"
Industrierobotern werden in einem "Teach Mode" durch einen Spezialisten (Teacher) "angelernt", beispielsweise welche Armbewegungen durchzuführen sind. Der Teacher verwendet dabei meist ein Eingabesystem ähnlich einer Fernsteuerung. Dabei wird der Roboter nacheinander in die gewünschten Positionen gefahren und der jeweilige Zustand abgespeichert.

In unserem Beispiel wird der Roboter in der Lernphase mit einem zweiten micro:bit ferngesteuert, um den Weg in einem einfachen Labyrinth zu finden. Da in dieser einfachen Bahn die geraden Wegstücke gleich lang sind und senkrecht auf einander stehen, muss der Teacher den Roboter nur anweisen, ob er links oder rechts abbiegen soll. Er führt die Befehle aus und speichert die Left- bzw. Right-Commandos in der Liste memory. Die Liste ist zu Beginn leer. Beim Erhalt der Message LEFT wird mit dem Befehl memory.append(0) eine 0 , beim Erhalt der Message RIGHT mit memory.append(1) eine 1 hinzugefügt. Ist der Lernprozess abgeschlossen, wird der Roboter zurück an die Startposition versetzt und kann mit Klick auf den Button A die Strecke selbständig abfahren.    

 

Programm Teacher (micro:bit):    
#Mr6a.py
from microbit import *
import radio

radio.on()
state = "STOP"
oldState = ""
while True:
    if button_a.was_pressed():
        state = "LEFT"
        display.show('L')
    elif button_b.was_pressed():
        state = "RIGHT"
        display.show('R')
    else:
        state = "STOP"
        display.show('S')
    if oldState != state:
        radio.send(state)
        oldState = state   
    sleep(10)
► In Zwischenablage kopieren
 

 


Programm Roboter:    
# Mr6b.html (receiver)
from microbit import *
from mbrobot import *
import radio

def fd():
    forward()
    sleep(moveTime)
    stop()
    
def run():
    for k in memory:
            if k == 0:
                left()
                sleep(turnTime)                
            elif k == 1:         
                right()
                sleep(turnTime)
            fd()

moveTime = 1000
turnTime = 500
radio.on()
setSpeed(20)
memory= []
while not button_a.was_pressed():   
    rec = radio.receive()    
    if rec == "LEFT":
        memory.append(0)
        left()
        sleep(turnTime)
        fd()
    elif rec == "RIGHT":
        memory.append(1)
        right() 
        sleep(turnTime)
        fd()
    else:    
        stop() 
run()            
exit()
► In Zwischenablage kopieren
 

 

Erklärungen zum Programmcode:

memory = [] : Die Liste memory ist zu Beginn leer
memory.append(0): beim Linksabbiegen wird eine 0 in die Liste hinzugefügt
memory.append(1): beim Rechtsabbiegen wird eine 1 hinzugefügt
def run(): Definiert unter Verwendung der Liste memory, wie die Bahn abzufahren ist
while not button_a.was.pressed() Der Roboter empfängt die Befehle und aktualisiert memory-Liste so lange, bis der Button A (auf dem Roboter) gedrückt wird. Danach wird die Funktion run() ausgeführt.


Beispiel 2: Roboter lernt mit Hilfe seines Ultraschallsensors, eine einfache Bahn abzufahren
Mit Hilfe seines Ultraschallsensors kann Roboter selbst lernen, eine Bahn mit gleich langen Wegstücken abzufahren. Dabei verfolgt er folgende Strategie: Er fährt vorwärts, bis er eine Wand in der Nähe detektiert. Danach dreht er 90° nach links und untersucht mit seinem Ultraschallsensor die Umgebung. Falls er wieder eine Wand "sieht", hat er die falsche Richtung gewählt, dreht 180° nach links. PUNKT DANN st fährt er weiter bis zur nächten Wand. Er speichert in seinem Gedächtnis 0 für links und  1 für rechts.

Durch Drücken des Buttons A kann der Roboter anschliessend die Bahn selbständig abfahren, indem er die gespeicherten Informationen verwendet .

in Vorbereitung

Beispiel 3: Der Roboter lernt mit seinem Ultraschallsensor und einem Timer, eine beliebige Bahn mit rechtwinkligen Wegstücken abzufahren.

Wie im Beispiel 2 lernt der Roboter, wo er links und wo rechts abbiegen soll. Da die geraden Wegstücke jetzt nicht mehr gleich lange sind, startet er zu Beginn jedes Wegstücks den Timer und misst die Zeit bis zur nächsten Wand. In seiner Memory-Liste speichert er jetzt jeweils 2 Werte: Die Fahrzeit für das entsprechende Wegstück und 0 bzw. 1 für links bzw. rechts.

Durch Drücken des Buttons A kann der Roboter anschliessend die Bahn selbständig abfahren, indem er die gespeicherten Informationen verwendet.

in Vorbereitung