Navigation eines LEGO™-Roboters mit Künstlicher Intelligenz Themengebiet: Mechatronik Dokumentation des Entwicklungsprozesses Maturaarbeit von: Pascal Alexander Hager, 1g Betreut von: R. Kretzschmar Gymnasium Thun Schadau September 2007 Impressum Themengebiet: Mechatronik Maturaarbeit – September 2007 „Navigation eines LEGO™-Roboters mit Künstlicher Intelligenz“ Dokumentation des Entwicklungsprozesses Betreut von R. Kretzschmar Gymnasium Thun Schadau Hager Pascal Alexander, 1g Amselweg 5B 3627 Heimberg 033 437 32 69 [email protected] aphager.com Hager Pascal Alexander 2007 MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 1. ABSTRACT Im Rahmen meiner Maturaarbeit habe ich einen Roboter aus LEGO entwickelt und programmiert. Das Ziel der Arbeit war, dass der Roboter mit Hilfe von Künstlicher Intelligenz in einer Simulationswelt navigieren kann. Der Roboter ist mit einer Kamera ausgestattet, deren Bild auf dem Computer analysiert wird. Der Computer steuert den Roboter anhand des Kamerabildes. Abbildung 1.1: Roboter Truck in Aktion Abbildung 1.2: Grundgestell des Roboters Truck Seite 3 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Der fertige Roboter (Abbildung 1.1 und Abbildung 1.2) lernt mit einem Neuronalen Netz das Nachfahren einer schwarzen Linie. Bei Gabelungen der Linie hält er an und sucht nach einem Strassensignal. Dieses liest er mit einer Merkmalsbasierten Erkennung und entscheidet anschliessend, welchen Weg er einschlagen soll. Bei guten Lichtverhältnissen kann er diese Aufgaben fehlerfrei ausführen. Um diese Künstliche Intelligenz zu realisieren, habe ich verschiedene Techniken ausprobiert und ausgewertet. Den gesamten Entwicklungsprozess habe ich dokumentiert. Die vorliegende Arbeit enthält diese Dokumentation und ergänzt sie mit der benötigten Theorie. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 2. INHALTSVERZEICHNIS 1. Abstract................................................................................................................... 3 2. Inhaltsverzeichnis .................................................................................................... 4 3. Vorwort ................................................................................................................... 5 4. Einleitung ................................................................................................................ 6 5. Theorie .....................................................................................................................7 5.1 Programmieren ........................................................................................................... 7 5.2 Künstliche Intelligenz ................................................................................................... 7 5.3 Neuronale Netze .......................................................................................................... 8 5.4 Merkmalsbasierte Erkennung..................................................................................... 12 6. LEGO......................................................................................................................14 6.1 Dokumentation ......................................................................................................16 7.1 Einleitung .................................................................................................................. 16 7.2 Vorarbeiten................................................................................................................. 17 7.3 Ziel der Arbeit definieren ........................................................................................... 20 7.4 Planung ..................................................................................................................... 21 7.5 Grundlegende Programmierung................................................................................. 22 7.6 Programmierung der Neuronale Netze....................................................................... 27 7.7 Bau des Roboters Truck ...............................................................................................31 7.8 Lernen des Folgen einer Linie ..................................................................................... 41 7.9 Andere Strassensystemen und Navigierungstechniken .............................................. 48 7.10 Erkennen und Verarbeiten von Abbiegungen ............................................................. 50 7.11 Strassensignale .......................................................................................................... 51 7.12 Ergänzende Arbeiten ................................................................................................. 54 7.13 Zusammenspiel der einzelnen Elemente .................................................................... 56 8. Diskussion .............................................................................................................. 57 8.1 Probleme & Verbesserungsmöglichkeiten ...................................................................57 8.2 Fazit und Aussichten ...................................................................................................57 9. Glossar .................................................................................................................. 58 9.1 Programmieren ......................................................................................................... 58 9.2 Getriebe .................................................................................................................... 59 10. Literatur- und Quellenverzeichnis, Nachschlagewerke ...........................................61 11. Anhang.................................................................................................................. 62 11.1 Medienverzeichnis ..................................................................................................... 62 11.2 Verwendete Anwendungen ........................................................................................ 62 12. Rechtshinweis ........................................................................................................63 13. Eidesstattliche Erklärung ........................................................................................63 Seite 4 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. 7. Spezielle LEGO-Bausteine ......................................................................................... 14 MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 3. VORWORT Lieber Leser, liebe Leserin Seit meiner Kindheit interessiere ich mich für „fast“ alles, was mit Technik oder Wissenschaft zu tun hat. Deshalb ist es für mich klar gewesen, dass ich ein Maturaarbeitsthema aus diesem Gebiet wähle. Robotik und Künstliche Intelligenz haben mich schon immer fasziniert. So ist es eigentlich kein Zufall, dass ich als Maturaarbeit einen Roboter gebastelt und programmiert habe. Um meinen Interessen gerecht zu werden, habe ich früher oft stundenlang mit meinen LEGOs gespielt. Ich weiss, wie nützlich der Baustoff LEGO ist, um technische Maschinen zu konstruieren. Man kann alles Mögliche basteln, umbauen und wieder zerlegen ohne Baumaterial zu verbrauchen. Deshalb ist es naheliegend, dass ich meinen Roboter aus LEGO gebaut habe. An dieser Stelle möchte ich all denen danken, die mir während meiner Maturaarbeit geholfen haben. Zuerst meiner Familie, die mich moralisch unterstützt hat und mir die Mittel für meine Arbeit zur Verfügung gestellt hat. Danach danke ich Herrn Kretzschmar dafür, dass er meine Maturaarbeit betreut und mich mit weiterem Material zum Thema versorgt hat. Zum Schluss möchte ich mich bei all denen bedanken, die meine Arbeit durchgelesen haben. An dieser Stelle verweise ich noch auf die Maturaarbeit von Daniel Jost, in der ebenfalls Neuronalen Netze behandelt werden. Seite 5 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Zu meiner Person: Ich heisse Hager Pascal und besuche zurzeit das Gymnasium Thun Schadau. Als Schwerpunktfach habe ich Physik und Anwendungen der Mathematik gewählt. Im Ergänzungsfach belege ich Chemie. In meiner Freizeit arbeite ich am Computer, höre Musik oder treffe mich mit Freunden. Wenn es die Jahreszeit erlaubt, fahre ich Ski oder gehe schwimmen. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 4. EINLEITUNG Als Ziel meiner Maturaarbeit will ich einen computergesteuerten Roboter bauen und entwickeln. Der fertige Roboter soll eine „Künstliche Intelligenz“ besitzen und selbständig agieren können. Am Beginn der Arbeit musste ich folgende Fragen beantworten: Was sollte der fertige Roboter können? Wo kann ich „Künstliche Intelligenz“ einsetzen? Woraus baue ich den Roboter, womit steuere ich ihn? Ich entschied mich, einen fahrtüchtigen Roboter aus LEGO zu bauen. Als Steuereinheit wollte ich einen RCX verwenden. Der Roboter sollte eine Kamera mit sich tragen, dessen Bild auf dem Computer analysiert wird. Der Computer sendet dann die Steuerungssignale an den RCX des Roboters. Ich unterteilte meine Maturaarbeit in zwei Phasen: Die Projekt- und die Schreibphase. In der Projektphase baute und programmierte ich die Roboter und führte Tests und Experimente durch. In der darauffolgenden Schreibphase verfasste ich die vorliegende Arbeit. Z UM A UFBAU DER A RBEIT Diese Arbeit ist verschiedene Abschnitte unterteilt: Nach der Einleitung beginnt die Theorie. Danach folgt ein Kapitel über LEGO. Anschliessend kommt der Hauptteil der Arbeit: Die Dokumentation. Die darauf folgende Diskussion ist relativ kurz, da in ihr nur Themen behandelt werden, welche die gesamte Projektphase betreffen. Die anderen Themen werden in der Dokumentation diskutiert. Am Ende der Arbeit finden Sie das Glossar, worin wichtige Begriffe erklärt werden, das Literatur- und Quellenverzeichnis und den Anhang. Seite 6 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Welche Aufgabe der Roboter am Ende haben sollte, lies ich an dieser Stelle noch offen. Wichtig war in erster Linie, dass der Roboter mit Künstlicher Intelligenz in einer Simulationswelt navigieren kann. Darauf legte ich in dieser Arbeit den Schwerpunkt. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 5. THEORIE In diesem Kapitel werde ich kurz auf das Programmieren eingehen. Danach werde ich erläutern, was ich unter Künstlicher Intelligenz verstehe. Der Hauptteil der Theorie betrifft die Neuronalen Netze und die Merkmalsbasierte Erkennung. 5.1 PROGRAMMIEREN Beim Programmieren wird Programmiercode geschrieben, dieser wird kompiliert, dass heisst er wird in Maschinencode umgewandelt. Diesen Maschinencode versteht der Computer. Anwendungen oder Programbibliotheken enthalten solchen Maschinencode. Die verwendete Programmiersprache C# (Sprich: C Sharp) ist objektorientiert. Eine genaue Erklärung, was das heisst, würde den Rahmen dieser Maturaarbeit bei weitem sprengen. Einfach gesagt bedeutet es, dass alles in Objekte aufgeteilt wird. Diese Objekte haben Eigenschaften und Funktionen. Fast alle Objekte sind Instanzen von Klassen. In einer Klasse werden die Eigenschaften und Funktionen des Objekts definiert. Wichtige Programmierbegriffe werden im Glossar unter 9.1 Programmieren erklärt. Beim Begriff „Künstliche Intelligenz“ denken viele Menschen sofort an Science-Fiction Filme, wie „Terminator“ oder „A.I. – Artificial Intelligence“, worin Menschenähnliche Maschinen die Hauptakteure sind. Das Gebiet der Künstlichen Intelligenz befasst sich aber allgemein gesagt mit dem „Erstellen von intelligenten Einheiten“. Das geht vom einfachen Zufallsgenerator bis zum Beweisen von mathematischen Theoremen über die Krankheitsdiagnose bis zum Schachspielen oder zum Schreiben von Gedichten. Es werden aber auch allgemeine Bereiche untersucht, wie das Lernen, die Wahrnehmung oder das Schliessen von logischen Schlüssen. Künstliche Intelligenz ist ein universelles Gebiet und meiner Meinung nach ausserordentlich interessant. Die beiden folgenden Theorieblöcke gehen auf die Bereiche Lernen und Wahrnehmung ein. 1 Vgl. Künstliche Intelligenz – Ein moderner Ansatz, Kapitel 1 - Einführung (Russell & Norvig, 2004) Seite 7 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. 5.2 KÜNSTLICHE INTELLIGENZ1 MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 5.3 NEURONALE NETZE2 Ein Neuron ist eine Zelle des Nervensystems von höher entwickelten Lebewesen. Die heutige Biologie nimmt an3, dass das Gehirn durch das Verknüpfen von Nervenzellen zu Netzwerken lernt und auf diese Weise Informationen verarbeitet. Diesen Grundgedanken hat man übernommen um künstliche Intelligenz zu erschaffen. Solche künstlich erschaffene Neuronale Netze haben die Fähigkeiten Berechnungen durchzuführen, verrauschte Eingaben zu tolerieren und zu lernen. In erster Linie approximieren sie aber eine Funktion. Dieses Kapitel behandelt zuerst die Einheiten in Neuronalen Netzen. Danach werden die Netzwerke genauer angeschaut und im Anschluss das Trainieren und Anwenden der Netze. Zum Schluss werden einige Bespiele aufgezeigt, die helfen sollen, dieses komplexe Thema besser zu verstehen. Jedes Neuronale Netz setzt sich aus Einheiten zusammen, die Neuronen genannt werden. Ein Neuron ist eine Rechnungseinheit. Das mathematische Model eines Neurons sehen Sie in Abbildung 5.1. Diese Rechnungseinheiten können mit einer gewichteten Verknüpfung verbunden werden. Die Gewichtung einer Verknüpfung vom Neuron 𝑗 zum Neuron 𝑖 wird 𝑤𝑗,𝑖 genannt. Mit dieser Verknüpfung wird die Signalausgabe 𝑎𝑗 des Neurons 𝑗 an die Einheit 𝑖 weitergeleitet. In einem ersten Schritt berechnet jedes Neuron die gewichtete Summe 𝑖𝑛𝑖 seiner Eingaben: 𝑛 𝑖𝑛𝑖 = ∑ 𝑤𝑗,𝑖 𝑎𝑗 𝑗=0 Formel 5.1: Berechnung der gewichteten Inputsumme Wie in Abbildung 5.1 ersichtlich, ist in dieser Summe auch ein sogenanntes „Bias-Gewicht“ enthalten. Dieses Gewicht ist eine Verknüpfung zu der Grösse −1. Das Bias-Gewicht verschiebt die Inputsumme. Nun wird die Signalaussage ausgerechnet, indem die Inputsumme der Aktivierungsfunktion des Neurons übergeben wird: 𝑛 𝑎𝑖 = 𝑔(𝑖𝑛𝑖 ) = 𝑔 (∑ 𝑤𝑗,𝑖 𝑎𝑗 ) 𝑗=0 Formel 5.2: Propagation Auf diese Weise wird ein Signal durch ein Neuronales Netz „propagiert“. 2 Sachwissen von (Russell & Norvig, 2004, S. 896-910; Kretzschmar, 2006) Vgl. Biologie Oberstufe (Cornelsen, 2001, S. 426-436) 4 Dies ist ein Zusammenfassung des gleichnamigen Kapitels auf S. 896 (Russell & Norvig, 2004) 3 Seite 8 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. 5.3.1 EINHEITEN IN NEURONALEN NETZEN4 MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 𝑎0 = −1 𝑎𝑗 Bias-Gewicht 𝑤0,𝑖 𝑤𝑗,𝑖 𝑛 𝑖𝑛𝑖 𝑎𝑖 = 𝑔(𝑖𝑛𝑖 ) 𝑔() 𝑔(𝑖𝑛𝑖 ) 𝑎𝑖 ∑ 𝑤𝑗,𝑖 𝑎𝑗 𝑗=0 𝑖𝑛𝑖 Eingabeverknüpfungen Eingabefunktion Aktivierungsfunktion Ausgabeverknüpfungen Ausgabe A KTIVIERUNGSFUNKTIONEN Es können verschiedene Aktivierungsfunktionen verwendet werden. Ich habe bei meinen Netzen ausschliesslich die lineare Funktion und die Sigmoid-Funktion verwendet. In der Abbildung 5.2 werden mögliche Aktivierungsfunktionen aufgezeigt. 𝑔(𝑖𝑛𝑖 ) 𝑔(𝑖𝑛𝑖 ) 𝑖𝑛𝑖 a) 𝑔(𝑖𝑛𝑖 ) 𝑖𝑛𝑖 b) 𝑖𝑛𝑖 c) Abbildung 5.2: Verschiedene Aktivierungsfunktionen a) lineare Funktion, b) Schwellenwert Funktion, c) Sigmoid oder logistische Funktion 5.3.2 NETZWERKE Durch den Aufbau des Neuronales Netzes wird festgelegt, welche Art von Funktion durch trainieren des Netzes approximiert werden kann. Jedes Neuronale Netz hat Inputneuronen und Outputneuronen. Bei diesen Neuronen werden neue Werte in das Netz eingespeist bzw. berechnete Werte ausgelesen. Alle andere Neuronen nennt man versteckte oder hidden Neuronen. Einfache Netzwerke sind in der Regel in Schichten aufgebaut. Einer Eingabeschicht mit den Inputneuronen und einer Ausgabeschicht mit den Outputneuronen. Dazwischen können beliebig viele versteckte Schichten mit hidden Neuronen geschaltet werden. Ein Netzwerk ohne versteckte Schichten nennt man Perzeptron-Netzwerk. 5 Diese Abbildung ist der „Abbildung 20.15“ des Buches Künstliche Intelligenz – Ein moderner Ansatz angelehnt. (Russell & Norvig, 2004, S. 896) Seite 9 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Abbildung 5.1:5 Mathematisches Model eines Neurons. Die Ausgabe 𝒂𝒊 wird nach der Formel 5.2: Propagation berechnet. 𝒂𝒋 ist die Ausgabe des Neurons 𝒋, welches über die Eingabeverknüpfung mit der Gewichtung 𝒘𝒋,𝒊 mit dem Neuron 𝒊 verbunden ist. Beachten sie, dass 𝒘𝟎,𝒊 das Bias-Gewicht ist, das mit der festen Eingabe 𝒂𝟎 = −𝟏 verbunden ist. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 5.3.3 TRAINIEREN & ANWENDEN Ist ein Netzwerk aufgebaut, kann man es trainieren. Dafür legt man eine Datenbank mit „Samples“ an. In einem Sample sind alle Inputwerte für die Inputneuronen zusammen mit den gewünschten Outputwerten für alle Outputneuronen gespeichert. Ziel ist es, die Gewichtungen der Verknüpfungen der Neuronen so anzupassen, dass für alle Inputwerte der Samples auch ihre gewünschten Outputwerte berechnet werden. Diese Anpassungen werden in kleinen Schritten, sogenannten Iterationen durchgeführt. Die verwendeten Lernalgorithmen zum Anpassen der Gewichtungen werde ich in dieser Arbeit nicht erklären6. S UMMED S QUARED E RROR (SSE) Während dem Lernen lässt sich ein Summed Squared Error (SSE) berechnen. Dieser Fehler zeigt, wie gut das Netz auf die Samples trainiert wurde. Er wird wie folgt berechnet: 𝐽 1 𝑆𝑆𝐸 = ∑(𝑦𝑗 − 𝑑𝑗 )2 2 𝑗 Formel 5.3: SSE-Fehlerfunktion. Ü BERANPASSUNG (O VERFITTING ) Es kann sein, dass sich ein Netz zu sehr an seine Samples anpasst, ohne eine generalisierte Lösung zu finden. Das heisst: Das Netz gibt zwar für die Eingaben, auf die es trainiert wurde, den richtigen Wert zurück. Weicht die Eingabe aber nur wenig ab, kann etwas total Falsches zurückgeben werden. Aus diesem Grund kann man eine zweite Sammlung von Samples anlegen, die ganz leicht von den Trainingssamples abweichen. Berechnet man den Fehler dieser Samples, so kann ein solches Überanpassen (Overfitting genannt) erkannt werden. Diesen Fehler nennt man Validationsfehler und die dazu verwendeten Samples Validationssamples. A NWENDEN Will man das Netz nach dem Trainieren anwenden, so übergibt man dem Netz alle Inputwerte und führt die Propagation nach Formel 5.2. durch. Sind die Berechnungen abgeschlossen, können die berechneten Werte bei den Outputneuronen ausgelesen werden. 6 Die Algorithmen werden in folgenden Quellen erklärt: (Russell & Norvig, 2004, S. 896-910; Kretzschmar, 2006) Seite 10 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. 𝑱 ist die Anzahl Samples und 𝒋 sein Zähler. 𝒚𝒋 ist die Ausgabe des Neuronalen Netzes für das Sample 𝒋 und 𝒅𝒋 ist die gewünschte Ausgabe dieses Samples. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 5.3.4 BEISPIELE VON NEURONALEN NETZEN Zum besseren Verständnis, was Neuronale Netze genau sind und was man mit ihnen machen kann, habe ich zwei Beispiele eingefügt: L INEARE F UNKTION Das in Abbildung 5.3 gezeigte Neuronale Netz kann auf eine lineare Funktion der Form (𝑦1 , 𝑦2 ) = 𝑓(𝑥1 , 𝑥2 , 𝑥3 ) trainiert werden. Inputneuronen 𝑗 𝑤0,4 1 𝑤1,4 𝑤1,5 𝑥2 𝑥3 2 𝑤2,4 4 𝑔() 5 𝑔() 𝑦1 𝑤0,5 𝑤2,5 𝑤3,4 3 𝑦2 𝑤3,51 Abbildung 5.3: Perzeptron-Netzwerk mit drei Input- und zwei Outputneuronen mit der Aktivierungsfunktion 𝒈(𝒙), das folgende Funktionen darstellt: 𝒚𝟏 = 𝒈(∑𝟑𝒋=𝟎(𝒘𝒋,𝟒 𝒙𝒋 )) = 𝒈(−𝒘𝟎,𝟒 + 𝒘𝟏,𝟒 𝒙𝟏 + 𝒘𝟐,𝟒 𝒙𝟐 + 𝒘𝟑,𝟒 𝒙𝟑 ) 𝒚𝟐 = 𝒈(∑𝟑𝒋=𝟎(𝒘𝒋,𝟓 𝒙𝒋 )) = 𝒈(−𝒘𝟎,𝟓 + 𝒘𝟏,𝟓 𝒙𝟏 + 𝒘𝟐,𝟓 𝒙𝟐 + 𝒘𝟑,𝟓 𝒙𝟑 ) Beachten Sie, dass 𝒘𝟎,𝒊 das Bias-Gewicht ist, das mit der festen Grösse 𝒙𝟎 = −𝟏 verbunden ist. Alle Gewichtungen (𝒘𝒋,𝒊 ) werden während dem Trainieren angepasst. Dieses Perzeptron-Netzwerk approximiert lineare Funktionen, solange die Aktivierungsfunktion 𝒈(𝒙) der Form 𝒈(𝒙) = 𝒂𝒙 + 𝒃 entspricht. B OOLESCHES UND Das folgende Netz (Abbildung 5.4) wurde auf die Boolesche Funktion UND trainiert. Die Definition der Booleschen Funktion UND kann in Tabelle 5.1 eingesehen werden. Inputneuronen 𝒙𝟏 0 0 1 1 𝒙𝟐 0 1 0 1 𝒚𝟏 0 0 0 1 Tabelle 5.1: Definition der Booleschen Funktion UND 𝑥1 ∈ {0; 1} Outputneuronen 𝑤0 = 1,5 𝑤1 = 1 𝑔𝑠𝑤 (𝑥) 𝑦 =∈ {0; 1} 𝑥2 ∈ {0; 1} 𝑤2 = 1 0, 𝑥 < 0 𝑔𝑠𝑤 (𝑥) = { 1, 𝑥 > 0 Abbildung 5.4: Ein Perzeptron-Netzwerk, das auf die Boolesche Funktion UND trainiert wurde. Die verwendete Aktivierungsfunktion ist die Schwellenwertfunktion 𝒈𝒔𝒘 (𝒙). Zum Trainieren dieses Netzes wurden die in Tabelle 5.1 aufgeführten „Samples“ benutzt. Seite 11 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. 𝑥1 Outputneuronen 𝑖 MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 5.4 MERKMALSBASIERTE ERKENNUNG7 Mit der Merkmalsbasierten Erkennung können Objekte wieder erkannt werden. Dazu werden die Kanten, die charakteristisch für ein Objekt sind, erfasst und mit einer zuvor angelegten Datenbank verglichen. Das Objekt mit der höchsten Übereinstimmung der Kanten gilt als erkanntes Objekt. Doch wie erkennt man Kanten und wie bestimmt man eine Grösse, die den Grad der Übereinstimmung darstellt? 5.4.1 ERKENNUNG VON KANTEN Das Erkennen von Kanten in einem Bild ist der einfache Teil der Erkennung. Bei einer Kante gibt es in der Regel einen Farb- oder Helligkeitsunterschied. Somit befinden sich überall dort Kanten, wo sich die Pixelfarbe binnen weniger Pixel stark verändert. Siehe Abbildung 5.5 von Bild a) zu Bild b). Nun haben wir eine Menge von Punkten, die die Kanten repräsentieren. (Abbildung 5.5 b). Jetzt vergleichen wir diese mit den Kantenpunkten in der Datenbank. Dazu legen wir die Kantenpunktmenge des Originales und die des Vergleichseintrags übereinander und suchen für jeden Kantenpunkt den Kantenpunkt im Vergleichseintrag, der am nächsten liegt. In Abbildung 5.5 sind ein Kantenpunkt ( ) und die Vergleichskantenpunkte ( , ) zweier Vergleichseinträge der Datenbank eingezeichnet. a) (log(𝑟) , 𝜃) b) c) d) Abbildung 5.5: Schritte der Objekterkennung. Die Markierungen in Rot, Blau und Grün zeigen einen Kantenpunkt an derselben relativen Bildposition. a) Originalbild zum Erkennen, b) Erkannte Kanten vom Bild a, c + d) Datenbankeinträge der Buchstaben A und B. Abb. 5.6: polarlogarithmisches Koordinatensystem Anschliessend wird für jeden Kantenpunkt ein polarlogarithmisches Histogramm erstellt. Das heisst: Man legt das in Abb. 5.6 gezeigte Koordinatensystem auf den Punkt und zählt die Anzahl Kantenpunkte in jedem Sektor. Je mehr Kantenpunkte im Sektor, desto dunkler wird die entsprechende Stelle im Histogramm gefärbt. Ein Histogramm zeigt also, wie ein Kantenpunkt relativ zu den anderen Kantenpunkten steht. 7 Das Grundprinzip für diese Erkennung stammt aus Künstliche Intelligenz – Ein moderner Ansatz (Russell & Norvig, 2004, S. 1077-1079) Seite 12 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. 5.4.2 GRAD DER ÜBEREINSTIMMUNG BESTIMMEN MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ log(𝑟) log(𝑟) log(𝑟) Abbildung 5.7 zeigt die Histogramme, der in Abbildung 5.5 markierten Kantenpunkten. Man sieht, dass die ersten zwei ähnlich sind. Sie stammen von Objekten mit ähnlichen Kanten (zweimal der Buchstabe A). Das dritte (vom Buchstaben B) sieht ganz anders aus, da dieser Buchstabe andere Kanten hat. θ θ θ a) b) c) Abbildung 5.78: Histogramme der markierten Kantenpunkte in Abbildung 5.5 a) Kantenpunkt , b) Kantenpunkt , c) Kantenpunkt Mathematisch muss nun irgendwie bestimmt werden, ob das Histogramm des Kantenpunktes und das des Vergleichskantenpunktes ähnlich sind. Um den Unterschied zweier Histogramme zu berechnen, wird folgende Formel verwendet: 𝐾 [ℎ𝑖 (𝑘) − ℎ𝑗 (𝑘)] 1 𝐶𝑖𝑗 = ∑ 2 ℎ𝑖 (𝑘) + ℎ𝑗 (𝑘) 2 Formel 5.4: Zur Berechnung der Differenz zweiter Histogramme. Wobei 𝑪𝒊𝒋 die Differenz zwischen dem Histogramm 𝒊 und dem Histogramm 𝒋 ist. 𝑲 ist die Anzahl HistogrammPunkte und 𝒌 sein Zähler. 𝒉𝒊 (𝒌) bzw. 𝒉𝒋 (𝒌) ist die Summe der Kantenpunkte am Histogramm-Punkt 𝒌 des Histogramms 𝒊 bzw. 𝒋. Nun berechnen wir die Differenz zwischen dem Histogramm des Kantenpunktes und dem des Vergleichskantenpunktes. Diese Histogramm-Differenz berechnen wir für alle Kantenpunkte. Die Summe dieser Histogramm-Differenzen ergibt den Grad der Übereinstimmung des Originalbildes und des Vergleichseintrages. Der Vergleichseintrag mit der höchsten Übereinstimmung gilt als erkanntes Objekt. In unserem Fall (Abbildung 5.5) hätte wohl der Vergleichseintrag des Buchstaben A (Bild c) die grössere Übereinstimmung mit dem Originalbild (Bild a), als der Vergleichseintrag des Buchstaben B (Bild d). Das Originalbild (Bild a) wird somit als Buchstabe A erkannt. 8 Die gezeigten Histogramme dienen der Veranschaulichung und sind nicht genau. Seite 13 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. 𝑘=1 MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 6. LEGO In diesem Kapitel erkläre ich, was LEGO ist und welche speziellen Bausteine ich verwende. LEGO ist ein wunderbares Spielzeug. Ich hatte das Glück, dass ich meine Eltern mir LEGOs kauften und ich mit ihnen aufwachsen konnte. Man kann aus ihnen unendlich viele Sachen selber bauen. Dabei werden das Vorstellungsvermögen und der Sinn für Logik stark gefördert und man kann kreativ tätig sein. Das technische Verständnis von Statik, Mechanik, Pneumatik und Elektrik wird insbesondere mit LEGO Technic einer Untergruppe von LEGO gestärkt. Mit der relativ jungen Untergruppe, LEGO MindStorms wird nun auch das Gebiet der Robotik betreten. Dies ist nun definitiv mehr als nur ein Spielzeug. LEGO MindStorms wird sogar von Erwachsenen gekauft, die Freude am Tüfteln haben. Auch das Institut für Technische Informatik und Kommunikationsnetze (TIK) der ETH Zürich nutzt LEGO MindStorms zu Lernzwecken9. Ich verwende für meinen Roboter Bausteine von LEGO MindStorms. Eine Erklärung für die in der Arbeit erwähnten Getriebe finden Sie im Glossar. RCX (A BB . 6.1) Der RCX ist einfach gesagt das Gehirn des Roboters. Er besitzt wie der Computer einen Prozessor (CPU) und einen Speicher. Über seine Infrarotschnittstelle lassen sich Programme auf ihn herunterladen, die anschliessend ausgeführt werden können. Ist ein Program auf den RCX geladen, kann er autonom ohne Verbindung mit dem Computer agieren. Der RCX kann nicht nur Programme ausführen, er kann auch direkt vom Computer gesteuert werden. Das heisst, man kann ihm den Befehl „Motor 1 einschalten“ geben, ohne zuerst ein Program zu schreiben, dass man herüber laden und ausführen muss. Man kann sogar mehrere Programme gleichzeitig ausführen lassen und ihn dazu noch direkt steuern. Er ist „Multitasking“ 10 fähig. Mit der Infrarotschnittstelle kann der RCX nicht nur mit dem Computer kommunizieren, sondern auch mit mehreren andern RCX. Abb. 6.1: RCX Der RCX hat drei Ausgänge und drei Eingänge. An die Ausgänge lassen sich Motoren, Lichter etc. anschliessen. Die Ausgangsleistung kann mit Pulsmodulation11 gesteuert werden. An die drei Eingänge lassen sich sowohl aktive wie auch passive Sensoren anschliessen. Aktiv heisst, der Sensor benötigt Strom, damit er messen kann. (z.B. der Lichtsensor). Passive benötigen keinen Storm (z.B. der Berührungssensor, der lediglich den Kontakt schliesst oder öffnet). Weiter gibt es noch Dreh- und Temperatursensoren. Der RCX wird von sechs 1,5 Volt Batterien mit Strom versorgt. 9 Quelle: (Institut TIK, 2007) Multitasking heisst es können mehrere Dinge (Tasks) gleichzeitig erledigt werden. 11 Pulsmodulation: Durch ganz schnelles Ein- und Ausschalten entsteht ein „halb eingeschalteter Zustand“. vgl. (RCX - Wikipedia, 2007; Pulsweitenmodulation - Wikipedia, 2007) 10 Seite 14 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. 6.1 SPEZIELLE LEGO-BAUSTEINE MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ M OTOR (A BB . 6.2) Die verwendeten Elektromotoren haben ein Drehmoment von circa 6 Newtonzentimeter bei ihrer Maximalspannung von 9 Volt. Sie können vorwärts und rückwärts drehen, sowie blockiert und nicht blockiert stillstehen. Abb. 6.2: Motor B ERÜHRUNGSSENSOR (A BB . 6.3) Berührungssensoren können erkennen, wie weit das gelbe Teil vorne hineingedrückt wird. In der Regel wird allerdings nur zwischen gedrückt oder nicht gedrückt unterschieden. L ICHTSENSOR (A BB . 6.4) Der Lichtsensor misst die Helligkeit des Lichts, das auf ihn fällt. Oberflächenhelligkeiten erfasst er, indem er die Oberfläche mit seinem roten LED beleuchtet und die Helligkeit des reflektierten Lichts misst. Abb. 6.4: Lichtsensor D REHSENSOR (A BB . 6.5) Mit diesem Sensor kann die Drehbewegung einer Achse überwacht werden. Dreht sich die Achse um 360 Grad im Uhrzeigersinn, so zählt es der Sensor als 16. Ein halbe Drehung zählt er als 8. Dreht sich die Achse gegen den Uhrzeiger sinn, so bewertet er es mit negativen Zahlen. Abb. 6.5: Drehsensor LEGO-K AMERA (A BB . 6.6) Diese Kamera ist eine normale Webcam, nur dass ihr Gehäuse ein LEGOBaustein ist, der sich mit anderen LEGO-Bausteinen verbauen lässt. Abb. 6.6: LEGO-Kamera Seite 15 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Abb. 6.3: Berührungssensor MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7. DOKUMENTATION 7.1 EINLEITUNG In der Dokumentation fasse ich all das zusammen, was ich während der Projektphase gemacht habe. Ich beginne mit den Vorarbeiten, der Zieldefinierung und der Planung. Danach werde ich wichtige Teile meines Programmes und den Aufbau des Roboters Truck beschreiben. Anschliessend dokumentiere ich die Entwicklungsschritte des Navigierens auf Strassensystemen und dem Verarbeiten von Abbiegungen und Strassensignalen. Darauf folgt eine kurze Erklärung von einigen ergänzenden Arbeiten. Am Schluss werde ich die Funktionsweise des fertiggestellten Roboters nochmals in einer Übersicht darlegen. Nach der Dokumentation folgt die Diskussion. Dort wird das Projekt als ganzes behandelt und nur allgemeine Probleme und Verbesserungsvorschläge aufgeführt. Meistens werden Teile der Arbeit bereits in der Dokumentation diskutiert, da sich viele Erkenntnisse auf den weiteren Verlauf der Projektphase ausgewirkt haben. Ich habe diese Aufteilung gewählt, da ich glaube, dass es verständlicher ist, wenn die Diskussion eines komplexen Sachverhaltes unmittelbar nach seiner Erklärung folgt. Im Medienverzeichnis des Anhangs können alle Dokumente der Projektphase eingesehen werden. Dort findet man ebenfalls Fotos und sämtliche Dateien, die ich während des Projekts angelegt habe, einschliesslich des vollständigen Programmiercodes. Seite 16 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Ich habe diese Dokumentation nur annäherungsweise chronologisch aufgebaut. Oft haben sich die einzelnen Arbeiten überschnitten oder sind gleichzeitig durchgeführt worden. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.2 VORARBEITEN Bevor ich mit dem Planen und der Zieldefinierung beginnen konnte, musste ich eine Reihe von Tests bezüglich der Machbarkeit durchführen. Zuerst musste ich herausfinden, wie ich die Kamera ansteuern kann, die ich für mein Projekt verwenden wollte. Nach ausgiebiger Durchforstung des Internets fand ich eine Seite, worauf eine Lösung erklärt wurde, die auch bei mir funktionierte. Aber dazu später mehr unter 7.5.5 Kameragrundklasse. Da ich vor hatte, meinen Roboter mit dem RCX auszustatten, wollte ich diesen zuerst ausgiebig testen, um all seine Funktionen und Tücken zu erkunden. Dazu führte ich eine kleine „Übung“ mit dem RCX durch: 7.2.1 ÜBUNG MIT RCX Abb. 7.1: Antriebsblock des Roverbots R EALISIERUNG Zuerst musste ich einen Test-Roboter bauen. Da ich für diese Übung keinen eigenen Roboter entwickeln wollte, habe ich einen nach LEGO-Bauplan 12 gebaut: den Roverbot mit Kettenantrieb (Siehe Abbildung 7.3). Der Roverbot mit Kettenantrieb ist ein ganz einfach aufgebauter Roboter. Er besteht aus einem Antriebsblock (Siehe Abb. 7.1), der zwei Motoren enthält, je einer rechts und links. An diesen Antriebsblock lassen sich verschiedene Fahrgestelle anbauen. Ich habe mich für die Ketten entschieden (Siehe Abb. 7.2). Ich hätte auch Räder oder Beine wählen können. Der Roverbot steuert auf eine andere Weise, wie wir es von Autos gewohnt sind. Da er für das rechte und das linke Fahrgestell einen eigenen Motor besitzt, kann er sie unterschiedlich stark antreiben. Treibt er das rechte Fahrgestell stärker an, fährt der Roverbot eine Linkskurve. Treibt er das linke Fahrgestell stärker an, fährt der Roverbot eine Rechtskurve. Ein grosser Vorteil dieses Antriebs ist, dass der Roboter sich an Ort und Stelle um die eigene Achse drehen kann. Dazu treibt er das eine Fahrgestell vorwärts und das andere rückwärts an. Zudem habe ich den Roverbot mit dem benötigten Lichtsensor ausgestattet. Dieser misst die Helligkeit des Untergrunds vorne in der Mitte des Roverbots. 12 Quelle des Bauplans: (The LEGO Group - MindStorms, 1999) Seite 17 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Um den RCX besser kennen zu lernen, wollte ich eine einfache Übung realisieren: Ein Roboter, der mit einem Lichtsensor ausgestattet ist, soll einer breiten schwarzen Linie auf weissem Grund folgen. Der Sinn dieser einfachen Übung war es, den RCX direkt zu programmieren. Das heisst ich verwende nicht das LEGO-Programmierstudio, sondern eine beliebige Programmiersprache. In meinem Fall war das C#. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ Abb. 7.2: Ketten des Roverbots Abbildung 7.3: Roverbot Ich werde die Funktionsweise des Programs kurz erklären (Siehe Abbildung 7.4): Trifft er auf die schwarze Linie, wird das vom Lichtsensor erkannt und der Roboter fährt eine Linkskurve. Erkennt der Lichtsensor einen weissen Untergrund, fährt der Roboter eine Rechtskurve, bis er wieder auf die Schwarze Linie trifft und er wieder nach Links zu fahren beginnt. Auf diese Weise folgt der Roboter der Linie. Zeichenerklärung Programbefehl Abfrage Ablauf des Programmes Ablauf bei positiver Abfrage Ablauf bei negativer Abfrage Tab. 7.1: Zeichenerklärung Erkennt der Roboter die schwarze Linie? Nach links drehen Erkennt der Roboter den Weissen Untergrund Nach rechts drehen Abbildung 7.4: Schematische Darstellung des Programmablaufs des Linienfolge-Programs Programmiertechnisch wird das so realisiert: Das Programm läuft in einer Endlosschlaufe. Sobald der ganze Code in dieser Schlaufe durchgearbeitet ist, wird wieder von vorne begonnen. In dieser Schlaufe wird der Helligkeitswert des Lichtsensors zweimal überprüft. Das erste Mal wird überprüft, ob der Helligkeitswert unter 50% liegt (schwarze Linie). Ist dies der Fall, soll der Roboter nach Links drehen. Dazu wird der linke Motor ausgeschaltet und der rechte Motor eingeschaltet. Bei der zweiten Überprüfung wird abgefragt, ob der Helligkeitswert über 50% liegt (weisse Unterlage). In diesem Fall soll der Roboter nach Rechts drehen. Dazu wird der rechte Motor ausgeschaltet und der linke Motor eingeschaltet. Nach beiden Überprüfungen beginnt die Schlaufe wieder von vorne. 13 Robotics Inventions System™ 1.5 von Lego MindStorms™ Seite 18 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Als nächstes habe ich das kleine Program für den RCX programmiert, das ihn der breiten schwarzen Linie folgen lässt. Der Algorithmus stammt nicht von mir, ich habe das Prinzip noch von einem Beispiel des LEGO-Baukastens13 gekannt. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ Damit Sie sich vorstellen können, wie der Programmiercode für so ein Programm aussieht, habe ich ihn in Programmcode 7.1 abgebildet. Er ist leicht vereinfacht, damit er besser verständlich ist. //sp (Spirit) ist die Klasse, womit ich mit dem RCX kommunizieren kann //Initialisiere Sensor 1 als Lichtsensor //Rückgabewerte des Lichtsensors in Prozent(0//Kraft (Volt) der beiden Motoren auf Maximum //Antriebsrichtung vorwärts sp.BeginOfTask(4) sp.Loop(2, 0) sp.If(9, 1, 1, 2, 50) sp.Off("0") sp.On("2") sp.EndIf() sp.If(9, 1, 0, 2, 50) sp.Off("2") sp.On("0") sp.EndIf() sp.EndLoop() sp.EndOfTask() //Neues Program //Endlosschlaufe Start //Wenn der Wert des Lichtsensors unter 50%... //Linker Motor ausschalten //Rechter Motor einschalten //Ende der Wenn-abfrage //Wenn der Wert des Lichtsensors über 50%... //Rechter Motor ausschalten //Linker Motor einschalten //Ende der Wenn-abfrage //Ende der Endlosschlaufe //Ende des Programms sp.StartTask(4) //Programm auf dem RCX ausführen Programmcode 7.1: Code für RCX Programmierung des Roverbot, damit dieser mit Hilfe eines Lichtsensors einer schwarzen Linie folgt. (Vereinfacht: Würde auf Grund programmiertechnischen Einschränkungen des RCX so nicht funktionieren. Siehe unten) R ESULTATE & S CHLUSSFOLGERUNG Wie erwartet, folgte der Roboter der Linie. Allerdings sind beim Schreiben dieses einfachen Programmes ein paar Schwierigkeiten aufgetaucht, da der RCX gewisse Hardware bedingte Einschränkungen beim Programmieren hat, von denen ich nichts wusste. Ich werde an dieser Stelle nicht näher darauf eingehen. Nun hatte ich genügend Tests gemacht, um das Ziel meiner Arbeit genauer zu definieren. Seite 19 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. //Initialisierungen sp.SetSensorType(1, 3) sp.SetSensorMode(1, 4, 0) 100) sp.SetPower("02", 2, 8) sp.SetFwd("02") MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.3 ZIEL DER ARBEIT DEFINIEREN Nach den Vorarbeiten wusste ich, welche Möglichkeiten in meinem Material stecken und wie ich es verwenden kann. Somit waren die Voraussetzungen erfüllt, das Ziel meiner Arbeit zu definieren. R OBOTER Fahrtüchtig sein mit… o Kettenantriebssystem o Automobilsystem (Steuerung vorne, Antrieb hinten) Mit Kamera ausgerüstet... o um in der Simulationswelt etwas sehen zu können Mit Werkzeug ausgerüstet… o zum Auf- und Abladen von Gütern o zur Hindernisbeseitigung Mit Sensoren ausgestattet… o zum Kollisionsschutz o zur Vermessung o zur genauen Motorenansteuerung S IMULATIONSWELT Strassensystem… o aus einer einfachen Linie o aus breiten Strassen mit Bodensignalen o mit Abbiegungen Strassenschilder… o bei Abbiegungen o für Hinweise und Verbote Dynamische Hindernisse… o aus anderen Fahrzeuge und Fussgänger o aus Ampeln und Strassensperren Dekoration… o zur Verschönerung der Simulationswelt F ÄHIGKEITEN Navigieren o Einer Strasse folgen o Abbiegungen nehmen Werkzeuge verwenden Optische Erkennung der Umgebung Ich wollte mit den einfachen Zielen beginnen und dann Schritt für Schritt alle Teilziele umsetzten. Es war mir klar, dass ich nicht jedes Teilziel erreichen konnte, aber so hatte ich eine Richtung definiert, an der ich mich beim Arbeiten orientieren konnte. Der Schwerpunkt der Arbeit lag aber auf dem Navigieren des Roboters mit Künstlicher Intelligenz. Dieses Ziel wollte ich erreichen. Weiter wollte ich darauf achten, dass alles ausbaubar ist und später erweitert werden kann. Seite 20 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Für meine Arbeit habe ich folgende Ziele definiert: MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.4 PLANUNG Die Ziele der Arbeit waren klar. Nun plante ich meine Vorgehensweise grob. Ich muss allerdings gestehen, dass ich chronisch im Verzug war. P ROJEKTPHASE (W OCHE 9-25) Detailplanung Test und Aufbau der Softwaregrundklassen Genaue Themensuche Thema festgelegt Spezifizierung der Soft-Hardware Ausbesserungen und Detailarbeit Abschliessen Woche 10-14 Woche 13-16 Woche 17 Woche 17-21 Woche 21-22 Woche 22-25 Tabelle 7.2: Detailplanung Projektphase S CHREIBPHASE (W OCHE 26-37) Detailplanung Planung Schreiben Abgabe Woche 26 Woche 27-37 Woche 38 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Tabelle 7.3: Detailplanung der Projektphase Seite 21 MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.5 GRUNDLEGENDE PROGRAMMIERUNG In diesem Kapitel erkläre die unterste Ebene meines Programs. Diese habe ich auch zuerst geschrieben. Die Klassen in dieser Ebene kommunizieren direkt mit dem Betriebssystem oder den Treibern der Hardware. Diese Klassen stellen sicher, dass das Program ausbaubar bleibt. Später wird das Program durch weitere, darüber liegende Ebenen erweitert. 7.5.1 RCX-GRUNDKLASSE Alle Befehle an den RCX werden via Infrarot übermittelt. Diese Art von Kommunikation ist ziemlich langsam. Sie ist so langsam, dass die Leistung des Computerprogrammes beeinträchtigen wird. Aus diesem Grund muss die Anzahl Befehle, die an den RCX gesendet werden, so tief wie möglich gehalten werden. Dies ist die Hauptaufgabe der RCXGrundklasse. Die Motorenansteuerung dieser Klasse sorgt dafür, dass nur die nötigen Befehle übermittelt werden. Wenn zum Beispiel ein Motor mit Stärke zwei im Uhrzeigersinn dreht und man ihm nochmals denselben Befehl gibt, übermittelt die Motorenansteuerung nichts, da der gewünschte Endzustand bereits erfüllt ist. Gibt man ihm den Befehl mit gleicher Stärke gegen den Uhrzeigersinn zu drehen, wird lediglich ein Befehl zum Ändern der Drehrichtung übertragen. Somit wird sichergestellt, dass das Program nicht durch unnötige Signalübertragungen verlangsamt wird. 14 Die Spirit-Klasse ist eine Programbibliothek von Lego (Spirit.ocx). Mit dieser Programbibliothek können Befehle vom Computer via Infrarot zum RCX gesendet werden. Seite 22 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Die RCX-Grundklasse ist für die Verbindung mit dem RCX und das Ansteuern der Motoren verantwortlich. Sie steuert die Spirit-Klasse14 von LEGO. Über diese Spirit-Klasse werden alle Befehle für den RCX abgewickelt. (Siehe Abbildung 7.5) MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.5.2 ROBOTERGRUNDKLASSE Die Robotergrundklasse vereinfacht in erster Linie die Verwendung von verschiedenen Robotern. Für das Verständnis des Programmablaufs ist sie aber unwichtig. Ich erkläre sie trotzdem, da sie aufzeigt, wie die Erweiterbarkeit der Software umgesetzt wurde. Um die folgende Beschreibung richtig verstehen zu können, ist ein Wissen über objektorientiertes Programmieren vorteilhaft. Die Abbildung 7.5 hilft dabei. Weiter verwaltet diese Klasse Eigenschaften eines Roboters wie Länge, Höhe etc., die für Berechnungen verwendet werden. Als abstrakte Klasse verlangt sie die Implementierung einer Vektorbewegungsfunktion, einer direkten Steuerung des Roboters via Computer und wenn nötig das Downloaden von Programmen auf den RCX, die der Roboter zum Betrieb benötigt. 7.5.3 GRUNDKLASSENAUFBAU DER RCX-ANSTEUERUNG Der Aufbau der Grundklassen und ihre Befehlsweiterleitung ist in Abbildung 7.5 ersichtlich. Hardware Kommunizierende Ebene RCX-Grundklasse Spirit RCX Zeichenerklärung Klasse Vererbung Befehle Externe Befehlsvera rbeitung RoboterGrundklasse Hardware Roboterebene Truck Roverbot Klassen der verschiedenen Roboter Tab. 7.4: Zeichenerklärung Programmeb ene Programm Abbildung 7.5: Darstellung der Grundklassen und der Befehlsweiterleitung. Das Programm steuert die Robotergrundklasse, welche Roboterspezifische Befehle extern in den Klassen der verschiedenen Roboter verarbeiten lässt. Die Robotergrundklasse leitet die Befehle weiter an die RCX-Grundklasse. Wenn notwendig sendet diese die Befehle weiter via Spirit-Klasse an die Hardware (RCX). (Siehe Tab. 7.4 für die Zeichenerklärung) Seite 23 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Diese Klasse ist eine Erweiterung der RCX-Grundklasse. Genauer gesagt ist es eine abstrakte Klasse, die von der RCX-Grundklasse erbt. Abstrakt heisst, sie ist nicht eigenständig. Sie muss weiter vererbt werden, damit sie verwendet werden kann. In ihr wird lediglich definiert, welche Funktionen eine Erweiterung dieser Klasse enthalten muss. Später werde ich Klassen für die gebauten Roboter schreiben. Diese Klassen werden dann eine Erweiterung dieser Roboterklasse sein. Dieser Aufbau hat den Vorteil, dass ich beim Ansteuern eines Roboters nicht wissen muss, wie der Roboter aufgebaut ist und welche Befehle man genau senden muss um ihn zu steuern. Die Robotergrundklasse erfordert zum Beispiel eine Funktion, die den Roboter um einen beliebigen Vektor fahren lässt. So kann ich einem Roboter den Befehl geben, bewege dich einen halben Meter vorwärts und dreissig Zentimeter nach rechts. Ob damit ein Kettenfahrzeug oder ein zweiachsiges Auto angesteuert wird, brauche ich nicht zu beachten. Die Verarbeitung des Befehls wird an die zuständige Klasse des Roboters weitergeleitet (Siehe Abbildung 7.5). MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.5.4 STANDARD VERBINDUNGSTEST In einer weiteren kleinen Klasse habe ich einen „Standard Verbindungstest“ geschrieben. Dieser wird beim Initialisieren der RCX-Grundklasse oder bei Verbindungsfehlern zur Diagnose aufgerufen. Er testet die Verbindung zum RCX und überprüft, ob dieser in Reichweite und eingeschaltet ist. Dazu ruft er eine Reihe von Funktionen der Spirit-Klasse auf. Danach wird angezeigt, wo der Fehler auftrat (Siehe Abbildung 7.6). Dies sorgt für eine schnelle Fehlerbehebung. Tritt ein Verbindungsfehler während dem Ausführen des Programs auf, stürzt das Program nicht einfach ab, sondern wird vorübergehend angehalten und der Verbindungstest wird automatisch durchgeführt. Kann der Fehler behoben werden, wird das Program fortgesetzt, ansonsten wird das Program ordnungsgemäss beendet, um unvorhersehbares Verhalten vorzubeugen. 7.5.5 KAMERAGRUNDKLASSE Mit der Kameragrundklasse kann man theoretisch mit fast jeder Kamera eine Verbindung aufbauen, die sich über den Universal Serial Bus (USB) an den Computer anschliessen lässt. 15 Diese Klasse ruft Programbibliotheken 16 des Betriebssystems17 auf und steuert mit diesen die Kamera. Mit ihr lassen sich Standbilder erfassen. Dazu wird das aktuelle Kamerabild in die Zwischenablage kopiert und danach in das Program importiert. Um diese Klasse zu schreiben, musste ich Programmiercode vom Internet kopieren 18 und abändern, da ich nicht wusste, wie man eine Kamera ansteuert und ich im Microsoft Developer Network19 keine Hilfe fand, die ich verwenden konnte. 15 Digital Video (DV) Kameras funktionieren nicht, da diese wegen des DV-Standards ein anderes Verfahren benötigen. 16 Siehe 9 Glossar, Programmieren 17 Es wurde Windows XP verwendet 18 Quelle: http://vb-helper.com/howto_net_video_capture.html , (Tucker, 2007) 19 Das Microsoft Developer Network kurz MSDN ist ein Netzwerk für Microsoft-Entwickler. In erster Linie ist es eine umfassende Bibliothek, worin alle Microsoft Technologien erklärt sind. Darin findet man zum Beispiel, wie man die Programbibliotheken des Betriebssystems ansteuert, genaue Deklarationen der Klassen und Funktionen aller Programmiersprachen, die MSDN unterstützt. Neben der Bibliothek gibt es eine grosse „Community“ mit Formen, wo fragen gestellt werden können. Weiter werden Ausbildungskurse und Prüfungen für Programmierzertifikate angeboten. Seite 24 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Abbildung 7.6: Meldung des „Standard Verbindungstests“: „Der RCX antwortet nicht!“ MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.5.6 DIAGNOSEFENSTER Die RCX-Grundklasse und die Kameragrundklasse, sowie die Robotergrundklasse arbeiten nur im Hintergrund. Es ist aber von Vorteil, wenn man sich als Benutzer und Entwickler zur Diagnose über den Status dieser Klassen informieren und sie bei Bedarf manuell ansteuern kann. Dazu habe ich drei Diagnosefenster geschrieben. Eines für die RCX-Grundklasse, eines für die Kameragrundklasse und eines für die Robotergrundklasse. Abbildung 7.7: „RCXDiag“ Diagnosefenster der RCX-Grundklasse Seite 25 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. RCX-G RUNDKLASSE Im Diagnosefenster der RCX-Grundklasse (Siehe Abbildung 7.7) ist der aktuelle Status aller Motoren ersichtlich und kann angepasst werden. Weiter können alle internen Variablen des RCX ausgelesen und abgeändert werden. Zur weiteren Diagnose kann die Ladung der Batterien ermittelt oder der Standard Verbindungstest ausgeführt werden. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ Abbildung 7.8: „RoboterDiag“ Diagnosefenster der Robotergrundklasse K AMERAGRUNDKLASSE Das Diagnosefenster der Kameragrundklasse (Siehe Abbildung 7.9) zeigt in erster Linie das aktuelle Kamerabild an. Ist dieses Diagnosefenster nicht geöffnet oder vollständig durch ein anderes Fenster abgedeckt, kann kein aktuelles Kamerastandbild erfasst werden. Dies kommt von der Art und Weise wie die Kamera angesteuert wird. Die Gründe dafür werden in dieser Arbeit nicht erläutert. Neben dem Kamerabild, werden noch eine Handvoll technische Daten der ausgewählten Kamera angezeigt. Abbildung 7.9: „CamDiag“ Diagnosefenster der Kamera Seite 26 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. R OBOTERGRUNDKLASSE Mit dem Diagnosefenster der Robotergrundklasse (Siehe Abbildung 7.8) kann man die direkte Steuerung des Roboters via Computer ein- und ausschalten und Vektorbewegungsbefehle erteilen. Zudem können die Eigenschaften des Roboters eingesehen und verändert werden. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.6 PROGRAMMIERUNG DER NEURONALE NETZE Dieses Kapitel ist der Umsetzung und Programmierung der Neuronalen Netzen gewidmet. Im Unterkapitel 7.6.1 Aufbau erkläre ich, wie ich die Neuronalen Netze umgesetzt habe. Ein Codeausschnitt des Lernalgorithmus findet man unter 7.6.2. Der gesamte Programmiercode kann im Anhang unter 11.1 Medienverzeichnis eingesehen werden. Im zweiten Unterkapitel 7.6.3 werden Probleme und Verbesserungsmöglichkeiten erläutert. Die Theorie dazu kann unter 5.3 Neuronale Netze nachgesehen werden. 7.6.1 AUFBAU Auch bei der Umsetzung des Neuronalen Netzes lautete mein Motto Erweiterbarkeit. Ich entschied mich eine Klasse zu schrieben, die die Verwaltung für jedes Neuronale Netz übernimmt: NetWork. Normalerweise werden Neuronale Netze mit Arrays implementiert. Ich entschied mich aber für eine objektorientierte Lösung. Diese Lösung ist zwar langsamer im Berechnen, jedoch ist es einfacher allgemeine Routinen zu schreiben, so dass man beim Verändern der Netze immer nur sehr wenig Programmcode umschreiben muss. N EURON & A XON Aus diesen beiden Klassen kann NetWork Neuronale Netze zusammensetzten. Von der Neuron-Klasse gibt es noch zwei Erweiterungen: Die Input- und Outputneuron-Klasse. Diese werden bei der Eingabe- bzw. der Ausgabeschicht verwendet. S AMPLE M ANAGEMENT , S AMPES S ET & S AMPLES Mit diesen drei Klassen werden die Samples verwaltet. SampleManagement liefert Funktionen um SamplesSets (Ein Datensatz von Samples) zu speichern oder zu laden. Weiter können mit ihr Trainings- und Validierungssets aus SamplesSets zusammengestellt werden. Seite 27 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. N ET W ORK Dies ist die Grundklasse für jedes Neuronale Netz. Mit ihr lassen sich viele verschiedene Netze verwalten. Sie kann Netze trainieren, speichern und laden. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ Abbildung 7.10: „NetWork Dialog“ Diagnosefenster für NetWork Seite 28 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. D IAGNOSEFENSTER Wie schon für die Hardware-Grundklassen, habe ich auch für die Verwaltung der Neuronalen Netze ein Diagnosefenster geschrieben (Siehe Abbildung 7.10). Mit diesem Diagnosefenster können die meisten der oben genannten Funktionen ausgeführt werden. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.6.2 LERNALGORITHMUS 3: CODEAUSSCHNITT Der in Programmcode 7.2 abgebildete Code zeigt einer der verwendeten Lernalgorithmen. Die Darstellung soll zeigen, wie so ein umgesetzter „Lernalgorithmus“ überhaupt aussieht. void PropagationALGO3() { //Rekursives Lernen „vorwärts“: // Der "Lernagent" wandert mittels "Tiefensuche" // durch das unbekannte neuronale Netz und "verbessert" es. // Mit allen Samples durchführen: for (int samp = 0; samp < AnzSamples; samp++) { NewCalc(); //Neuberechnung intern NewLearn(); //Lernen aktualisieren //Inputwerte dem Netz übergeben: for (int i = 0; i < NI; i++) { InputNeurons[i].InputValue = Samples[samp].Inputs[i]; } //Delta-Term der Ausgabeschicht setzten OutputNeurons[i].SetError((y[i, samp] - Samples[samp].Outputs[i])); } //Rekursive Verbesserung starten foreach (InputNeuron NI in InputNeurons) { rekursivImprove3(NI); } } } void rekursivImprove3(Neuron N) { //Rekursive Verbesserung nach Dossier foreach (Axon A in N.OutputAxons) { if (A.OutputNeuron.LID != IID) { if (A.OutputNeuron.GetType() != typeof(OutputNeuron)) { rekursivImprove3(A.OutputNeuron); } foreach (Axon ABack in A.OutputNeuron.InputAxons) { ABack.Factor -= mu * ABack.InputNeuron.ActualValue * ABack.OutputNeuron.ActualdT; } A.OutputNeuron.Bias -= mu * 1 * A.OutputNeuron.ActualdT; A.OutputNeuron.LID = IID; } } } Programmcode 7.2: Codeausschnitt des Lernalgorithmus Nr. 1: „Rekursives Lernen Vorwärts“. Der Lernalgorithmus 3 war der schnellste von denen, die ich implementierte. Seite 29 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. //Outputwerte auslesen, Delta-Term berechnen // und Korrektur [rekursivImprove3()] starten. for (int i = 0; i < NO; i++) { y[i, samp] = OutputNeurons[i].ActualValue; MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.6.3 PROBLEME UND VERBESSERUNGSMÖGLICHKEITEN Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Das Schreiben der NetWork-Grundklasse war schwierig, da ich alle Algorithmen und Formeln aus dem Quellcode von zwei Übungsprogrammen für Neuronale Netze ableitete, die ich von Herrn Kretzschmar erhalten habe. Bei den Übungsprogrammen wird das Netz mit Arrays implementiert und ich wollte eine objektorientierte Lösung schreiben. Zudem musste ich den Lernalgorithmus so umbauen, dass er jedes Netz lernen kann, das sich mit der NetWork Klasse aufbauen lässt. Dabei unterlief mir beim Schreiben der Gewichtungskorrektur ein kleiner Fehler mit der Aktivierungsfunktion: Ich verwendete im Lernalgorithmus ′ [𝑓 ′ 𝑓𝐴𝑘𝑡 𝐴𝑘𝑡 (𝑥)] anstatt𝑓𝐴𝑘𝑡 (𝑥). Auf Neuronen mit der linearen Aktivierungsfunktion hatte ′ (𝑥) = 1. Die Ableitung der Sigmoid-Funktion hängt dieser Fehler keinen Einfluss, da𝑓𝑙𝑖𝑛𝑒𝑎𝑟 allerdings von 𝑥 ab. Dies hat zu einem fehlerhaften Lernverhalten geführt. Da ich nur selten und wenige Neuronen mit dieser Aktivierungsfunktion verwendete, lernten die Netze trotzdem. Herr Kretzschmar erkannte anhand der Fehlerentwicklungskurve, dass sich ein Fehler in den Lernalgorithmus eingeschlichen haben musste. Ich fand den Fehler schliesslich und konnte ihn beheben. Seite 30 MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.7 BAU DES ROBOTERS TRUCK Endlich konnte ich beginnen, meinen eigenen Roboter zu bauen und zu entwickeln! In diesem Kapitel werde ich zuerst unter 7.7.1 Baukriterien erläutern, worauf ich beim Bau des Roboters Truck geachtet habe. Unter 7.7.2 Endzustand des Roboters werde ich den Aufbau und die Funktionsweise des fertigen Roboters erklären. In 7.7.3 Schwachstellen und Verbesserungsmöglichkeiten werde ich auf technische Probleme der Konstruktion hinweisen und Lösungsansätze diskutieren. Den Roboter, den ich für meine weitere Arbeit bauen will, soll klein und kompakt sein, so dass die Welt, in der er sich zurechtfinden muss, nicht zu gross wird. Es soll ein Fahrzeug sein, welches von der Art her einem normalen Auto gleicht: vorne eine Achse mit einer Lenkung und hinten die Antriebsachse. Die gesamte Mechanik und die Motoren sollen im unteren Bereich des Fahrzeugs eingebaut werden, damit bei bedarf etwas auf den Roboter aufgebaut werden kann. Es soll ebenfalls möglich sein, ihn in ein Zugfahrzeug umzubauen. Zusätzlich muss er stabil und robust sein, um allfällige Zusammenstösse mit Wänden und anderen Objekten ohne Beschädigungen zu überstehen. Ferner muss er mit einer Kamera ausgerüstet sein, die dem Roboter als Auge dient. Deshalb ist auch ein bodennaher Schwerpunkt wichtig um ein ruhiges Fahrverhalten zu gewährleisten. Dies ist für schüttelfreie Kameraaufnahmen unabdingbar. Der Grundkonstruktion des Roboters soll wie die Software ausbaubar sein. 7.7.2 ENDZUSTAND DES ROBOTERS Ich versuchte den Roboter nach den unter 7.7.1 genannten Baukriterien zu konstruieren. Der Roboter wurde während der gesamten Projektphase mehrmals umgebaut. Ich werde an dieser Stelle nur den Endzustand beschreiben und allenfalls auf technische Probleme der Konstruktion hinweisen. Die wichtigsten Umbauten werden aber später in der Dokumentation erklärt und begründet. Seite 31 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. 7.7.1 BAUKRITERIEN MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ Abbildung 7.11: Truck 20 Als Grundkonstruktion verstehe ich Untergestell, Fahrwerk, Antrieb und Lenkung. Nicht dazu zähle ich die Anbauten für Kamera und RCX sowie die Karosserie. Seite 32 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. G RUNDAUFBAU - Ü BERSICHT Der Roboter ist ein vierrädriges Fahrzeug (Siehe Abbildung 7.11 bis Abbildung 7.15). Der Aufbau ist identisch mit dem eines PKWs. Die vordere Achse ist mit einer Lenkung versehen und die hindere dient zum Antreiben des Fahrzeuges. Der RCX, das Gehirn des Roboters, ist am Heck des Fahrzeuges befestigt. Die Kamera wird von einer stabilen Konstruktion über dem Roboter gehalten. Die Grundkonstruktion20 ist so ausgelegt, dass der Roboter auch in ein Zugfahrzeug umgebaut werden kann. Deshalb der Name Truck. Abbildung 7.12: Truck vorne Abbildung 7.13: Truck seitlich Abbildung 7.14: Truck oben Abbildung 7.15: Truck unten Seite 33 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ Abbildung 7.16: Untergestell F AHRWERK Das Fahrwerk des Roboters ist einfach aufgebaut. Die Radaufhängungen aller vier Räder sind nicht gefedert. Eine gefederte Radaufhängung hätte zu viel Platz benötigt. Die vordere Aufhängung lässt eine Lenkung zu. Dazu sind beide Vorderräder an jeweils einem zur Bodenebene drehbaren Bauteil befestigt (Siehe Abb. 7.17). Diese beiden Bauteile sind mit einer Stange verbunden. Über diese Stange lässt sich der Einlenkwinkel verändern. (Siehe Abbildung 7.18) Die hinteren Räder sind direkt am Untergestell befestigt. Die Aufhängung ist Abb. 7.17: Detail vordere dort lediglich eine starre Erweiterung des Untergestells, die für weitere Stabilität sorgt. Die hintere Achse liegt deshalb so weit hinten, damit die Umwandlung in ein Zugfahrzeug Aufhängung möglich ist, ohne die Grundkonstruktion zu verändern. Abbildung 7.18: Vordere Aufhängung Abbildung 7.19: Hintere Aufhängung Das Fahrwerk ist die grösste Schwachstelle der tragenden Konstruktion. Dazu mehr unter 7.7.3 Schwachstellen und Verbesserungsmöglichkeiten. Seite 34 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. U NTERGESTELL Das Untergestell des Roboters (Siehe Abbildung 7.16) besteht aus einer stark ineinander verstöpselten Konstruktion aus langen Trägern. Diese Konstruktion wird mit quer eingebauten Latten verstärkt. Für den vertikalen Zusammenhalt sorgen schräg angebaute Streben, die sich mit ihrer gelben Farbe in die Karosserie integrieren. Alle tragenden oder mechanischen Elemente wie das Kamera- und RCX-Gestell, das Fahrwerk oder die Getriebe und Motoren sind direkt mit dem Untergestell verbunden. Dies sorgt für die nötige Stabilität. Der Roboter kann deshalb auch ohne Bedenken am Kameragestell angehoben werden. Gröberen Umgang sollte er ohne Beschädigung überleben. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ Abb. 7.20: Differentialgetriebe der Hinterachse Abbildung 7.21: Antriebsübersetzung Abbildung 7.22: Antriebsübersetzung mit Kettenspanner Seite 35 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. A NTRIEB Als Antrieb bezeichne ich alle Elemente vom Motor über die Getriebe bis zu den Rädern. Der Motor, der für den Antrieb verantwortlich ist, befindet sich ganz unten, unmittelbar vor der Hinterachse. Die Antriebskraft wird über vier Getriebe (zwei Stirnrad-, ein Kronrad- und ein Kettengetriebe) um den Motor herum auf das Differentialgetriebe geleitet, welches auf der Antriebsachse sitzt (Siehe Abb. 7.20, Abbildung 7.21 und Abbildung 7.22). Diese komplexe Konstruktion ist notwendig um die gewünschte Übersetzung von 16:1 zu erreichen. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ Abbildung 7.24: Lenkungssystem Abbildung 7.25: Lenkungssensoren im Detail Seite 36 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Abb. 7.23: Rad zur manuellen Lenkung L ENKUNG Die Lenkungsmechanik ist wesentlich einfacher aufgebaut als die des Antriebs. Allerdings benötigt die Lenkung zwei Sensoren um eine dauerhaft exakte Steuerung zu gewährleisten: Einen Drehsensor, der die Einlenkung misst, und einen Berührungssensor, der die Geradeausstellung erkennt (Siehe Abbildung 7.25). Dazu mehr unter: Steuerungselektronik & RCX-Programme. Der Lenkungsmotor befindet sich hinter der Vorderachse im oberen Teil des Fahrzeuges (Siehe Abbildung 7.24). Die Lenkungskraft wird vom Motor auf ein spezielles Stirnrad übertragen (weisses Stirnrad in Abbildung 7.24), welches ein Drehmoment von maximal zwei bis fünf Newtonzentimeter zulässt. Wird mehr Kraft übertragen dreht sich dieses Zahnrad im Leerlauf. Dadurch wird sichergestellt, dass bei einer Übersteuerung, die Verbindung zwischen Motor und Mechanik unterbrochen wird. Anderenfalls könnte die Mechanik beschädigt werden. Anschliessend wird die Rotation mit einem Zahnstangengetriebe in eine lineare Bewegung umgewandelt und auf die Aufhängung übertragen. Das kleine Rad rechts (Siehe Abb. 7.23), das ebenfalls an die Lenkungsmechanik angeschlossen ist, dient der manuellen Steuerung des Roboters. Dies ist später für das Lernen des Fahrens wichtig. S TEUERUNGSELEKTRONIK & RCX-P ROGRAMME (L ENKUNGSANSTEUERUNG ) Der RCX, das Gehirn des Roboters, ist mit einem Gestell am Heck des Roboters befestigt. Der RCX ist das teuerste und zerbrechlichste Bauteil des Roboters. Deshalb kann man ihn, wie die Kamera, zum Transport ohne grossen Aufwand vom Roboter entfernen. Der RCX steuert die beiden Motoren an und kann die beiden Sensorwerte auslesen (Siehe Abbildung 7.26). Für den Antriebsmotor kriegt er vom Computer direkte Befehle wie Einschalten oder Ausschalten. Die Ansteuerung des Lenkungsmotors muss aber äusserst exakt sein, damit die Einlenkung auch stimmt. Dazu ist eine direkte Steuerung vom Computer via Infrarot einfach zu langsam und zu ungenau. Der RCX ist geradezu prädestiniert diese Aufgabe mit einer Regelungstechnik zu übernehmen. Dazu führt der RCX ein Programm aus, das dauernd via Drehsensor die Einlenkung misst und mit einem Soll-Wert im Speicher vergleicht. Stimmt der gemessene Wert nicht mit dem Soll-Wert überein, wird die notwendige Korrektur via Lenkungsmotor vorgenommen, bis der gemessene Wert wieder dem Soll-Wert entspricht. Der Computer ändert zum Steuern der Lenkung lediglich den Soll-Wert im Speicher des RCX. Da die Genauigkeit des Drehsensors lediglich 15° beträgt, liefert er nach ein paar hin und her Lenkungen ungenaue Werte. Hier kommt der Berührungssensor ins Spiel, der die Geradeausstellung erkennt. Ein weiteres Programm überwacht diesen Sensor. Wird er aktiviert, wird der Drehsensor wieder geeicht. Das Zusammenspiel dieser beiden Programme sorgt für eine gleichbleibende Genauigkeit der Lenkungsansteuerung. Selbst eine Veränderung von Aussen, sprich das manuelle Lenken, bringt dieses System nicht durcheinander. Computer Zeichenerklärung Steuerungsbe fehl Sensorwert vergleicht RCX-Ebene RCX Program Sollwert Tab. 7.5: Zeichenerklärung Roboter Hardware Antriebsm otor Lenkungsm otor Regler Drehsensor Eichung Geradestellun g Abbildung 7.26: Ablauf der Trucksteuerung. Das Programm steuert den Antriebsmotor direkt über den RCX. Die Lenkung wird indirekt über eine Regelungstechnik angesteuert. (Die Zeichen werden unter Tab. 7.5 erklärt) Seite 37 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ K AMERA Die Kamera ist das Auge des Roboters und ist die einzige Inputquelle, die der Computer zum Steuern des RCX verwendet. Sie ist an einem Gestell befestigt, das direkt mit dem Untergestell verbunden ist (Siehe Abb. 7.27). Sie erfasst den Boden vor dem Fahrzeug. Die Ausrichtung der Kamera habe ich oft verändert. Die momentane Stellung hat sich als die beste Lösung erwiesen. Abb. 7.28: Karosserie. Front- (oben) und Seitenelemente (unten) Abbildung 7.29: Karosserie Seite 38 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Abb. 7.27: Kameraposition K AROSSERIE Die Karosserie dient im Moment nur als Dekoration. Der Roboter sollte ja auch optisch was hermachen. Die abgeschrägten Bauteile an der Front und zwischen den Rädern (Siehe Abb. 7.28 und Abbildung 7.29) würden die Einfahrt in eine Andockstation erleichtern. Dieses Manöver habe ich aus Zeitmangel nicht umgesetzt. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.7.3 SCHWACHSTELLEN & VERBESSERUNGSMÖGLICHKEITEN Dieser Roboter hat ein paar Schwachstellen in der Konstruktion. Ich werde die wichtigsten in diesem Unterkapitel erklären und Verbesserungsmöglichkeiten vorschlagen: Abb. 7.30: Aufhängung mit LEGO Das Hauptproblem sind die beiden Aufhängungen. Da die Hinterachse wegen des Differentialgetriebes in der Mitte zweigeteilt ist, gibt es dort keine durchgehende Verbindung, was die Festigkeit beeinträchtigt (Siehe Abb. 7.20). Drückt man nun mit voller Kraft auf den hinteren Teil des Roboters, kann die Radaufhängung auf beiden Seiten ausbrechen (Siehe Abbildung 7.31). Man könnte dies durch eine Stützkonstruktion verhindern. Dazu müsste man allerdings ein Teil des Untergestells und der darin eingebauten Getriebe umbauen. Der Aufwand dafür erschien mir zu gross, da sich der Schaden binnen Sekunden beheben lässt. Die vordere Aufhängung (Siehe Abbildung 7.18) hat auch seine Tücken. Nach langem Fahren beginnen die Vorderräder langsam von den Achsen zu rutschen. Dies ist ein grundsätzliches Problem, wenn man eine Lenkung mit LEGO auf diese Weise realisiert (Siehe Abb. 7.30). Es gibt keine Konstruktion, die das verhindert. Die einzige Möglichkeit ist die Achsen mit den Rädern zu verkleben. Dazu sind mir die LEGO-Steine aber zu schade. a) b) Abbildung 7.31: Problem mit dem Ausbrechen der hintern Aufhängung. a) intakte Aufhängung, b) Ausgebrochene Aufhängung (Schaden orange umkreist) Seite 39 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ Die Auflösung der Lenkungsansteuerung kann ebenfalls verbessert werden. Es gibt im Moment nur 11 Zustände, die der RCX unterscheiden kann. Man könnte die Lenkungsübersetzung wie in Abbildung 7.32 verändern, so dass es wesentlich mehr Zustände gibt. Dadurch kann der Roboter aber nicht mehr so schnell Lenken, was bei grösseren Fahrgeschwindigkeiten zu Reaktionsproblemen führt. Zudem würde der Sensor, der die Geradeausstellung registriert, auch in den extremen Stellen gedrückt werden, was eine eindeutige Eichung des Drehsensors schwierig macht. Eine Möglichkeit wäre die Sensoren an einer Achse anzuschliessen, die über eine Übersetzung mit der Lenkungsmechanik verbunden ist. Dafür wären aber weitere Getriebe nötig. Getriebe aus LEGO haben ein grosses Zahnspiel, deshalb erhöht jedes Getriebe, das zwischen der Messgrösse und dem Sensor liegt, die Ungenauigkeit. Das verschlechtert die Lenkungsansteuerung. Abbildung 7.32: Alternative Lenkungsübersetzung. Vgl. Abbildung 7.25 Das Problem mit dem Zahnspiel besteht auch beim Antrieb. Je langsamer der Roboter fährt, desto exakter kann er gelenkt werden. Aus diesem Grund wird die Antriebskraft auf ihrem Weg vom Motor zu den Rädern mit drei Getrieben Übersetzt, so dass die Achse 16-mal langsamer dreht. Der RCX könnte den Motor langsamer antreiben. Elektromotoren haben aber in ganz niedrigen Drehzahlen einen Verlust des Drehmoments. Um enge Kurven genau zu erwischen, muss der Roboter sehr langsam fahren. Bei einer weniger starken Übersetzung reicht das Drehmoment des Motors nicht mehr aus, um den Roboter bei einer so langsamen Geschwindigkeit vorwärts zu bewegen. Bei einer so starken dreifachen Übersetzung sinkt allerdings auch die Maximalgeschwindigkeit, die auf geraden Strecken ausgenützt werden könnte. Zudem entsteht, wie schon angesprochen, ein grosses Zahnspiel. So kann die gesamte Antriebsmechanik in eine Art Schwingung versetzt werden, was zu einem ruckartigen Vorwärtsbewegen des Roboters führen kann. Eine Schwachstelle ist auch das verwendete Kettengetriebe. Die Kette kann bei Überbelastung reissen. Die meisten Umbauten des Roboters haben deshalb auch die Antriebsübersetzung betroffen. Sie umzubauen ist sehr zeitintensiv, da der Roboter fast komplett zerlegt werden muss. Die Stabilität der Karosserie und der RCX-Halterung könnte auch verbessert werden. Weitere horizontal angebrachte Streben könnten den Zusammenhalt in der Höhe weiter festigen. Seite 40 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.8 LERNEN DES FOLGEN EINER LINIE In diesem Kapitel lernt der Roboter einer schwarzen Linie zu folgen. Bei einem Betreuungstreffen empfahl mir Herr Kretzschmar, die Robotersteuerung zum Folgen einer schwarzen Linie, welche ich schon bei den Vorarbeiten realisiert hatte, weiterzuentwickeln und mit Neuronalen Netzen auszubauen, da sie ein wichtiges Gebiet der Künstlichen Intelligenz sind. Abbildung 7.33: Schematische Darstellung des Versuchsaufbaus 7.8.1 ERSTER VERSUCH Das Ziel des ersten Versuchs war, dass der Roboter ein Lernverhalten aufweist. Ein exaktes Folgen der Linie war noch unwichtig. Der Roboter sollte zumindest eine Reaktion zeigen, wenn er über die schwarze Linie bewegt wird. Unter Vorgehen und Methode wird das verwendete Material und der Aufbau des Versuchs beschrieben. Danach werden die Durchführung und die Resultate erklärt und im Anschluss das Besprechen mit Herr Kretzschmar zusammengefasst. V ORGEHEN UND M ETHODE Das folgende Vorgehen ist aus einem Entwicklungsprozess entstanden. Der hier erklärte Programmablauf ist bis zum Schluss fast derselbe geblieben. Als Grundlage für diesen Versuch diente die Übung mit dem Folgen einer schwarzen Linie, die ich bei den Vorarbeiten gemacht hatte. Abb. 7.34: Roverbot R OBOTER Als Roboter setzte ich wiederum den Roverbot (Siehe Abb. 7.34) ein, da der Truck zu diesem Zeitpunkt noch nicht fertiggestellt war. Der Roverbot musste ich noch leicht verändern: Ich entfernte den Lichtsensor, der nicht mehr benötigt wurde, und baute ihm dafür die LEGOKamera als neue Inputquelle an. Zur Erinnerung: Der Roverbot hat auf beiden Seiten je ein Motor um seine Ketten anzutreiben. Diese beiden Motoren können verschiedene Zustände annehmen. Sie können vorwärts und rückwärts drehen, sowie still stehen oder blockieren. Der Roboter hat also zwei Elemente, die verschieden Zustände annehmen können. Seite 41 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Ich wollte die neuronale Netze kennen lernen und somit in das Gebiet des Lernens eintauchen. Zudem benötigte ich eine Methode, die den Roboter einer Strasse folgen lässt. Dazu war ein Neuronales Netz ideal. Ich führte verschiedene Versuche durch und wollte so das Fahrverhalten immer weiter verbessern. Der Aufbau der Versuche ist immer derselbe (Siehe Abbildung 7.33): Der Roboter fährt in einer Testlandschaft und filmt seine Umgebung mit einer Kamera. Das Bild wird auf dem Computer ausgewertet. Danach werden Steuerbefehle via Infrarot an den RCX des Roboters übermittelt. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ T ESTSTRECKE Zusätzlich brauchte ich eine Teststrecke, um den Roverbot zu trainieren und danach zu testen. Diese bastele ich aus schwarzen Papierstreifen, die ich zu einer kurvigen Strecke zusammenklebte (Siehe Abb. 7.35). Danach legte ich sie auf den hellen Fussboden. So hatte der Roverbot genügend Platz um zu manövrieren. Nun werde ich Schritt für Schritt den Programmablauf erklären. Die Abbildung 7.36 soll dabei helfen: Programmablauf - Übersicht Beim Programmablauf muss man zwischen zwei Fällen unterscheiden: Dem Trainingsmodus und dem Anwendungsmodus. Beim Trainingsmodus steuere ich den Roboter via Computer manuell. Dabei wird das Kamerabild fortlaufend analysiert. Die errechneten Helligkeitswerte werden zusammen mit den momentanen Motorenzuständen des Roboters in einer Datenbank gespeichert. Danach wird das Neuronale Netz mit diesen Daten trainiert. Im Anwendungsmodus wird das Kamerabild ebenfalls fortlaufend analysiert und die Helligkeitswerte errechnet. Diese werden aber dann direkt an das Neuronale Netz weitergeleitet. Das Netz verarbeitet die Werte und gibt die gewünschten Motorenzustände zurück, welche anschliessend an den RCX übermittelt werden. Der Roboter sollte nun das Gelernte anwenden und der schwarzen Linie folgen. Sowohl im Trainingsmodus als auch im Anwendungsmodus läuft das Programm in einer Schlaufe bis genügend Trainingsmaterial gesammelt wurde bzw. der Benutzer den automatischen Steuerungsvorgang abbricht. Nun werde ich die einzelnen Elemente im Detail erklären: In beiden Fällen wird zuerst eine Bildverarbeitung vorgenommen. Seite 42 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Abb. 7.35: Teststrecke S OFTWARE Nun musste ich ein Programm schreiben, das die Bilddaten analysiert, die von der LEGOKamera aufgezeichnet werden, ein Verhaltensmuster erkennt, lernt und danach anwenden kann, um den Roverbot zu steuern. Dazu werden die Helligkeitswerte an bestimmten Punkten im Kamerabild erfasst und an ein Neuronales Netz weitergeleitet, welches danach die richtigen Steuersignale für den Roverbot errechnet. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ Trainingsmodus Roboter Sammeln der Trainingsdaten Manuelle Steuerung: Ich steuere den Roboter der Linie entlang Anwendungsmodus Anwendung Roboter Motor R Bildverarbeitung: Analyse des Kamerabildes Motor L Helligkeitswerte Bildverarbeitung: Analyse des Kamerabildes Kamerab ild Neuronales Netz Berechnet Motorenzustände aus Helligkeitswerten Motorenz ustände Helligkeitswerte Motorenzustände Zeichenerklärung Programroutine Objekt Grösse Programschlaufe Datenfluss Befehl Datenbank Speicherung der Samples Training: Das Neuronale Netz wird mit den Samples trainiert Tab. 7.6: Zeichenerklärung Abbildung 7.36: Programmablauf mit den beiden Modi Abb. 7.37: Position der Erfassungssektoren Abb. 7.38: Visualisierung der Inputwerte Bildverarbeitung Zuerst wird das Bild via Kameragrundklasse erfasst. Danach werden die Helligkeitswerte in zehn Sektoren ermittelt. Die zehn Sektoren sind nebeneinander in einer waagrechten Linie, leicht unter der Bildmitte angeordnet (Siehe Abb. 7.37). Die Bereiche rechts und links am Bildrand werden nicht erfasst, da die Ausleuchtung der Kamera dort schlecht ist. In einem Sektor werden immer Durchschnittswerte von verschiedenen Pixeln verwendet um den Helligkeitswert zu errechnen. Ein Bildpixel könnte fehlerhaft sein. Zudem wird so der Einfluss des Bildrauschens reduziert. Zum Schluss werden die zehn Helligkeitswerte auf 0.0 – 1.0 skaliert. Damit ist die Vorverarbeitung des Kamerabildes abgeschlossen (Siehe Abb. 7.38). Die zehn Werte können nun entweder zum Trainieren gespeichert oder zum Anwenden an die zehn Inputneuronen weitergeleitet werden. Seite 43 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Sample MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ Sammeln von Samples und Trainieren des Netzes Im Trainingsmodus steuere ich den Roverbot über die Robotergrundklasse manuell. Dabei werden die Trainingssamples gesammelt. Dem Computer sind die aktuellen Motorenzustände stets bekannt, da alle Befehle an den Roboter über die RCX-Grundklasse abgewickelt werden. So können im Trainingsmodus die Bilddaten direkt mit den aktuellen Motorenzuständen ergänzt und zusammen abgespeichert werden. So wird eine Datenbank mit Samples angelegt, worin gespeichert ist, zu welchen Helligkeitswerten welche Motorenzustände gewünscht sind. Anwendungsmodus Wurde das Netz einmal trainiert, kann der Anwendungsmodus gestartet werden. Dazu wird wieder zuerst eine Bildverarbeitung vorgenommen. Die zehn errechneten Werte werden an das Netz weitergeleitet und verarbeitet. Die Werte der Outputneuronen werden danach der RCX-Grundklasse übergeben, welche dann bei Bedarf dem Roboter einen Steuerungsbefehl erteilt. Z UM P ROGRAMMIEREN Zu diesem Zeitpunkt existierten erst die Hardware-Grundklassen, die NetWork-Klasse schrieb ich später. Das hier verwendete Neuronale Netz, war das erste, das ich implementierte. Dazu kopierte und ergänzte ich Code-Fragmente aus einem Übungsprogram für Neuronale Netze, das ich von meinem Betreuer erhalten hatte. Diese Implementierung ist mit Arrays gelöst. D URCHFÜHRUNG Nun führte ich den ersten Versuch durch. Das folgende Verfahren war das erfolgreichste, das ich ausprobiert hatte. Zuerst fuhr ich mit dem Roboter im Trainingsmodus die Strecke ab und sammelte so Daten. Ich versuchte mit meinen Roboter möglichst sauber auf der Linie zu fahren. Danach trainierte und testete ich das Netz. Mein Neuronales Netze hatte zehn Inputneuronen und zwei Outputneuronen, dies war von der Bildverarbeitung und des Roboters vorgegeben. Ich verwendete ausschliesslich die lineare Aktivierungsfunktion für meine Neuronen. Auf versteckte Neuronen verzichtete ich in diesem Versuch. R ESULTATE Zuerst hatte ich einige Fehler in mein Programm eingebaut. Als diese Bereinigt waren, zeigte der Roboter erste Lernerfolge. Geraden Strecken folgte der Roboter im Allgemeinen gut. Was bei einem Kettenfahrzeug nicht selbstverständlich ist, da beide Ketten gleich schnell drehen müssen, damit er geradeaus fährt. Mit leichten Kurven hatte er auch keine Probleme. Schwieriger wurden enge Kurven. Meist blockierte er sich und fuhr nur noch hin und her oder vorwärts und rückwärts. Eine Neupositionierung brachte ihn in der Regel wieder weiter. Seite 44 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Ist das Sammeln der Trainingsdaten abgeschlossen, wird das Netz mit damit trainiert. Dazu werden die Bilddaten jedes gespeicherten Zustandes an die Inputneuronen übergeben. Das Netz berechnet die Werte der Outputneuronen. Diese werden dann mit den gewünschten Motorenzuständen verglichen, die mit den Bilddaten abgespeichert wurden. Je nach Abweichung werden danach die Gewichtungen im Neuronalen Netz angepasst. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ Trainiert habe ich mein Netz mit 30‘000 Iterationen und erreichte damit einen SSE von 2-3 je nach dem wie „schön“ ich der Linie beim Sammeln der Daten nachgefahren war. Mehrere gut funktionierende Netze neigten zu zwischenzeitlichem Rückwärtsfahren, obwohl eine solche Trainingssituation nie existierte. Dies war allerdings eine schlaue Strategie, da dieses zwischenzeitliche Rückwärtsfahren den Roboter oft weiter brachte. B ESPRECHEN MIT H ERR K RETZSCHMAR Ich besprach den ersten Versuch mit Herrn Kretzschmar und er gab mir ein paar Tipps, wie ich das Lernen verbessern konnte. Zuerst sollte ich dem Neuronalen Netz nicht mehr nur die Helligkeitswerte der zehn Sektoren übergeben, sondern ermitteln in welchem Sektor es am dunkelsten ist. Der entsprechende Inputwert sollte ich auf 1.0 setzen, alle anderen auf 0.0. Dadurch wird die Position der schwarzen Linie stärker betont. Weiter diskutierten wir, dass es besser wäre, wenn ich auf zwei oder drei Linien die Helligkeitswerte errechnen würde anstatt nur auf einer. So wird die schwarze Linie besser erfasst. Diese komplexere Inputsituation benötigt versteckte Neuronen. Zudem sollte ich ein paar Trainingsdaten anlegen, wo ich abseits der Linie starte und danach auf die Linie fahre. Auf diese Weise wird das Wiederfinden der schwarzen Linie ebenfalls trainiert. 7.8.2 ZWEITER VERSUCH Die Erkenntnisse aus dem ersten Versuch und die Vorschläge aus dem Treffen mit Herrn Kretzschmar flossen in den zweiten Versuch ein. Ziel dieses Versuches war es, das Fahrverhalten zu optimieren. Abb. 7.39: Neue Erfassungssektoren Abb. 7.40: Visualisierung der Inputwerte mit der angepassten Bildverarbeitung. V ORGEHEN UND M ETHODE Damit ich einfacher Neuronale Netze verändern und verschiedene Trainingsdaten verwenden konnte, schrieb ich zuerst die NetWork Grundklasse und die Samples Verwaltung. Diese wurden im Laufe des Projekts immer weiterentwickelt. Die Bildbearbeitung passte ich so an, dass jetzt in zwanzig Sektoren auf zwei waagerechten Linien, leicht über und unter der Bildmitte, die Helligkeitswerte errechnet wurden (Siehe Abb. 7.39 und Abb. 7.40) Bei den ersten Tests nach diesen Änderungen tauchte ein Problem mit dem Roverbot auf. Die neuen Netze waren besser trainiert und lieferten präzisere Daten zur Ansteuerung der Motoren. Nun wurden die Motoren, vereinfacht gesagt, nicht mehr nur ein- und ausgeschaltet, sondern in all ihren möglichen Geschwindigkeiten angesteuert. Wollte das Neuronale Netze den Roboter eine leichte Kurve fahren lassen, setze es die Antriebsstärke einer Kette nur zurück, anstatt die Kette ganz anzuhalten. Der Bremseffekt, der nur gedrosselten Kette, war zu schwach, den Roverbot in eine Kurvenfahrt zu zwingen. So fuhr der Roverbot geradeaus. Aus diesem Grund stieg ich auf den Roboter Truck um, den ich mittlerweile fertiggestellt hatte (Siehe Abb. 7.41. Der Roboter Truck sah aber zu diesem Zeitpunkt noch anders aus: vgl. Abb. 7.45). Der Truck hat wie der Roverbot zwei Elemente, die verschiedene Zustände annehmen können: Die Lenkung und der Antriebsmotor. Die Lenkung kann Werte von -1.0 für ganz links bis 1.0 für ganz rechts einnehmen. Der Antriebsmotor wird im Anwendungsmodus konstant angetrieben. Beim Lernen habe ich ihn nicht beachtet. Abb. 7.41: Truck im Endzustand Seite 45 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Da das Neuronale Netz ohne versteckte Neuronen auskam und ich nur die lineare Aktivierungsfunktion verwendete, handelte es sich um ein Perzeptron Netzwerk, das lineare Funktionen approximierte. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ D URCHFÜHRUNG Bei der Durchführung des zweiten Versuchs fuhr ich, wie schon zuvor mit dem Roboter der schwarzen Linie entlang und sammelte die Trainingsdaten. Allerdings konnte ich den Truck nicht mehr genügend präzise fernsteuern, da seine Lenkung nicht nur nach rechts, geradeaus und links zeigen sollte. Deshalb entschied ich mich für ein anderes Verfahren: Ich schob den Truck von Hand vorwärts, währendem ich die Lenkung von Hand bewegte. Dafür ist das kleine Rädchen zur manuellen Steuerung der Lenkung (Siehe Abb. 7.23). Die Einlenkung wurde vom Drehsensor gemessen und zusammen mit den Bilddaten abgespeichert. Neben dem exakten Nachfahren sammelte ich neu auch Trainingsdaten beim Wiederfinden der schwarzen Linie. R ESULTATE Wie schon vorher raste der Roboter über enge Kurven hinaus. Geraden Strecken konnte er gut folgen. Ich trainierte die Netze nur noch mit 2000 Iterationen, da ich beim vorderen Versuch festgestellt hatte, dass der grösste Lernfortschritt in den ersten hundert Iterationen stattfand. Die SSE, die ich so erreichte, waren zwischen 0.0002 – 40, je nachdem in welchem Verhältnis die Trainingsdaten von exaktem Folgen und Wiederauffinden der Linie kombiniert waren. 7.8.3 TESTSERIE Abb. 7.42: Teststrecken: gerade (links) und kurvige Strecke (rechts) Nach diesen beiden Versuchen entschied ich mich, eine Testserie durchzuführen, um die Neuronalen Netze besser kennen zu lernen. Ich wollte herausfinden, wie sich die Anzahl versteckte Neuronen und die Art der Trainingsdaten auf das Folgen der Linie auswirken. In meiner Testserie untersuchte ich 4 Netze mit je 3 verschieden Trainingsdatensets. Die 4 Netze hatten jeweils zwanzig Input- und zwei Outputneuron. Versteckten Neuronen hatten sie 2, 4, 8 und 12 in einer Schicht. Die 3 Trainingsdaten waren vom Fahren einer geraden Strecke und einer kurvigen Strecke (Siehe Abb. 7.42) und beides zusammen plus das Wiederauffinden der Linie. Neu verwendete ich auch die Sigmoid-Aktivierungsfunktion für Nicht-Outputneuronen. Da der Lernalgorithmus bei der Sigmoid-Aktivierungsfunktion fehlerhaft war, waren die Testresultate dementsprechend schlecht. Interessanterweise waren die Netze, die nur mit Samples vom Fahren der geraden Strecke trainiert wurden, trotzdem relativ gut; Auch im Fahren von engeren Kurven. Fehlerfrei der Linie folgen konnte aber keines der trainierten Netze. Ich werde in dieser Arbeit nicht weiter auf die Resultate dieser Testserie eingehen. Der genaue Testbericht kann im Anhang gefunden werden. Als ich diese Testserie durchführte, wusste ich noch nicht, dass der Lernalgorithmus fehlerhaft war. Aus diesem Grund analysierte ich die Resultate und suchte nach Gründen für den Fehlschlag. Die danach vorgenommenen Änderungen sind trotzdem wichtig und verbesserten das Verhalten des Roboters. 21 Das Netz hatte eigentlich zwei Outputneuronen. Das zweite war für den Antrieb gedacht. Ich habe es aber nie verwendet. Seite 46 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Das angepasste Netz bestand nun aus zwanzig Inputneuronen, vier versteckten Neuronen und einem Outputneuron21. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ A NALYSE & V ERBESSERUNGEN Ich musste die Gründe für diesen Fehlschlag finden, damit ich Veränderungen vornehmen konnte, die das Folgen der Linie verbesserten. Dazu analysierte ich alle Daten, die ich während den Testserien angelegt hatte und überdachte meinen Versuchsaufbau. Abb. 7.44: Visualisierung der Inputwerte mit der weiter verbesserten Bildverarbeitung Ich veränderte die Bilderfassung so, dass die Helligkeitswerte bis zum Bildrand ermittelt wurden. Weiter führte ich eine Helligkeitsgrenze ein. Die dunkelste Stelle musste diesen Wert unterschreiten damit überhaupt ein Sektor als 1.0 bewertet wurde 22. So stellte ich sicher, dass keine fehlerhaften Daten weitergegeben werden, wenn die schwarze Linie von der Kamera gar nicht mehr erfasst wird. Zudem fügte ich eine dritte Linie hinzu, wo die Helligkeitswerte ermittelt werden, um dem Netz genauere Werte über die Position der Linie zu liefern (Siehe Abb. 7.43 und Abb. 7.44). Zudem war die Kamera damals noch anders am Roboter befestigt. Sie hatte ein instabileres Gestell und schaute nach vorne und leicht nach unten. (Siehe Abb. 7.45) Ihr Neigungswinkel war mit einem Rädchen verstellbar. Leider verstellte er sich dauernd selbst. Dadurch veränderte sich der Kameraausschnitt und somit auch die Inputwerte, die an das Neuronale Netzes weitergeleitet wurden. Ich konstruierte ein stabileres Gestell ohne verstellbaren Neigungswinkel. Die Position und Ausrichtung der Kamera behielt ich vorerst bei. Später in der Projektphase veränderte ich es so, wie es unter 7.7 Bau des Roboters Truck erklärt ist, um die Inputwerte noch weiter zu verbessern. Abb. 7.45: Truck mit altem Kameragestell Weiter dachte ich über eine höhere Steuerungsauflösung nach. Die Probleme damit habe ich bereits unter 7.7 Bau des Roboters Truck diskutiert. Ich hatte noch andere Ideen, wie zum Beispiel das Zurücksetzen beim Verlieren der Linie oder einer variablen Fahrgeschwindigkeit die von der Stärke der Einlenkung abhängt. Beides habe ich umgesetzt, aber erst am Schluss der Projektphase. Dazu mehr unter 7.12 Ergänzende Arbeiten. In einem anderen Test versuchte ich die Bildverarbeitung und den Steuerungsbefehl zeitlich zu versetzen, so dass der Roboter erst dann steuert, wenn er weiter gefahren war und den Punkt erreicht hatte, den die Kamera bei der Bildverarbeitung erfasste hatte. Dies brachte aber keine Verbesserung. Deshalb habe ich es wieder aus meinem Programm entfernt. Nach diesen Änderungen machte ich ein paar Nachtests. Der Roboter konnte der Linie schon deutlich besser folgen, trotz des immer noch fehlerhaften Lernalgorithmus. Ich entschied mich nun von der schwarzen Linie zu lösen und ein paar andere Strassensysteme auszuprobieren. Dazu mehr im nächsten Kapitel. 22 Achtung: Je höher die Helligkeit, desto heller ist etwas. Ich bewerte den finstersten Sektor mit 1.0; also den mit der geringsten Helligkeit. Seite 47 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Abb. 7.43: Neue Erfassungssektoren Beim Analysieren der Trainingssamples, entdeckte ich, dass die Samples vom Fahren der kurvigen Strecke sehr schlecht waren. Dies wirkte sich negativ auf das Lern- und Fahrverhalten aus. Ich dachte mir, dass das der Hauptgrund sei, weshalb nur die Netze ein einigermassen brauchbares Resultat lieferten, die ausschliesslich mit Samples vom Fahren der geraden Strecke trainiert wurden. Den Grund für die schlechten Samples vom Fahren der kurvigen Strecke sah ich bei der Bildverarbeitung. Ich erfasste die äussersten Ränder wegen der schlechten Ausleuchtung nicht. Die Linie befand sich bei engen Kurven aber oft in diesem Bereich und wurde nicht mehr erkannt. Da ich immer den dunkelsten Sektor mit 1.0 bewertete, wurde nun die finsterste Stelle des hellen Untergrundes als Linie erkannt. Wodurch die Samples wertlos wurden. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.9 ANDERE STRASSENSYSTEMEN UND NAVIGIERUNGSTECHNIKEN Eines meiner Teilziele war, ein komplexeres Strassensystem als eine einfach schwarze Linie zu verwenden. Das Strassensystem sollte nicht nur aus einfachen Strassen bestehen, sondern auch aus Abbiegungen. Das ganze System sollte natürlich vom Roboter erkennbar sein. Komplexere Strassensysteme benötigen aber dementsprechende kompliziertere Navigationstechniken. Dies muss bei der Wahl eines Strassensystems auch berücksichtigt werden. Deshalb werde ich zuerst mögliche Strassensysteme diskutieren und danach die Navigationstechniken behandeln. 7.9.1 STRASSENSYSTEME Abb. 7.46: Onlinebild: „einfache Linie“ Abb. 7.47: Komplexere Strassenlandschaft Abb. 7.48: Onlinebild „Strasse mit Mittellinie" Eine einfache Line: (Siehe Abb. 7.46) Dieses Prinzip habe ich bis jetzt angewendet. Die Vorteile sind, dass es einfach und billig zu bauen ist. Die Erfassung der Linie ist ebenfalls einfach. Wenn der Roboter die Linie aber verliert, fährt er von ihr weg und findet sie nicht mehr wieder. Problematisch ist auch das korrekte Erkennen von engen Kurven. Einfache Strasse: (Siehe Abb. 7.47) Eine Strasse hätte den Vorteil, dass der Roboter mehr Toleranz hat und weniger genau fahren muss, um der Strasse zu folgen. Leider benötigt eine Strasse ziemlich viel Papier und ist deshalb relativ teuer. Die grosse Toleranz birgt auch Probleme: Der Roboter kann sich nur an den Rändern der Strasse orientieren. Bei kurvigen Strecken könnte es der Fall sein, dass der Roboter immer nur einen Strassenrand sieht und sich nur an ihm orientieren kann. So würde der Roboter im Zick-Zack Kurs von Strassenrand zu Strassenrand fahren. Das letzte Prinzip fügt die beiden vorher genannten zusammen: Eine Strasse mit einer Mittellinie (Siehe Abb. 7.48). Bei diesem Prinzip könnte sich der Roboter an der Linie präzise orientieren. Verliert er den Sichtkontakt zu der Linie, kann er immer noch mit der Strasse navigieren. Die Erfassung und Verarbeitung eines solchen Strassensystems wird dementsprechend komplex. Die Bauzeit und Materialkosten sind bei diesem Prinzip ebenfalls am Höchsten. 7.9.2 NAVIGATIONSTECHNIKEN Bis jetzt verwendete ich ein Neuronales Netz, das aus Helligkeitswerten die gewünschten Motorenzustände errechnete. Ich überlegte mir mit welchen Verfahren die Navigation sonst noch realisierbar wäre und wie ich die Probleme der oben genannten Strassensysteme umgehen könnte. Die folgenden vier Navigationstechniken schienen mir geeignet: Zuerst das bis jetzt verwendete System: Bestimmte Kamerabildwerte werden an ein neuronales Netz weitergegeben, das Steuerbefehle für den RCX errechnet. Der Vorteil dieser Technik ist die einfache Realisierung. Die Resultate sind auch ziemlich gut, wie ich in den vorangegangenen Versuchen festgestellt habe. Der Schwachpunkt liegt allerdings bei den errechneten Kamerabildwerten, da diese keine konstante Qualität haben. Die Werte variieren sehr stark, je nach dem wie man die Umgebung des Roboters beleuchtet und welches Leuchtmittel man verwendet. Für das zweite System habe ich ein Verfahren ohne Neuronale Netze vorgesehen. Bei diesem Verfahren wird ein Punkt in der Mitte des Strassensystems gesucht und danach ausgerechnet, wo sich dieser relativ zum Roboter befindet. Der Roboter Seite 48 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Zuerst überlegte ich mir, wie ich man eine Strasse aufbauen könnte. Drei Grundprinzipien kamen dafür in Frage: fährt danach via Vektorsteuerung zu diesem Punkt. Das Folgen der Strasse ist bei dieser Technik nicht optimal, da sie nur in Wegpunkten denken kann. Problematisch ist auch das genügend exakte Ansteuern des Roboters, so dass er den Wegpunkt auch trifft. Es ist dasselbe wie bei der Lenkungsansteuerung des Trucks. Man müsste mehrere Programme auf dem RCX ausführen lassen, die die Vektornavigation übernehmen. Die Programme dafür wären relativ komplex und benötigten dementsprechend viel Prozessorleistung des RCX, was wiederum den Batterieverbrauch steigert und somit die Projektkosten erhöht. Diese Technik erweitert das bis jetzt verwendete System und ist für die beiden letzteren Strassensysteme ausgelegt. Die Bildverarbeitung wird so ausgebaut, dass aus der erfassten Stassen (mit oder ohne Linie) eine Kurslinie errechnet wird. Oder anders gesagt, die beiden letzteren Strassensysteme werden in das erste umgewandelt, so dass die Verarbeitung einfach wird, aber die Vorteile einer breiten Strasse nicht verloren gehen. Die Positionswerte der Kurslinie werden dem neuronalen Netz weitergegeben, das dann wieder Steuerungssignale für den RCX berechnet. Die letze Technik ist die mit Abstand komplizierteste, die ich in Betracht gezogen habe. Ich denke sie würde dafür auch die besten Resultate liefern. Ich werde sie nur sehr grob erklären: Der ganze Program wird in verschiedene Schichten unterteilt, die untereinander kommunizieren können. Jede dieser Schichten arbeitet selbständig. Eine Schicht würde dauernd die Strasse im Kamerabild suchen und ihren Verlauf an eine andere Schicht weitergeben, die den gewünschten Pfad für den Roboter errechnet. Eine weitere Schicht würde dann den Pfad in Steuerungssignale für den RCX umwandeln. Die Ausbaumöglichkeiten bei einem solchen System wären unbegrenzt. Stattet man die einzelnen Schichten zusätzlich mit Neuronalen Netzen aus, kann unglaublich viel selbst gelernt werden. Die Umsetzung wäre dementsprechend schwierig und würde vor allem viel Zeit benötigen. 7.9.3 UMSETZUNGSVERSUCHE UND RESULTATE Ich habe alle Strassensysteme umgesetzt und getestet. Bei den Navigationstechniken konnte ich nur die ersten zwei ausprobieren. Für die übrigen reichte mir die Zeit nicht mehr. Die beiden letzteren Strassensysteme bewährten sich überhaupt nicht. Insbesondere nicht zusammen mit Neuronalen Netzen. Das Kamerabild wurde bei den Strassen zu „wild“ und das Netz konnte nicht mehr herausfiltern was relevant ist. Ich versuchte mehr und bessere Inputwerte zu erfassen. Dadurch wurde das Netz nur grösser und der Verbrauch der Rechenleistung stieg, ohne dass der Roboter der Strasse brauchbar folgen konnte. Durch diese Versuche verlor ich viel Zeit, da ich eine zuerst noch eine grössere Testlandschaft mit Strassen basteln musste. Die zweite Navigationstechnik scheiterte wie erwartet bei der Vektoransteuerung. Das Infrarotsignal war zu langsam und der Roboter führ ins Blaue. Ich entschied mich, keine Programme für den RCX zu schreiben und fuhr mit der alten Navigationstechnik und der schwarzen Linie fort. Der Abschlusstermin der Projektphase rückte näher und ich wollte noch Abbiegungen und Strassensignale ausprobieren. Seite 49 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.10 ERKENNEN UND VERARBEITEN VON ABBIEGUNGEN Ein Strassennetz ohne Abbiegung ist nicht sehr realitätsnahe. Aus diesem Grund will ich mein System mit Abbiegungen erweitern: Dazu muss der Roboter zuerst eine Abbiegung erkennen können. Danach muss er fähig sein, abbiegen zu können. Das Herausfinden, welche Abbiegung genommen werden muss, wird hier noch nicht behandelt. Ich beschränke mich auf Abbiegungen, wo drei Pfade in einem Winkel von je ~120 Grad dazwischen zusammenkommen (Siehe Abb. 7.49). Die erste Technik basiert auf einem Neuronalen Netz. Dieses überwacht bestimmte Helligkeitswerte im Kamerabild. Die zweite Technik ist in die Bildverarbeitung eingebettet. Sobald zwei schwarze Linien in genügend grossem Abstand erkannt werden, wird die Abbiegungsverarbeitung gestartet. Die Technik mit einem Neuronalen Netz lieferte keine brauchbaren Resultate. Ich hatte Probleme gute Trainingssamples anzulegen und beim Netz hatte ich Neuronen mit der Sigmoid-Aktivierungsfunktion verwendet. Zu diesem Zeitpunkt hatte ich den Fehler im Lernalgorithmus noch nicht gefunden. Die zweite Technik funktionierte gut und zuverlässig. Deshalb entschied ich mich auch für sie. Seite 50 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Abb. 7.49: Abbiegung Auch hier probierte ich verschiedene Techniken aus, um Abbiegungen zu erkennen. Unabhängig von der verwendeten Erkennungstechnik, folgt der Roboter der Linie und hält nach einer Abbiegung ausschau. Erkennt er eine, stoppt er und ermittelt welche Abbiegung er nehmen soll. Bei diesen Tests gab ich ihm vor, ob er rechts oder links abbiegen soll. Danach biegt der Roboter ab und das Linienverfolgungsprogramm wird wieder ausgeführt, bis er die nächste Abbiegung erkennt. Für die Abbiegungserkennung testete ich zwei Techniken: MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.11 STRASSENSIGNALE Das einzige Element, das jetzt noch fehlt, sind die Strassensignale. Anhand dieser kann der Roboter entscheiden, welche Abbiegung er nehmen soll. Die Verarbeitung der Strassensignale besteht aus zwei Teilen: Zuerst muss das Signal im Kamerabild gefunden werden. Danach erst kann es an die Merkmalsbasierte Erkennung weitergegeben werden, die feststellt um was für ein Signal es sich handelt. Um die Signalsuche und die Erkennung zu vereinfachen, beschloss ich all meine Signale aus rotem Papier anzufertigen. Alle sollten eine Grösse ca. 2.5 x 2.5 cm haben (Siehe Abb. 7.50) 7.11.1 SIGNALSUCHE Bei der Signalsuche geht es darum herauszufinden, ob und wo sich das Signal im Kamerabild befindet. Das Signal wird an seiner roten Farbe erkannt. Dazu wird ein Raster über das Bild gelegt (Gelbe Linien in Abbildung 7.51). An jedem Rasterpunkt (Schnittpunkt zweier Rasterlinien) wird der durchschnittliche Farbwert seiner nahen Umgebung errechnet. Der Durchschnittswert dient wiederum zum Schutz von fehlerhaften Pixeln und zur Reduktion des Bildrauschens. Ist ein Farbwert innerhalb des Toleranzbereiches, wird die Position des dazugehörigen Rasterpunktes gespeichert (Grüne Punkte in Abbildung 7.51). Abbildung 7.51: Signalsuche – Ausgewertetes Onlinebild. Die grünen Punkte sind Rasterpunkte, wo der Farbwert innerhalb des Toleranzbereiches liegt. Teile der Rasterlinien sind gelb eingezeichnet. Das Raster wurde leicht verschoben, so dass die grünen Punkte noch sichtbar sind. Die blauen Beschriftungen sind die Farbwerte der Punkte. Manchmal werden aber auch Positionen von Rasterpunkten gespeichert, die gar nicht über dem Signal liegen. Oder es werden Rasterpunkte über dem Signal nicht als solche erkannt. Damit sich solche Fehl-Erfassungen nicht gross auswirken, wird das quadratische Mittel von allen gespeicherten Positionen berechnet (Siehe Formel 7.1). So findet man die ungefähre Position des Signals. Der Bildausschnitt um diese Position herum wird der Merkmalsbasierten Erkennung übergeben. Seite 51 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Abb. 7.50: Strassensignale MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 𝑥12 + 𝑥22 + ⋯ + 𝑥𝑛2 𝑥𝑠𝑖𝑔𝑛𝑎𝑙 = √ 𝑛 𝑦𝑠𝑖𝑔𝑛𝑎𝑙 = √ 𝑦12 + 𝑦22 + ⋯ + 𝑦𝑛2 𝑛 Formel 7.1: Errechnung der Signalposition mit quadratischem Mittel Die Koordinate der Signalposition ist 𝒙𝒔𝒊𝒏𝒈𝒂𝒍 ,𝒚𝒔𝒊𝒏𝒈𝒂𝒍 . 𝒏 ist die Anzahl Rasterpunkte, dessen Farbwerte im Toleranzbereich liegen und 𝒙𝒏 , 𝒚𝒏 sind deren Koordinaten. Es kann auch sein, dass die Farbwerte bei gar keinem Rasterpunkt innerhalb des Toleranzbereiches liegen. In diesem Fall wird davon ausgegangen, dass sich kein Signal im Bildfeld befindet und die Signalsuche wird abgebrochen (Siehe Abbildung 7.54). Die Merkmalsbasierte Erkennung vergleicht den Bildausschnitt mit dem Signal nacheinander mit den Einträgen in der Datenbank. Diese Datenbank muss natürlich vorher angelegt werden. Da ich für sie keine Speicherungsfunktion implementieret habe, muss sie nach jedem Programmstart neu angelegt werden. Beim Vergleichen mit den Datenbankeinträgen wird ein Wert ermittelt, der den Grad der Übereinstimmung repräsentiert. Der Eintrag mit der höchsten Übereinstimmung gilt als erkannt. Die Technik wird „Nächster-NachbarKlassifizierung“ genannt. Nun kann der erkannte Eintrag oder in diesem Fall das erkannte Signal zurückgegeben werden (Siehe Abbildung 7.54). Die genaue Funktionsweise dieser Erkennung wird in der Theorie unter 5.4 Merkmalsbasierte Erkennung erklärt. Die folgende Abbildung 7.52 zeigt die Erkennung im Einsatz. Abbildung 7.52: Merkmalsbasierte Erkennung im Einsatz. Das Signal „X“ wurde erkannt. Die gelben Punkte im Bild sind die Kantenpunkte. Der Unterschied zum Datenbankeintrag betrug 39.57. Seite 52 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. 7.11.2 MERKMALSBASIERTE ERKENNUNG MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.11.3 PROBLEME UND VERBESSERUNGSMÖGLICHKEITEN Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Die grösste Schwierigkeit bei der Umsetzung der Strassensignale war die Signalsuche im Kamerabild. Es war schwierig den richtigen Toleranzbereich zu finden, da je nach Beleuchtung andere Farbwerte für die Erkennung des roten Papiers optimal waren. Das ganze wurde durch den automatischen Weissausgleich verschlechtert, den ich nicht unterbinden konnte. Das Bild ohne Signal war schwarzweiss: schwarze Linie auf weisser Unterlage. Legte man nun das rote Signal dazu, sorgte der Weissausgleich dafür, dass das ganze Bild rötlich verfärbt wurde. Die weisse Unterlage wurde blassrosa und viele Bereiche wurden fälschlicherweise als Signal erkannt. Beide Probleme konnte ich schliesslich lösen: Ich fand einen geeigneten Toleranzbereich für die Farbwerte und in der Praxis war das rote Signal zu kurz im Bild um den Weissausgleich auszulösen. Seite 53 MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.12 ERGÄNZENDE ARBEITEN In diesem Kapitel erkläre ich einige kleinere Dinge, die ich in meiner Projektphase durchgeführt habe. Zuerst die Variable Fahrgeschwindigkeit und die Line-Lost Strategie, beides habe ich schon vorher in der Dokumentation erwähnt. Ein wichtiger Punkt ist auch die Optimierung der Beleuchtung. Zum Schluss habe ich noch einen Vergleich zwischen Neuronalen Netzen und Direktsteuerung durchgeführt. 7.12.1 VARIABLE FAHRGESCHWINDIGKEIT Die Fahrgeschwindigkeit des Trucks ist bis jetzt konstant gewesen. Um das Fahren von engen Kurven zu verbessern, habe ich eine variable Fahrgeschwindigkeit eingebaut. Diese hängt von der Einlenkung der Steuerung und der Position der schwarzen Linie im Kamerabild ab. Je stärker die Einlenkung und grösser der Abstand der Linie von der Bildmitte, desto langsamer fährt der Roboter: (Siehe Formel 7.2 und Programmcode 7.3) 𝑣𝑅𝑜𝑏𝑜 = 𝑠0 + 𝑠𝑜𝑓𝑓𝑠𝑒𝑡 ∗ (2.0 − |𝛼| − 𝛿) Die Fahrgeschwindigkeit 𝒗𝑹𝒐𝒃𝒐 wird aus Steuerungswinkel 𝜶 ( −𝟏. 𝟎 < 𝜶 < 𝟏. 𝟎 ) und dem Abstand der schwarzen Linie von der Bildmitte 𝜹 (𝟎. 𝟎 < 𝜹 < 𝟏. 𝟎 ) berechnet. Die Grundgeschwindigkeit 𝒔𝒐 und die Geschwindigkeitsänderung 𝒔𝒐𝒇𝒇𝒔𝒆𝒕 sind konstante Werte. (𝝐, 𝜹 𝝐[−𝟏. 𝟎; 𝟏. 𝟎]) //Geschwindigkeit des Antriebsmotor (1) setzen Robo.Motor(1, 1 + 1 * (2.0 - Math.Abs(SteeringValue) - OffsetSum)); Programmcode 7.3: Umsetzung der Formel 7.2. 7.12.2 LINE-LOST STRATEGIE Die Line-Lost Strategie soll den Roboter zurück auf die schwarze Linie bringen, wenn er sie verloren hat. Sobald eine gewisse Zeit lang keine Linie mehr im Kamerabild erfasst wird, fährt der Roboter rückwärts, bis er die Linie wiederfindet. Mit dieser Strategie hat er in der Regel zurück auf die Linie gefunden. Ich habe diese Strategie aber aus dem Endprodukt entfernt, da der Roboter am Schluss praktisch fehlerfrei der Linie folgen konnte und die LineLost Überprüfung unnötig das Programm gebremst hat. Seite 54 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Formel 7.2: Berechnung der Fahrgeschwindigkeit MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.12.3 OPTIMIERUNG DER BELEUCHTUNG Der eigentliche Durchbruch in der Verbesserung des Fahrverhaltens und der Bildverarbeitung gelang mir mit einer wesentlichen Änderung der Beleuchtung. Bis jetzt verwendete ich nur natürliches Licht oder die Decken- und Schreibtischbeleuchtung. Die Lichtverhältnisse waren nicht schlecht, aber die LEGO-Kamera hatte Probleme damit. Das Bild war ungleichmässig ausgeleuchtet und die Farben waren nicht realitätstreu. Ich suchte deshalb nach einer besseren Lichtquelle. Ich fand eine 1000 Watt Fotoleuchte (Siehe Abb. 7.53). Diese konnte mit ihrer enormen Leuchtkraft die Versuchsumgebung genügend ausleuchten, so dass die LEGO-Kamera ein deutlich besseres Bild lieferte. So wurde die Bildverarbeitung genauer, was sich positiv auf das Fahrverhalten und die Erkennung von Abbiegungen und Signalen auswirkte. 7.12.4 VERGLEICH ZWISCHEN NEURONALEN NETZEN UND DIREKTSTEUERUNG Da ich kein komplexeres Strassensystem eingeführt hatte, kam mir die Idee, ich könnte die Position der schwarzen Linie im Kamerabild direkt als Lenkungssignal dem Truck übergeben, ganz ohne neuronales Netz. Ich entschied mich dies zu Testen und die Fahrverhalten zu vergleichen. Wie ich erwartet hatte, funktionierte es sehr gut. Beide Fahrverhalten waren in etwa gleich gut. Ich kehrte trotzdem zum Neuronalen Netz zurück, da eine direkte Steuerung nicht das Ziel meiner Arbeit war. Andernfalls hätte ich es bei der Vorübung belassen können. Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Abb. 7.53: 1000W Fotoleuchte Seite 55 MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 7.13 ZUSAMMENSPIEL DER EINZELNEN ELEMENTE In diesem Kapitel werde ich den ganzen Programmablauf in der Abbildung 7.54 zusammenfassen und aufzeigen, wie die einzelnen Elemente untereinander arbeiten. Abbildungserkennung: Abbildung erkannt? Nein Bildverarbeitung: Analyse des Kamerabildes Roboter Kamerab ild Ja Roboter anhalten Lenkung Helligkeitswerte Kein Signal gefunden Signal gefunden Signalposition Bildausschnitt mit Signal Neuronales Netz Berechnet Lenkungswinkel aus Helligkeitswerten Lenkungswinkel Trainingsmodus Variable Fahrgeschwindigkeit Objekterkennung: Vergleich mit Datenbank Strassensignal Reaktion auf Signal: RCX Ansteuern Antrieb Objektdatenbank Strassensignale Verhaltensdatenbank Für Strassensignale Sammeln von Samples: Roboter wird Linie nachgeschoben Datenbank Speicherung der Samples Training: Das Neuronale Netz wird mit den Samples trainiert Abbildung 7.54: Programablauf – Übersicht. Zeigt das Zusammenspiel der einzelnen Elemente. Die einzelnen Vorgänge werden in der vorangegangen Kapiteln erklärt. Der Trainingsmodus ist gekürzt dargestellt (vergleiche Abbildung 7.36). Zeichenerklärung: Tab. 7.7. Zeichenerklärung Programroutine Objekt Grösse, Befehl Programablauf Datenfluss Befehl Tab. 7.7: Zeichenerklärung Seite 56 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Signalsuche: Suche des roten Signals MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 8. DISKUSSION 8.1 PROBLEME & VERBESSERUNGSMÖGLICHKEITEN Abb. 8.1: Kamerabild der LEGO-Kamera. Farbenuntreue: Der Untergrund wäre weiss. Das Hauptproblem war die verwendete LEGO-Kamera. Ihre Bildqualität war nicht besonders gut und beeinträchtigte jede Bildverarbeitung und Erkennung. Für eine weiterführende Arbeit würde ich eine Kamera empfehlen, die eine bessere Ausleuchtung hat und auch bei schlechten Lichtverhältnissen ein ungefähr farbentreues Bild liefert (Siehe Abb. 8.1). Allerdings würde ich keine Kamera verwenden, die eine höhere Bildauflösung besitzt. Eine höhere Auflösung bedeutet auch mehr Daten, die verarbeitet werden müssen. Wie der „Vergleich zwischen Neuronalen Netzen und Direktsteuerung“ aufgezeigt hat, könnte man die Verwendung eines Neuronalen Netzes bei der Navigation überdenken. Allgemein bin ich in meinem Projekt mit Lösungen ohne Neuronale Netze besser gefahren. Grund dafür war sicher der fehlerhafte Lernalgorithmus, den ich erst gegen den Schluss der Projektphase korrigieren konnte. Das zweite Problem war das Sammeln von qualitativ hochstehenden Trainingssamples. Es wäre interessant, die durchgeführten Verwendungsversuche von Neuronalen Netzen mit dem korrigierten Lernalgorithmus zu wiederholen und die Ergebnisse zu vergleichen. Allgemein möchte ich noch sagen, dass es immer schwierig wird, sobald man abstrakte Informatik und Mathematik mit der Realität verbindet. Es können nie alle Faktoren miteinbezogen werden, welche die Realität beeinflussen. 8.2 FAZIT UND AUSSICHTEN Vergleicht man das Erreichte mit den auf Seite 20 definierten Zielen, so sieht man, dass ich nicht alles erreicht habe. Das Ziel, die Navigation des Roboters in mit künstlicher Intelligenz zu realisieren, worauf ich meinen Schwerpunkt gelegt habe, ist aber erfüllt. Alles in allem bin ich mit meinem Projekt zufrieden und habe viel Neues über Künstliche Intelligenz gelernt, insbesondere über Neuronale Netze und Merkmalsbasierte Objekterkennung. Weiter habe ich neue Erfahrungen im Bereich Robotik, Regelungstechnik und natürlich in Mechatronik gesammelt. Die nicht erreichten Ziele und die in der Dokumentation und der Diskussion genannten Probleme und Verbesserungsvorschläge dienen als Grundlage für eine weiterführende Arbeit. Der vorhandene Programmiercode und der Roboter sind auf Erweiterung ausgelegt und dürfen nach Absprache verwendet und weiterentwickelt werden. Seite 57 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. In diesem Kapitel werde ich die Probleme darlegen und Verbesserungsmöglichkeiten diskutieren, die das ganze Projekt betreffen. Die Diskussion von Teilen der Arbeit findet man in der Dokumentation (Siehe Einleitung der Dokumentation). MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 9. GLOSSAR Das Glossar ist thematisch geordnet. Es werden verwendete Begriffe erklärt 9.1 PROGRAMMIEREN Abbildung 9.1: Die von mir verwendete Entwicklungsumgebung: Microsoft Visual Studio 2005 F UNKTION Eine Funktion kann aufgerufen werden. Man kann ihr verschiedene Parameter übergeben. Die Funktionen können Variablen zurückgeben. I MPLEMENTIEREN Das Schreiben von konkretem Programmiercode aus der Vorstellung was er tun sollte. K LASSE Eine Klasse ist eine Definition eines Objekts. In einer Klasse können unter anderem Eigenschaften und Funktionen definiert werden. Von einer Klasse können Instanzen (Objekte) erstellt werden. P ROGRAMBIBLIOTHEK Programbibliotheken enthalten wie Anwendungen Maschinencode. Man kann sie aufrufen und steuern. V ARIABLE Eine Variable ist ein Verweis auf eine Speicherstelle im Arbeitsspeicher, wohin etwas abgelegt werden kann. Variablen können auf verschiedene Dinge verweisen: zum Beispiel Zahlen oder Zeichenketten. Es können aber auch komplexere Objekte wie Bilder sein. Seite 58 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. E NTWICKLUNGSUMGEBUNG / P ROGRAMMIERSTUDIO Eine Entwicklungsumgebung oder ein Programmierstudio sind Anwendungen für den Computer, womit Programme geschrieben, kompiliert und debugget werden können. Abbildung 9.1 zeigt so eine Anwendung. MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ V ERERBUNG VON K LASSEN , E RWEITERUNG Vererbung von Klassen bedeutet, dass eine neue Klasse eine bestehende erweitert. Die bestehende Klasse wird auf die neue vererbt. Eine neue Klasse kann jeweils nur von einer bestehenden erben. Eine bestehende kann aber auf beliebig viele neue vererbt werden. Dadurch können auch Funktionen von bestehenden Klassen neu implementiert werden (Überladen von Funktionen). In diesem Fall muss geregelt werden, ob die Funktion der geerbten oder vererbten Klasse ausgeführt wird. (Polymorphie). In der Arbeit verwende ich der Einfachheit halber den Ausdruck: „eine Erweiterung einer Klasse“, statt „sie erbt von einer Klasse“. 9.2 GETRIEBE23 Ein Getriebe ist verantwortlich für die Weiter- oder Umleitung des Kraftflusses oder die Veränderung des Drehmoments (Übersetzung). Praktisch jede Mechanik wird als Getriebe aufgefasst. S TIRNRADGETRIEBE (A BB . 9.2) Beim Stirnradgetriebe hat man zwei oder mehr parallele Achsen, an welche Zahnräder (Stirnräder) befestigt sind. Dadurch lässt sich der Kraftfluss weiterleiten oder durch Kombination von unterschiedlich grossen Zahnrädern das Drehmoment verändern. Abb. 9.2: Stirnradgetriebe Z AHNSTANGENGETRIEBE (A BB . 9.3) Das Zahnstangengetriebe besteht aus einer Zahnstange und einem Stirnrad. Hier wird die Drehbewegung des Zahnrads in eine Schiebebewegung umgewandelt. Abb. 9.3: Zahnstangengetriebe Abb. 9.4: Kegelradgetriebe K EGELRADGETRIEBE (A BB . 9.4) Das Kegelradgetriebe ähnelt dem Stirnradgetriebe. Nur sind die Achsen bei diesem Getriebe nicht parallel, sondern stehen in einem Winkel zueinander. Dadurch lässt sich der Kraftfluss umlenken. Die hier verwendeten Zahnräder heissen Kegelräder. 23 Verwendete Quellen zum Ergänzen der Fachwörter und Definitionen:(Achsgetriebe Wikipedia, 2006; Getriebe - Wikipedia, 2007; Kegelradgetriebe - Wikipedia, 2007; Kettengetriebe - Wikipedia, 2007; Stirnradgetriebe - Wikipedia, 2007; Zahnrad - Wikipedia, 2007; Differenzialgetriebe - Wikipedia, 2007) Seite 59 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Mit LEGO lassen sich die meisten Getriebeprinzipien nachbauen. Ich werde die wichtigsten grob erklären: MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ K RONENRADGETRIEBE (A BB . 9.5) Bei einem Kronenradgetriebe stehen die Achsen meist rechtwinklig zueinander. Speziell ist hier das Kronrad, ein Zahnrad, dessen Zähne rechtwinklig zur Drehebene stehen. Abb. 9.5: Kronenradgetriebe K ETTENGETRIEBE (A BB . 9.6) Bei einem Kettengetriebe sind die beiden beteiligten Zahnräder mit einer Kette verbunden. Der Kraftfluss wird über die Kette geleitet. Auch hier ist eine Übersetzung möglich. Beispiel für Kettengetriebe: Fahrrad. Abb. 9.7: Differentialgetriebe D IFFERENTIALGETRIEBE (A BB . 9.7) Beim Fahren einer Kurve, drehen sich die beiden Räder einer Achse nicht gleich schnell, da sie unterschiedliche Strecken zurücklegen müssen. Die Achse darf deshalb nicht starr sein, muss aber trotzdem für die Übertragung der Antriebskraft verbunden sein. In diesem Fall wird ein Differentialgetriebe eingesetzt, welches unterschiedliche Drehzahlen auf beiden Rädern ermöglicht. Z AHNSPIEL Zahnspiel bedeutet, dass sich ein Zahnrad in einem Getriebe ein Stück drehen lässt ohne die anderen Zahnräder zu berühren. Man kann es auch als Spielraum bezeichnen. Seite 60 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Abb. 9.6: Kettengetriebe MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 10. LITERATUR- UND QUELLENVERZEICHNIS, NACHSCHLAGEWERKE Achsgetriebe - Wikipedia. (1. November 2006). Abgerufen am 26. Juli 2007 von Wikipedia: http://de.wikipedia.org/wiki/Achsgetriebe Cornelsen. (2001). Biologie Oberstufe - Gesamtband. Berlin: Cornelsen. Differenzialgetriebe - Wikipedia. (13. August 2007). Abgerufen am 16. August 2007 von Wikipedia: http://de.wikipedia.org/wiki/Differentialgetriebe Getriebe - Wikipedia. (28. Juli 2007). Abgerufen am 29. Juli 2007 von Wikipedia: http://de.wikipedia.org/wiki/Getriebe Institut TIK, E. Z. (4. Juli 2007). ETH - TIK - Mindstorms. Von ETH - Eidgenössische Technische Hochschule Zürich: http://www.tik.ee.ethz.ch/tik/education/lectures/PPS/mindstorms/ abgerufen Kegelradgetriebe - Wikipedia. (12. Juli 2007). Abgerufen am 26. Juli 2007 von Wikipedia: http://de.wikipedia.org/wiki/Kegelradgetriebe Kretzschmar, R. (2006). Einblicke in ausgewählte Themen der angewandten und theoretischen Informatik - Vorlesungsskript PHBern. Bern: PHBern. Microsoft Corporation. (2007). Microsoft Developer Network - MSDN. Von Microsoft: http://msdn2.microsoft.com/en-us/default.aspx abgerufen Pulsweitenmodulation - Wikipedia. (20. Juni 2007). Abgerufen am 25. Juli 2007 von Wikipedia: http://de.wikipedia.org/wiki/Pulsweitenmodulation RCX - Wikipedia. (19. Juli 2007). Abgerufen am 25. Juli 2007 von Wikipedia: http://de.wikipedia.org/wiki/RCX Russell, S., & Norvig, P. (2004). Künstliche Intelligenz - Ein moderner Ansatz (2 Ausg.). (P. E. DEUTSCHLAND, Übers.) München (D): PEARSON EDUCATION. Stirnradgetriebe - Wikipedia. (12. Juni 2007). Abgerufen am 26. Juli 2007 von Wikipedia: http://de.wikipedia.org/wiki/Stirnradgetriebe The LEGO Group - MindStorms. (1999). Robotic Inventions System 1.5 TM - Constructopedia TM - 9747. The LEGO Group. The LEGO Group. (11. Oktober 1998). PBRICK.pdf - OCX Technical Reference. Tucker, K. (3. März 2007). VB Helper: HowTo: Capture video from a video device such as a Webcam with VB .NET. Abgerufen am 17. April 2007 von VB Helper: http://vbhelper.com/howto_net_video_capture.html Zahnrad - Wikipedia. (29. Juni 2007). Abgerufen am 27. Juli 2007 von Wikipedia: http://de.wikipedia.org/wiki/Zahnrad Seite 61 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Kettengetriebe - Wikipedia. (17. Juli 2007). Abgerufen am 26. Juli 2007 von Wikipedia: http://de.wikipedia.org/wiki/Kettengetriebe MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 11. ANHANG 11.1 MEDIENVERZEICHNIS Verzeichnis Dokumentation Dokumente und Berichte Grafiken Programm Programmieren Material Schriftliche Arbeit Inhalt Filme, Fotos, Samples und Netzdateien Fehlersuche im Lernalgorithmus Versuchs- und Fortschrittsberichte Planungen und Überlegungen Fotos und Grafiken der Roboter, Bauteile etc. Screenshots Abbildungen im Text der Objekterkennung Projektordner mit Quellcode und kompilierten Programmen Hauptprogramm „\ Maturaarbeit \“ Andere Testprojekte Quellcode aus Internet für Kameraansteuerung JavaNNS Übungsprogramme für Neuronalen Netze RCX Dokumentation und Treiber Diese Arbeit im Originalformat (.docx) und div. anderen. Tabelle 11.1: Verzeichnisstruktur der digitalen Daten 11.2 VERWENDETE ANWENDUNGEN Folgende Anwendungen habe ich für meine Arbeit verwendet (Projekt- und Schreibphase): Microsoft Office Word 2007 Microsoft Office Excel 2007 Microsoft Office Powerpoint 2007 Microsoft Office Picture Manager Microsoft Visual Studio 2005 – Professional Edition (Codezone Lizenz) JavaNNS Paint, Editor, Internet Explorer … Seite 62 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Dieses Verzeichnis führt die verfügbaren digitalen Daten zur Arbeit auf. Die Daten finden sie auf der beigelegten CD. Später werden sie auf der Internetseite http://aphager.com online gestellt. Die Verzeichnisstruktur ist wie folgt aufgebaut: MATURAARBEIT - NAVIGATION EINES LEGO-ROBOTERS MIT KÜNSTLICHER INTELLIGENZ 12. RECHTSHINWEIS Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt. Fast alle Hardware- und Softwarebezeichnungen, die in dieser Arbeit erwähnt werden, sind gleichzeitig auch eingetragene Warenzeichen oder sollten als solche betrachtet werden. LEGO, MINDSTORMS, Robotic Invention System, Power of Robotics @ Your Command, RCX und Constructopedia sind Warenzeichen der LEGO Group. Microsoft, Visual Studio, .NET-Framework sind Warenzeichen der Microsoft Corporation 13. EIDESSTATTLICHE ERKLÄRUNG „Hiermit erkläre ich, die vorliegende Arbeit selbständig und unter Angabe aller benötigten Quellen verfasst zu haben.“ Ort und Datum Hager Pascal Alexander Seite 63 Kapitel: Error! Use the Home tab to apply Überschrift 1 to the text that you want to appear here. Alle Grafiken, wie Fotos, Abbildungen, Ablaufdarstellungen etc. wurden von mir persönlich angefertigt und dürfen nur mit meinem Einverständnis weiterverwendet werden.