Navigation eines LEGO-Roboters mit Künstlicher

Werbung
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.
Herunterladen