Roboterarmsteuerung mittels SOM

Beleg - Neuronale Netze

Autor: Dirk Voigt

Betreuer: Prof. Dr. rer. nat. habil. H. Iwe



Inhalt



    Aufgabe

    Zu betrachten ist ein Roboterarm im zweidimensionalen Raum. Dabei kann der Roboterarm mittels zweier Gelenke bewegt werden. Die Bewegungen des Armes können in einem definierten Bereich, der sogenannten Arbeitsfläche erfolgen. Auf dieser Grundlage ist ein neuronales Netz, in diesem Fall ein SOM, zu entwicklen, welches dem Roboter ein Lernen ermöglicht. Ziel ist es, durch das angelernte neuronale Netz, den Roboterarm möglichst genau zu den geforderten Koordinaten zu bewegen.
    Die Lösung sollte variabel gestaltet werden. Aus diesem Grund, sind die Längen der Roboterarmsegmente als auch die Arbeitsfläche veränderlich zu erstellen. Die nachfolgende Abbildung zeigt einen solchen Roboterarm.
    Roboterarm
    Abbildung 1: Roboterarm


    Die Berechnung der Winkel und der zugehöhrigen Punkte kann mittels der folgenden Formeln erfolgen:

    • x = L1 * cos(α) + L2 * cos(α + β)
    • y = L1 * sin(α)  + L2 * sin(α + β)
    • α = tan-1(y/x) - tan-1( (L2 * sin(β)) / (L1 + L2 * cos(β)) )
    • β = cos-1( (x² + y² - L1² - L2²) / (2 * L1 * L2) ) bzw.
    • β = 2Π - cos-1( (x² + y² - L1² - L2²) / (2 * L1 * L2) )


    Benutzerhinweise

    Vorgehensweise

    Das Programm ist als Java-Applet realisiert. Um es zu benutzen, sollte es mit einem entsprechendem Applet-viewer oder mittels eines Browser geöffnet werden. Das prinzipielle Vorgehen wird nachfolgend erläutert.

    • Arbeitsflächeneinstellungen anpassen
    • Button » Arbeitsfläche erstellen « betätigen
    • In der Textbox werden die Anzahl der erreichbaren und nicht erreichbaren Punkte angezeigt
    • Lerneinstellungen anpassen
    • Button » Neuronen anlernen « betätigen
    • In der Textbox wird die Größe der Neuronenebene angezeigt
    • Ist das Lernen beendet, wird in der Textbox die Dauer des Lernvorganges angezeigt
    • gewünschten Testpunkt unter der Marke » Teste auf Position « einstellen
    • Button » Test « betätigen

    Nach betätigen des Testbuttons wird der Roboterarm auf Grundlage des neuronalen Netzes an die errechnete Position bewegt. Das wird im unteren Programmteil visualisiert. Zusätzlich werden die errechneten Koordintaten unter der Marke » Istwert der Position « dargestellt. Falls der Punkt nicht erreichbar ist, wird eine enstprechende Meldung in der Textbox angezeigt. Durch Veränderungen in den Lerneigenschaften kann die Genauigkeit verbessert werden.


    Arbeitsflächeneinstellungen

    Die Arbeitsflächengröße ist variabel und kann über das Feld » Laenge der Ebene « verkleinert als auch vergrößert werden. Ebenfalls sind die zwei Längen des Roboterarmes veränderbar und können mittels der Felder » Laenge Armsegment 1 « bzw. « Laenge Armsegment 2 « angepasst werden.
    Soll eine neue Arbeitsfläche erstellt werden, so muss nach Anpassung der Einstellungen der Button » Arbeitsflaeche erstellen « betätigt werden. Diese Änderungen werden im unteren Teil des Programms, auf der Arbeitsfäche, sichtbar. Außerdem werden die Anzahl der erreichbaren und nicht erreichbaren Punkte in der Textbox angezeigt. Durch intelligente Einstellung der Roboterarmsegmentlängen kann die Anzahl der erreichbaren Punkte beeinflußt werden.

    Arbeitsflächeneinstellungen

    Abbildung 2: Arbeitsflächeneinstellungen


    Lerneinstellungen

    In diesem Teil kann das Lernverhalten des Roboterarmes verändert werden. So ist es möglich die Anzahl der Neuroen über das Feld » Neuronenanzahl « nach vorgegebenen Werten zu bestimmen. Außerdem kann hier der Anfangsradius, über das entsprechende Feld » Anfangsradius «, gewählt werden. Ergänzend ist es weiter möglich, die Lernrate mittels des Feldes » Lernrate « und die Anzahl der Lernzyklen über das gleichnamige Feld, » Lernzyklen « anzupassen.
    Sind alle Werte wie gewünscht eingestellt, so ist um den Lernvorgang zu starten, der Button » Neuron anlernen « zu betätigen. Der Lernfortschritt wird mittels eines Fortschrittsbalken im oberen Teil angezeigt.

    Lerneinstellungen

    Abbildung 3: Lerneinstellungen


    Test des neuronalen Netzes

    Ist der Lernvorgang abgeschlossen, so kann das Netz getestet werden. Hierzu werden die gewünschten Punkte unter der Marke » Teste auf Position « eingestellt und anschließend kann mittels des Buttons » Test « das neuronale Netz abgefragt werden. Die Ergebnisse eines solchen Testes werden auf der Arbeitsfläche mit der entsprechenden Stellung des Roboterarmes gezeichnet. Außerdem werden, zur Kontrolle, auf der linken Seite unter der Marke » Istwert der Position « die berechneten Werte des Punktes angezeigt.

    Testen des Netzes

    Abbildung 4: Testen des Netzes


    Die Arbeitsfläche und das Textfeld

    Mit Arbeitsfläche ist die Ebene gemeint, in welcher sich der Roboterarm bewegen kann. Diese wird in der unteren Hälfte des Programmes angezeigt. Das Textfeld befindet sich unmittelbar über der Arbeitsfläche.
    Die Arbeitfläche dient der Visualisierung des Roboterarmes in der gewünschten Ebene sowie der Überprüfung des Lernverhaltens. In dem Textfeld werden verschiedene nützliche Statusinformationen angezeigt. Die rot gezeichneten Radien zeigen den Bereich der von dem Roboterarm nicht erreicht werden kann. Dieser Bereich kann durch Veränderung der Roboterarmlängen beeinflußt werden.

    Roboterarm auf Arbeitsfläche

    Abbildung 5: Roboterarm auf Arbeitsfläche


    Erreichbare und nicht erreichbare Punkte

    Wie schon weiter oben erwähnt, können nicht alle Punkte auf der Arbeitsfläche erreicht werden. Punkte die nicht erreicht werden können, weil der Roboterarm zu kurz ist oder weil das zweite Armsegment länger als das erste ist, werden mittels der rot gezeichneten Radien kenntlich gemacht.
    Es gibt allerdings noch weitere Punkte die nicht erreicht werden können. Zum Beispiel, wenn ein Punkt auf einer Koordinaten liegt, bei der das erste Roboterarmsegment über 90 Grad bewegen müsste um diesen Punkt zu erreichen. Da sich der Arm nur auf der Arbeitsfläche bewegen darf, ist ein solcher Punkt ebenfalls nicht erreichbar. Desweiteren werden viele nicht erreichbare Punkte erzeugt, wenn die Länge des ersten Armsegmentes größer ist, als die Höhe der Arbeitsfläche.
    Bei der Erstellung der Arbeitsfläche sollte daher die Anzahl der nicht erreichbaren Punkte mittels der Textbox überprüft werden.


    Entwicklerhinweise

    Einleitung

    Selbstorganisierende Eigenschaftskarten werden nach ihrem Entwickler, dem finischen Ingenieur Teuvo Kohonen, auch Kohonen-Netzwerke bzw. Self Organizing Maps genannt. Sie sind in der Lage mehrdimensionale Eingabemuster auf einer zweidimensionalen Struktur abzubilden. Diese Struktur bildet sich dabei durch Wettbewerbslernen (competitive learning) in einen unüberwachten Lernprozess von selbst aus, weswegen man bei diesem Netzwerktyp auch von selbstorganisierenden Eigenschaftskarten spricht.
    Diese Art von neuronalem Netz, bildet Nachbarschaftsbeziehungen im Eingaberaum durch Nachbarschaften in den Neuronenbeziehungen nach. Das heisst, werden ähnliche Eingaben an das Netz gestellt, reagieren benachbarte Neuronen auf diese Eingaben. Dies ist der natürlichen Arbeitsweise des Gehirns nachempfunden.
    SOM werden besonders bei der Klassifizierung von Eingaben eingesetzt. So kann man sie bei der Spracherkennung, Dokument-Klassifikation oder auch Datenanalyse einsetzen. Mehr zu Self Organizizing Maps kann hier nachgelesen werden.

    Das neuronale Netz

    In diesem Beleg wurde ein zweidimensionales SOM benutzt, wobei die Ebenenkanten nicht verbunden sind. Die Anzahl der Neuronen ist variabel einstellbar und hat somit großen Einfluß auf den Lernerfolg.

    Abbildung eines SOM

    Abbildung 6: Self Organizing Map


    Diese SOM-Netzwerke bestehen aus mindestens zwei Schichten, der Eingabeschicht und der Ausgabeschicht. Die Ausgabeschicht wird auch Kohonenschicht genannt. Jedes Neuron der Eingabeschicht (Pattern) ist mit jedem Neuron der Kohonenschicht verbunden. Jedes dieser Kohonen-Neuronen hat einen Gewichtsvektor.
    Die Neuronen der Eingabeschicht sind über diesen Gewichtsvektor mit den Neuronen der Kohonenschicht verbunden. Das Prinzip der SOM besteht nun darin, dass die Neuronen der Kohonen-Schicht ihre Gewichte so anpassen, dass charakteristische Eingabemerkmale auf einem bestimmten Bereich der Kohonenschicht abgebildet werden.

    Neuronen

    Die Neuron der Kohonenschicht, in diesem Beleg, werden durch eine zweidimensionale Ebene repräsentiert. Zwischen den Neuroen der Eingabeschicht und den Neuronen der Kohonenschicht befindet sich ein Gewichtsvektor mit 2 Werten für jedes Neuron der Kohonenschicht. Diese Gewichte werden während des Lernvorganges verändert. Somit kann das neuronale Netz trainiert werden.


    Startzustand

    Zu Beginn werden alle Neuronen erstellt und die Gewichte der Kohonen-Neuronen mit einem zufälligen Wert initialisiert. In diesem Stadium ist das Netz nicht ausgebildet und repräsentiert sich damit als ungelerntes Netz.


    Lernen

    Das Lernen in einem SOM funktioniert unüberwacht. Das heißt, es wird ein zufälliger Lerndatensatz ausgewählt und anschließend an das Netz angelegt. Nun ist das Gewinner-Neuron der Kohonenschicht zu suchen. Ist ein Gewinner ermittelt beginnt das Lernen dieses Datensatzes. Dazu werden alle Nachbar-Neuronen, die sich im Nachbarschaftsradius befinden, gesucht und es wird eine Anpassung der Gewichte vorgenommen. Dabei hat der Abstand vom Erregungszentrum als auch die Lernrate einen entscheidenten Einfluß auf die Berechnung.
    Im Verlaufe des Lernvorganges werden die Lernrate sowie auch der Nachbarschaftsradius verrringert. Dazu wird in diesem Beleg die Gauss-Funktion benutzt. Diese Funktion garaniert ein sanftes Anpassen der Gewichte.
    Das Verhalten, was dadurch entsteht, dient der Herausbildung der Grobstruktur des SOM am Anfang sowie der Feinabstimmung des Netzes zum Ende des Lernens hin. Das Lernen ist beendet, wenn die geforderte Anzahl von Lernzyklen durchlaufen wurde.

    Ablauf des Lernens

    • Gewinnerneuron finden
    • Nachbarschaft bestimmen
    • Nachbarschaftsfunktion berechnen
    • Anpassung der Gewichte aller Nachbarneuronen sowie des Gewinners
    • Verringerung des Nachbarschaftsradius
    • Verringerung der Lernrate


    Formeln

    • Distanz zum Eingabevektor:   dj = ||x - wj|| = √∑(xi-wij)2

    • Bestimmung des Gewinners:  dc = min(dj)  

    • Nachbarschaftsfunktion:          rij = hgauss (z,d) = e-(z/d)2

    • Gewichte neu berechnen:       wijneu = wijalt + ε * rij * ||x - wj||  

      ε ... Lernrate
      c ... Erregungszentrum
      z ... Abstand vom Erregungszentrum
      d ... Nachbarschaftsradius
      w ... Gewicht



Link zum Programm

10.04.2005, Dirk Voigt