Maturaarbeit Der Bau und die Programmierung eines

Transcription

Maturaarbeit Der Bau und die Programmierung eines
Maturaarbeit
xbot
Der Bau und die Programmierung eines omnidirektionalen
Roboters
von Gerhard Röthlin und Christoph Rüegg, 6Rb, KSLuzern
16. Dezember 2001
Inhaltsverzeichnis
Vorwort
iv
I
1
Organisation
1 Einleitung
2
1.1
Die Gruppe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.2
Die Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.3
Die Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2 Budget
II
4
2.1
Finanzierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.2
Planung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
Strategien
5
3 Fortbewegung
6
3.1
Beine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3.2
Räder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
3.2.1
Konventionelle Systeme
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
3.2.2
OmniWheels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
4 Karten
4.1
4.2
8
Speicherung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
4.1.1
Pixelmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
4.1.2
Vektormap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
4.1.3
Neural Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
Punktreduktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
i
5 Wegberechnung
5.1
5.2
III
11
Methode der Grenzverfolgung . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
5.1.1
Backtracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
5.1.2
Probleme und Lösungsansätze . . . . . . . . . . . . . . . . . . . . . . . . .
12
Methode der Ausbreitungsanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
5.2.1
14
Probleme und Lösungsansätze . . . . . . . . . . . . . . . . . . . . . . . . .
Hardware
15
6 Gehäuse
16
6.1
Material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
6.2
Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
6.2.1
Platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
6.2.2
Mechanik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
7 Controller
18
7.1
Auswahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
7.2
Ansteuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
7.3
Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
7.4
Eingabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
8 Stromversorgung
20
8.1
Verteilung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
8.2
Auswahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
8.3
Funktionsweise der Akkumulatoren . . . . . . . . . . . . . . . . . . . . . . . . . .
21
9 Servomotoren
22
9.1
Auswahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
9.2
Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
9.2.1
Mechanik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
9.2.2
Elektronik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
9.3
Modifikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
9.4
Kalibrierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
9.5
Zusammensetzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
ii
10 Sensoren
25
10.1 Auswahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
10.2 Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
11 Schaltung
26
11.1 Strom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
11.2 Signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
IV
Software
28
12 Software Architektur
29
12.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
12.2 Anforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
12.3 Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
12.3.1 Wahl der Umgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
12.4 Komponenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
12.4.1 Modularität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
12.4.2 Kommunikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
13 Backend
32
13.1 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
13.2 Datenfluss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
13.2.1 Phasen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
13.2.2 Koordination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
14 Frontend
34
14.1 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
14.2 Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
14.2.1 Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
14.2.2 Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
14.2.3 Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
14.2.4 Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
15 Arbeiten mit der Software
36
15.1 Vorgehensweise bei einfachen Problemstellungen . . . . . . . . . . . . . . . . . . .
iii
36
15.2 Einbindung von Erweiterungen . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
15.3 Erweitern mit Plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
V
Ausblick
38
16 Weiterführung
39
16.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
16.2 Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
16.3 Neue Wege . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
16.4 Hilfe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
VI
Anhang
I
A Tabellen
II
B Abbildungen
IV
C Glossar
VII
Literaturverzeichnis
IX
Index
X
iv
Vorwort
Diese Arbeit befasst sich mit der Planung, dem Bau und der Programmierung eines Roboters.
Insbesondere der Bau und die Programmierung waren sehr zeitintensiv, das Ergebnis rechtfertigt
aber die geleistete Arbeit. Der Aufwand war gross und einige Hindernisse standen uns im Weg.
Die Probleme forderten uns heraus, neue, kreative Lösungen auszudenken.
Ende 2000 erhielten alle damaligen Fünftklässler der Kantonsschule Alpenquai den Auftrag
zum Schreiben einer Maturaarbeit. Uns gingen viele Ideen durch den Kopf, es war nur klar, das
die Arbeit etwas mit Computern zu tun haben sollte.
Eine Idee liess uns nicht mehr los: Einen Roboter zu bauen. Wir suchten im Internet nach geeigneten Vorlagen oder Anleitungen und fanden schliesslich auch einen einfachen und günstigen
Roboter (Bot) zum selbst bauen[5], womit der Grundstein zu dieser Arbeit gelegt worden war.
Bei einigen Elementen unseres Projektes konnten wir uns auf Literatur und Informationen
aus dem Internet stützen, bei anderen mussten wir aber selbst überlegen, bis wir eine Lösung
fanden, die unsere Ziele enrfüllte. Wo wir uns bei der Hardware noch teilweise auf den Palmbot
stützen konnten, mussten wir bei den Strategien und der Software, auf die der Roboter aufbaut,
komplettes Neuland beschreiten.
Danken möchten wir Herrn Christoph Arnold, unserem Mentor, der uns während des Projektes
unterstützt und immer mit allen Mitteln geholfen hat, Herrn Fuchsberger und allen Weiteren, die
uns mit ihren Ratschlägen zur Seite standen.
Kommentare oder Vorschläge können über E-Mail oder auch direkt an uns gesendet werden. Wir stehen unter unserer Kontaktadresse [email protected] oder auf unserer Webseite unter
http://xbot.sourceforge.net/ gerne zu Verfügung.
v
Teil I
Organisation
1
Kapitel 1
Einleitung
1.1
Die Gruppe
Unsere Gruppe bestand ursprünglich aus drei Personen, Jonas Renggli, Gerhard Röthlin und
Christoph Rüegg. Zusammen wollten wir versuchen, einen autonomen Roboter (Bot) zu bauen. Da
Jonas Renggli leider die fünfte Klasse repetieren musste, haben die verbliebenen zwei, Christoph
Rüegg und Gerhard Rötlhin, die Arbeit zu zweit fortgeführt.
1.2
Die Arbeit
Die Maturaarbeit setzt sich zusammen aus dieser Dokumentation, dem Roboter, einem Manual
und gut 6000 Zeilen Programmcode.
1.3
Die Dokumentation
Dieses Dokument ist vor allem eine Projektbeschreibung, die Gliederung ist thematisch. Der
Teil “Organisation” behandelt die anfängliche Planung mit der Projekteinführung und dem Aufstellen des Budgets. Im Strategieteil werden einige Vorgehensmöglichkeiten aufgeführt, die uns
vor allem in der Anfangsphase der Arbeit offen waren und die die Realisierung des Bots massgeblich beeinflusst haben. Ausserdem werden dort auch Wege gezeigt, die bei einer Erweiterung der
Programmierung beschritten werden können. Im folgenden Teil wird die Hardware, also der technische Aufbau des Bots, detailliert beschrieben. Im Softwareteil wird der programmatische Aufbau
der Steuersoftware behandelt, die sozusagen die “Intelligenz” des Bots darstellt und die von uns
entwickelt wurde. Weitere Möglichkeiten, den Bot zu verändern und anzupassen, werden im Teil
2
“Weiterführung” gegeben. Am Schluss dieses Dokumentes findet sich das Literaturverzeichnis, die
zusätzlichen Tabellen und Abbildungen und der Index mit wichtigen Stichworten.
3
Kapitel 2
Budget
2.1
Finanzierung
Dank der Stopinc AG, die uns mit Laptops ausrüstete, und der Informatikabteilung der KSL,
die unsere weitere Projektarbeit mit maximal 1000 Fr mitfinanziert, konnten wir unser Vorhaben
erst verwirklichen.
2.2
Planung
Wir haben uns schon früh Gedanken über die Ausstattung des Bots gemacht. Anfängliche Ideen
wurden so vereinfacht oder durch kostengünstigere Alternativen ersetzt. Wärend des Baus des
Bots haben wir versucht, möglichst viele Bauteile in lokalen Geschäften oder durch den inländische Versandhandel zu erwerben. Da die wichtigsten Bauteile, der Controller, die Sensoren und
die OmniWheels, hier nicht erhältlich sind, mussten wir in den USA bestellen und wählten die
sicherste Versandmethode. Das Ergebnis ist als Budget in Tabelle A.1 zu sehen.
4
Teil II
Strategien
5
Kapitel 3
Fortbewegung
Eine zentrale Frage in der Planungsphase eines mobilen Roboters ist die nach der Fortbewegungsmethode. Die Auswahl an verschiedenen Möglichkeiten ist riesig, jede hat ihre eigenen
Stärken und Schwächen. Die geeignete Wahl zu treffen ist schwierig, da viele Faktoren bei dieser
Entscheidung eine Rolle spielen, welche im Voraus nur schwer einzuschätzen sind.
Bodengebundene Fortbewegung lässt sich grundsätzlich in rad- und beinbasierte Fortbewegung
unterscheiden, wobei Raupenfahrzeuge zu den radbasierten Robotern zu zählen sind.
3.1
Beine
Beine bieten eine grosse Flexibilität und Geländegängigkeit, die von Bots mit Rädern nie erreicht werden kann, ihre grössten Nachteile sind jedoch, das ihre Geschwindigkeit und ihre Reaktionszeit weit hinter den Bots mit Rädern hinterherhinken. Auch die Steuerung ist sehr komplex,
denn Beine besitzen oft mehrere Gelenke, die einzeln angesteuert werden müssen und um das
Gleichgewicht zu halten, werden mehr als drei Beine benötigt, wenn nicht auf eine komplexe
Gleichgewichtsautomatik gesetzt wird.
Der Grossteil der wenigen Beinroboter besitzt drei oder mehr Beinpaare, die ähnlich denen von
Insekten relativ autonom voneinander operieren, was eine einfachere Steuerung erlaubt. Andere
experimentelle Roboter besitzen ein oder zwei Beine, auf denen sie hüpfen, um ihr Gleichgewicht
zu halten. Der bekannteste Zweibeiner ist wohl der “humane” Roboter von Hyundai, der über
eine sehr ausgereifte Mechanik verfügt.
6
3.2
3.2.1
Räder
Konventionelle Systeme
Weitaus häufiger sind rollende Roboter anzutreffen, die wesentlich einfacher zu bauen und zu
steuern sind und auch eine höhere Geschwindigkeit erreichen können. Sie arbeiten meistens nach
dem Prinzip eines Autos, verfügen also über eine festen Achse und einer Lenkachse, von denen eine
angetrieben ist, oder nach dem eines Raupenfahrzeuges, wo durch das einzelne, entgegengesetzte
Drehen zweier Räder die Richtung geändert wird.
Der Vorteil für das Raupensystem ist die Fähigkeit, auf dem Platz zu wenden, was vor allem in
engen Umgebungen von Nutzen sein kann. Nachteilig ist, das jedes Rad einen eigenen Antrieb
benötigt und auch einzeln angesteuert werden muss. Ein Servomotor für die Lenkung entfällt
aber. Oft wird auch nur ein Antriebsrad pro Seite verwendet, ein drittes, frei bewegliches, sorgt
für die Stabilisierung.
Roboter nach dem Autoprinzip steuern mit einer Lenkung, die je nach Anstellwinkel der Lenkachse
die Antriebskraft in die gewünschte Richtung lenkt. So wird nur ein Motor für die Bewegung vorund rückwärts und ein Servo für die Lenkung benötigt. Da der Weg, den das äussere Rad in einer
Kurve zurücklegen muss, grösser als der des Innenrades ist, wird ein Differential benutzt (aus
[1]).
3.2.2
OmniWheels
Relativ neu ist das OmniWheel-Prinzip, welches in einigen verschiedenen Implementationen zu
finden ist. OmniWheels sind spezielle Räder, welche sich in einer Richtung wie normale Räder
verhalten, in einer andere aufgrund ihrer Rollen jedoch wiederstandsarm gleiten (Abbildung B.4).
Dies erlaubt in der Anwendung, dass Räder auch, ohne sich gegenseitig zu behindern, nichtparallel
benutzt werden können; ein Differential wird nicht benötigt.
Das am weitesten verbreitete System setzt Räder ein, bei denen die Radachse um 90◦ zur Achse
der Rollen verdreht ist. Die Räder werden im Winkel von 120◦ zueinander angeordnet, wodurch
ein solcher Roboter in jede beliebige Richtung ohne die Notwendigkeit, sich zu drehen, fahren
kann. Die einzelnen Kräfte, die die Räder auf den Untergrund ausüben, können für die Gesamtberechnung einfach vektoriell addiert werden.
7
Kapitel 4
Karten
Um sich in einer Umgebung zurechtzufinden oder zu einem bestimmten Ziel zu kommen,
benötigt ein Roboter eine Karte, welche ihm Aufschluss über seine Position und die möglichen
Wege zum Ziel geben kann. Einige Ansätze kommen auch ohne eine Karte aus, was eine wesentlich höhere Flexibilität zur Folge hat, sich aber auch negativ in der Orientierungsfähigkeit
niederschlägt.
4.1
Speicherung
Um eine Karte zu speichern, stehen verschiedene Wege offen, die von einer simplen Pixelmap,
vergleichbar mit einem GIF-Bild, über eine vektorbasierte Karte, die die Umgebung mathematisch
beschreibt, bis zur Speicherung in neuronalen Mustern reicht. Jeder Weg hat Vor- und Nachteile,
die aber auch stark von der Implementation und den Zielen des Bots abhängen.
4.1.1
Pixelmap
Die Speicherung einer Karte in Form eines Pixelmusters ist die einfachste Lösung. Der Speicherbedarf ist relativ gering, je nach Auflösung der Karte kann er aber schnell wachsen. Jedem Punkt
der Karte, welche in konstanten Abständen gerastert ist, werden Werte oder Farbe zugewiesen,
welche die Art des Materials, die Messsicherheit oder sonst etwas repräsentieren können. Die
Messicherheit kann nützlich sein, wenn sich die Position von Objekten geändert hat, und der Bot
die neuen Messwerte als variabel einträgt. Durch mehrmaliges Messen kann so eine Karte mit
beweglichen und festen Objekten erstellt werden.
Eine Pixelkarte ist auch einfach zu verwalten, da die Anzahl der Punkte, die gemessen werden,
relativ überschaubar ist.
8
4.1.2
Vektormap
Bei einer Karte auf Vektorbasis werden die Punkte nicht in einer Matrix gespeichert und sind
so unabhängig von einem Raster. Die Punkte werden dann verbunden und ergeben so eine angenäherte Polygonenversion der Umgebung. Allen Punkten und Verbindungen können auch hier
noch Parameter zugeordnet werden.
Die Speichermengenbegrenzung ist nicht so einfach wie bei der Pixelmethode, da Punkte nahezu
beliebig nahe beieinander sein können und so der Speicherbedarf bei vielen Messwerten stark
ansteigen kann. Durch eine effiziente Komprimierung und das Löschen überflüssiger Punkte kann
dieser Nachteil aber mehr als ausgeglichen werden. Vor allem in grossen, geradlinigen Umgebungen kann diese Methode ihre Stärken voll ausspielen.
Sehr nützlich ist auch die Möglichkeit mit Hilfe der Mathematik schnell und sicher Wege zu finden und den Gesichtsbereich festzulegen. Bei einer vergleichbaren Pixelkarte ist das nur schwerer
möglich.
4.1.3
Neural Map
Karten können auch in neuronalen Verbindungen gespeichert werden, welche einem Gehirn
ähneln. Diese Art der nichtgeometrischen Orientierung unterscheidet sich stark von anderen, da
sie nicht scharf, sondern in feinen Abstufungen arbeitet.
4.2
Punktreduktion
Vor allem bei der Verwendung einer Vektorkarte ist die Reduktion von überflüssigen Punkten
und das Verschmelzen von doppelten Messwerten wichtig, um eine verwendbare Karte zu erhalten.
Dafür bieten sich zwei Methoden an.
Wärend der Kartenerstellung erhält der Algorithmus viele Punkte, die in geringem Abstand
zueinander stehen. Der erste Ansatz zur Punktreduktion setzt genau dort an, indem, ähnlich
der Pixelmap, ein Raster über die Punkte gelegt wird, so dass sie nur in bestimmten Minimalabständen zueinander stehen können. Das lässt sich unter anderem auch dadurch erreichen, das
die Koordinaten der Punkte in Form eines Vielfachen oder eines Teilers von Ganzzahlenwerten,
so genannten integer, gespeichert werden. Durch die Rundung der Positionswerte entsteht automatisch das gewünschte Raster. Bei einer Pixelkarte geschieht das automatisch, da alle Punkte
immer eine feste Position innehaben.
9
Der zweite Ansatz ist aufwändiger. Die Karte einer geraden Wand, die in unseren Häusern oft
anzutreffen ist, besteht ohne weitere Bearbeitung aus vielen hunderten von Messwerten, die alle
in etwa auf der selben Linie liegen. Dies kann man ausnützen, indem man von Punktetrippeln
den von ihnen eingeschlossenen Winkel bestimmt, welcher bei geraden Wänden idealisiert 0◦ ist.
Wenn der Zwischenwinkel einen Normwert unterschreitet, ist der mittlere Punkt nicht wichtig und
kann entfernt werden, während die zwei äusseren Punkte direkt verbunden werden. Diese Art der
Punkteeinsparung ist besonders in sehr geradliniger Architektur sehr effizient, was Vektorkarten
den Pixelkarten in den Bereichen Speicherbedarf und Berechnungskomplexität überlegen macht.
10
Kapitel 5
Wegberechnung
Eine der komplexeren Aufgaben in der Robotik ist die koordinierte Bewegung zwischen zwei
Punkten. Auch in Fällen, bei denen ein direktes Ansteuern des Zielpunktes durch eine Wand
oder gar eine irrgartenähnliche Raumstruktur verunmöglicht wird, soll der Roboter aus dem
vorliegenden Kartenmaterial einen möglichst idealen Weg berechnen können. Wir werden im
Folgenden auf zwei mögliche Ansätze für die Wegberechnung mit Pixelkarten eingehen.
5.1
Methode der Grenzverfolgung
A
P4
P1
P5
P2
P3
Abbildung 5.1: Pfadfindung durch Randverfolgung
11
B
Die Karte (Abbildung 5.1) zeigt eine von vielen Situationen, bei denen ein direktes Ansteuern
des Zielpunktes durch eine Wand verhindert wird. Die Grundidee zur Suche eines möglichen Weges
basiert auf dem optimistischen Trial and Error Prinzip: Als erstes wird die Direktverbindung A-B
überprüft. Schneidet die Verbindung kein als unpassierbar markiertes Gebiet, so beschreibt diese
Verbindung den idealen Weg. Bei vorliegender Karte wird jedoch ab Punkt P1 ein unpassierbarer
Bereich geschnitten. In diesem Fall soll ein kurzes Stück weit in eine beliebige Richtung die Grenze
verfolgt werden. Vom dadurch errechneten neuen Punkt P2 aus soll nun wieder die Strecke P2-B
geprüft werden. Sofern ideale Richtungsentscheide beim Verfolgen der Grenzen gefällt werden
führt dieses Verfahren wie in der Karte gezeigt nach einigen Zyklen zum Ziel.
5.1.1
Backtracking
Programmatisch kann nicht gewährleistet werden, dass beim Auftreffen auf ein Hindernis jeweils
die ideale Richtung gewählt wird. Abhilfe schafft das aus der Operation Research bekannte und
insbesondere bei regulären Ausdrücken[9] verwendete Prinzip des Backtrackings: Das Verfahren
wird wie oben beschrieben initialisiert. Bei jedem Punkt, an dem eine Richtung gewählt werden
muss, wird eine Möglichkeit überprüft und die andere für spätere Verwendung zwischengespeichert. Führen die gewählten Richtungen nicht zum Ziel, wird jeweils zur vorherigen Entscheidung
zurückgesprungen und die zwischengespeicherte Option gewählt. Dieser Vorgang wird für alle
vorhergehenden Ebenen wiederholt, bis ein Weg gefunden wird.
5.1.2
Probleme und Lösungsansätze
Jede Methode hat Vor- und auch Nachteile. Bei der Methode der Grenzverfolgung mittels
Backtracking sind vor allem folgende Nachteile von Bedeutung:
Performance
Bei Performaceanalysen werden üblicherweise drei Fälle näher untersucht: Der Idealfall, der
Normalfall, sowie der schlechteste Fall (Worst Case). Im Idealfall ist entweder bereits der erste
Verbindungstest erfolgreich, oder es werden alle Entscheidungen ideal gewählt. Im Normalfall
werden 50% der Entscheidung ideal gewählt. Durch geeignete Optimierungen z.B. mit Berücksichtigung des Winkels kann dieser Wert aber schätzungsweise auf über 80% gesteigert werden.
Im Worst Case werden entweder alle Entscheidungen erst falsch getroffen, oder es wird gar kein
Weg gefunden. In beiden Fällen werden alle Entscheidungsmöglichkeiten durchgespielt, was sich
12
sehr negativ auf die Laufzeitgeschwindigkeit auswirkt. Allenfalls kann der zweite Fall durch einen
einfachen Wegexistenztest z.B. durch Einfärbungswerkzeuge vermieden werden.
Endlosschleifen
Ein weiteres Problem ergibt sich, falls Säulen oder andere Objekte mit kleinem Durchmesser
die Verbindungsstrecke schneiden. Wenn die Schrittweite ungefär dem Radius mal 2*π entspricht,
wird das Objekt im schlimmsten Fall endlos umkreist werden. Abhilfe schafft eine vom Winkel
abhängige Schrittweite; wird der Winkel grösser, also der Webgogenradius kleiner, so wird auch
die Schrittweite verkleinert
Benützbarkeit des Weges
Mit dem Grenzverfolgungsverfahren wird zwar ein Weg berechnet, dieser ist jedoch aufgrund
potentieller Engpässe nicht direkt für den Bot verwendbar. Ausserdem arbeitet der Bot mit Schritten, er kann also nicht beliebig feine Bewegungen ausführen. Es muss also aus den berechneten
Daten erst ein brauchbarer vektorisierter Weg extrahiert werden, bei dem gewährleistet wird, dass
der Bot an keiner Wand anstösst.
5.2
Methode der Ausbreitungsanalyse
A
B
Abbildung 5.2: Pfadfindung durch Ausbreitungsanalyse
13
Ein grundsätzlich anderer Ansatz verfolgt die Methode der Ausbreitungsanalyse. Inspiriert vom
Bild einer Flüssigkeit, die in alle Richtungen strömt, werden ausgehend vom Startpunkt ringförmig
jeweils immer allen benachbarten Punkten im freien Raum eine laufende Nummer zugewiesen (bei
einer Pixlemap mit Farben bequem erreichbar). Wird der Zielpunkt erreicht, so wird jeweils immer
in dessen Bereich den Punk mit kleinster Nummer im sichtbaren Bereich gewählt. So entsteht ein
in vielen, auch beliebig komplexen Situationen idealer und bereits vektorisierter Weg.
5.2.1
Probleme und Lösungsansätze
Benützbarkeit des Weges
Anders als bei der Methode der Grenzverfolgung liegen die berechneten Wege mit dieser Methode bereits in einer viel brauchbarerer Form vor. Trotzdem sind einige Transformationen nötig,
um gewährleisten zu können, dass der Bot an keiner Wand anstösst.
Performance
Das “Fliessen” und Durchnummerieren der Pixel kann bei grossen Karten sehr aufwändig sein,
ebenso das Suchen des jeweils kleinsten sichtbaren Punktes. Generell bedeutet das eine kleine
Differenz zwischen Idealfall und Worst Case. Das führt dazu, dass diese Methode bei sehr komplexen Maps mit nur wenig freiem Raum im Vorteil liegt, während bei einfacheren Karten mit
viel Freiraum die Methode der Grenzverfolgung wesentlich besser abschneiden dürfte.
14
Teil III
Hardware
15
Kapitel 6
Gehäuse
Das Gehäuse des Bots wiederspiegelt auf verschiedenen Arten, welche Überlegungen hinter der
Fortbewegungsmethode stecken. In der Form kommt das Grundprinzip eines omnidirektionalen
Roboters unter anderem auch dadurch zum Ausdruck, dass keine Vorderseite erkennbar ist.
6.1
Material
Als Gehäusematerial wird für den Bot Aluminium eingesetzt, das sehr stabil und ausreichend
leicht ist. Ursprünglich war Plexiglas geplant, das aufgrund der Transparenz und der geringeren
Flexibilität einige bauliche Vorteile aufgewiesen hätte. Das Argument, das zur Entscheidung für
Aluminium geführt hat, war der etwas geringere Preis und die gute Verfügbarkeit. Das verwendete
Lochblech ist sehr gut für Prototypen verwendbar, da ohne Bohraufwand Schraubverbindungen
gebildet werden können. Die Gesamtstabilität des Gehäuses nimmt durch die verstärkenden Aluwinkeln zu.
6.2
6.2.1
Aufbau
Platform
Der Roboter ist hexagonal rotationssymmetrisch aufgebaut. Er besteht aus zwei sechseckigen
Platten mit einem Durchmesser von 33.5cm, die mit Winkeln an den Kanten verstärkt sind. Die
beiden Ebenen sind über jeweils zwei Winkel an jeder Ecke miteinander im Abstand von 9cm
verbunden. Der Raum zwischen den Platten bietet ausreichend Platz für die Elektronik und die
Verkabelung. Auf der oberen Platte findet auch ein kleines Notebook platz, das alternativ zu
einem externen Computer verwendet werden kann.
16
Die sechseckige Symmetrie wird auch in der Anordnung der Sensoren (Abbildung B.5) und der
Motoren deutlich. Zwischen den Sensoren und den Motoren liegt jeweils ein Winkel von 120◦ . Da
sich der Bot in jede beliebige Richtung bewegen kann, erreichen wir durch diese Sensoranordnung
die maximale Effektivität und Sensorausnutzung.
6.2.2
Mechanik
Die OmniWheels sind jeweils an einer eigenen tragenden Achse befestigt, die zur Reduktion von
Reibungsverlusten mit Kugellagern ausgestattet sind. Die empfindlichen Servomotoren müssen also keine tragende Funktion einnehmen, sondern nur das Drehmoment liefern. Ihre Verbindung zu
den Rädern wird durch einen Flansch hergestellt (Abbildung B.4). Die ursprüngliche Konstruktion, in der die Motoren das gesamte Gewicht des Bots tragen mussten, war aufgrund der starken
Kräfte auf das Getriebe und der grossen Reibung problematisch.
17
Kapitel 7
Controller
Der Controller ist das eigentliche Herzstück der Bot-Hardware. Er steuert die Motoren und
liest die Spannungsinformationen der Sensoren (Kapitel 10) ein. Die Befehle dazu erhält er über
Kabel von einem Steuercomputer, er übersetzt sie aber in von den Servomotoren verarbeitbare
Signale. Die Sensordaten werden in digitaler Form an den Computer weitergeleitet.
7.1
Auswahl
Für einen Roboter mit einem Computer als Steuer- und Regelinstanz wird auch etwas benötigt,
das zwischen ihm und der ausführenden Hardware steht. Dieser Controller muss vielfältige autonome Aufgaben erfüllen, sollte erschwinglich und auch ausreichend auf Kompatibilität getestet
sein. Ausserdem muss er die Aufgaben eines Mittlers erfüllen können. Bei der Controllerauswahl
ist das die grösste Schwierigkeit.
Eine Suche im Internet förderte nur wenige Ergebnisse zu Tage, wie zum Beispiel die Controllerkarte SV-203 von Pontec, die auch bei unserem Hardwarevorbild, dem PalmBot, eingesetzt wird.
Er ist sicherlich den Anforderungen entsprechend gebaut und bietet alle benötigten Funktionen.
Sein Nachteil ist aber, dass er nur aus den USA bezogen werden kann und nur für geringe Ströme
ausgelegt ist.
Ausserdem gibt es noch einige autonome Controller, die, einmal programmiert, ohne äussere Einwirkungen die Steuerung übernehmen können. Da wir aber eine aufwändige Software vorgesehen
haben, die einen Computer zwingend voraussetzt, scheiden diese “intelligenten” Controller aus.
Zum SV-203 gibt es aus Kostengründen keine Alternativen. Er ist sehr flexibel, und kann mit
jedem Gerät eingesetzt werden, das die schon etwas in die Jahre gekommene Schnittstellentechnologie RS-232 unterstützt (Abbildung B.2).
18
7.2
Ansteuerung
Gesteuert wird der SV-203 über den Serialport eines Computers (RS-232), über den Kommandos in Textform übermittelt werden. So kann beispielsweise mit dem Befehl SV1M128 das Board
angewiesen werden, den ersten Servo zur Position 128 zu bewegen. Mit den modifizierten Servomotoren (Kapitel 9.3) hat das zur Folge, dass die Servos stoppen. Der Controller verfügt über
einen umfangreichen Befehlssatz (Tabelle A.2).
7.3
Ausgabe
Der SV-203 verfügt über acht Ausgänge für Servomotoren, welche auch als digitaler Schalter
verwendet werden können. Servomotoren werden mit der so genannten Pulsweitenmodulation
angesteuert. Dieses Verfahren wendet neben den beiden Stromleitern + (U) und - (Grund)
eine weitere Signalleitung an. Darüber wird in regelmässigen Abständen von 14ms bis 20ms ein
Strompuls mit einer Länge zwischen 0.6ms und 2.4ms gesendet. Die Dauer des Pulses steuert
dabei die Position eines Servomotors. Eine Pulsweite von ungefär 1.52ms repräsentiert die neutrale
Position. Die Pulsweite kann in 255 Schritten eingestellt werden (Siehe auch [1] S.40 und [2] S.2).
7.4
Eingabe
Für die Eingabe stehen fünf Sensorpins zu Verfügung, die eine anliegende Spannung von maximal 5V messen können. Sie können für die Emulation eines Serialports oder auch zum Messen
von Wiederständen verwendet werden, der über die serielle Schnittstelle abgefragt werden kann.
Die Sensoren werden über diesen Weg angesteuert.
19
Kapitel 8
Stromversorgung
Zur Versorgung des Bots mit Energie setzen wir zwei NiMH-Akkus mit einer ungefähren Spannung von ca. 6V ein (Abbildung B.3). Jeder Akku besteht aus fünf Teilzellen, die in Serie geschaltet
sind. Sie können mit dem Ladegerät mit Thermoüberwachung schnell aufgeladen werden.
8.1
Verteilung
Ein Akkupack übernimmt in unserem Bot die Versorgung des Controllers und der Sensoren, der
andere liefert den Motoren ihre Energie. Wir haben diese beiden Kreisläufe soweit wie möglich
getrennt, damit nicht allzu grosse Ströme durch den Controller fliessen, welche ihn möglicherweise
zerstören könnten (Kapitel 11).
8.2
Auswahl
Auf dem Markt existieren grundsätzlich vier Akkutypen, die sich eignen, um den Bot mit Strom
zu versorgen. Bleiakkus schieden schon zu Beginn aus, da ihre Masse für unseren Roboter zu gross
ist. Lithiumionenakkus sind noch zu teuer, sie hätten aber eine sehr hohe Ladungsdichte und eine
grosse Spannung. In die engere Wahl kommen NiCd- und NiMH-Akkus.
Für NiMH sprechen einige Vorteile. Die Ladungsdichte ist um einiges höher als bei NiCd-Zellen
und die Verwendung des Schwermetalls Cadmium ist umweltschädigend. Nachteile sind der relativ
grosse Ladungsverlust und der etwas höhere Preis. Wir entschieden uns aufgrund der grösseren
Ladungsdichte und auch wegen der besseren Umweltverträglichkeit für NiMH (siehe auch [4])
20
8.3
Funktionsweise der Akkumulatoren
NiMH-Akkus sind ihren Vorgängern, den NiCd-Akkus im Aufbau sehr ähnlich. Als + Pol
setzen beide N iO(OH) + H2 O ein. Der - Pol unterscheidet sich aber stark. Das Cadmium wird
durch H2 ersetzt. Der Wasserstoff ist in einer Metalllegierung eingelagert, so dass nahezu keine
Druckabdichtung notwendig ist. Die komplette chemische Reaktion findet an den jeweiligen Polen
wie in Tabelle 8.1 beschrieben wird stat.
Oxidation(- Pol)
Reduktion(+ Pol)
Gedamtreaktion
H2 + 2OH − ↔ 2H2 O + 2e−
2N i3+ O(OH) + 2H2 O ↔ 2N i2+ (OH)2 + 2OH −
H2 + 2N i3+ O(OH) + 2H2 O + 2OH − ↔ 2H2 O + 2{N i(OH)2 }
Tabelle 8.1: Die Reaktion in einer NiMH-Zelle(Aus [4])
Die frei werdenden Elektronen wandern vom - zum + Pol. Zwischen den beiden Polen herrscht
eine Spannung von ca. 1.3 V. Die Reaktionen sind umkehrbar, das heisst, sie können in der
Gegenrichtung ablaufen. Dies ist beim Aufladen der Fall (aus [4]). Wie man erkennen kann, wird
dabei auch Wasserstoff frei, was bei einer hohen Ladegeschwindigkeit dazu führen kann, das die
Legierung das Gas nicht mehr einlagern kann und das Akkugehäuse platzt. Aus diesem Grund
darf die Thermoüberwachung während des Ladens nicht vergessen werden.
21
Kapitel 9
Servomotoren
Als Antrieb setzen wir drei Servomotoren ein, die die gesamte mechanische Arbeit übernehmen.
Dabei setzen wir die übliche Pulsweitensteuerung ein, die sehr bequem ist und es erlaubt, die
Motoren ohne Voltregulator zu steuern. Der Nachteil an Servomotoren ist aber, dass sie sich
üblicherweise um höchstens 360◦ drehen können. Um sie vernünftig einsetzen zu können, muss
man die Servos leichten baulichen Veränderungen unterziehen. Eine gute Anleitung dazu ist in
“Applied Robotics”[1] zu finden.
9.1
Auswahl
An die Motoren werden sehr hohe Anforderungen gestellt. Sie müssen ein hohes Drehmoment
liefern, um die grosse Masse ausreichend schnell beschleunigen zu können. (Auch wenn wir darauf
verzichten, den Laptop auf dem Bot anzubringen, da seine Masse sehr gross ist.) Kugellager sind
sehr wichtig, damit die Motoren, wenn sie für eine kontinuierliche Drehung umgerüstet werden,
die grössere Abnutzung ohne Schaden zu erleiden, verkraften können. Die Stromversorgung muss
mit 6V erfolgen könen, damit die Motoren mit der restlichen Elektronik im selben Kreislauf sein
können. Die Ansteuerung der Motoren muss mit Pulsweitenmodulation (siehe Seite 19) erfolgen,
damit sie auch von unserem Controller gesteuert werden können.
Wir wählten den Onlinehändler Conrad als Lieferant für diese Bauteile. Er bietet die grösste
uns bekannte Auswahl und hat eine Zweigstelle in der Schweiz. Aus den vielen Servomotoren,
die im Angebot sind, erfüllen nur wenige alle Anforderungen. Wir entschieden uns für den Servo
“S-71”(Abbildung B.4), da er ein hohes Drehmoment besitzt und doppelt kugelgelagert ist. Auch
das Metallgetriebe ist ein Pluspunkt.
22
9.2
9.2.1
Aufbau
Mechanik
Das Öffnen des Motorengehäuses ist einfach. Im Gehäuse erkennt man die Steuerelektronik
und das Getriebe. Das Drehmoment des Motors wird über vier Metallzahnräder auf die Achse
umgeleitet. So kann der Motor trotz seiner Grösse ein sehr grosses Drehmoment entwickeln. Die
Elektronik ist kompakt im Gehäuse verstaut (siehe Abbildung 9.1). Im Schema ist ausserdem gut
zu erkennen, wie der Motor seine Position mit einem Feedbackpotentiometer bestimmen kann.
Abbildung 9.1: Servoschema von Mr. Robot [6]
23
9.2.2
Elektronik
Um die Position zu erkennen, verwenden Servomotoren ein Feedbackpotentiometer. Das ist ein
Potentiometer1 , mit dem die Steuerelektronik des Servomotors Rückschlüsse auf die Position der
Achse zieht. Die Signalpulse des Controllers steuern dabei die Position des Motors. Mit abnehmendem Abstand der Achse vom gewünschten Winkel wird auch der Motor verlangsamt. Er steht
still, wenn sie erreicht wird.
9.3
Modifikation
Ein mechanischer Schutz verhinderte das kontinuierliche Drehen. Durch die Entfernung eines
Stiftes hebt man diese Beschränkung auf.
Die Elektronik ist das zweite Hindernis. Entfernt man die Universal Plate, eine Plastikscheibe,
die den Kontakt der Achse zum Potentiometer herstellt, fehlt ihr die Positionsrückmeldung und
die Motoren drehen sich kontinuierlich.
9.4
Kalibrierung
Nach den Umbauarbeiten folgte die Kalibrierung. Da wir das Potentiometer von der Achse
getrennt haben, wird er sich solange drehen, bis die Zielposition mit der, die das Potentiometer
liefert, übereinstimmt. Wir können mit dem Controller die Positionen des Servos in 255 Schritten
bestimmen, der Schritt 128 ist die Mitte. Man kalibriert das Potentiometer exakt auf die Position 128, damit sich die Motoren bei Initialposition nicht drehen und man eine möglichst grosse
Geschwindigkeitspalette zur Auswahl hat (Anders als in [1], wo das Potentiometer durch feste
Wiederstände ersetzt wird). Allfällige Ungenauigkeiten bei diesem Vorgang können aber auch in
der Software korrigiert werden, indem man den Wert für die Nullposition anders wählt.
9.5
Zusammensetzen
Anschliessend wurden die Getriebezahnräder wieder eingesetzt und das Gehäuse verschlossen.
Die Servomotoren drehten sich nun kontinuierlich. Die abschliessende Testserie sollte Fehler beim
Zusammensetzen aufspüren.
1
Regelwiederstand
24
Kapitel 10
Sensoren
Sensoren dienen einem Roboter dazu, eine Rückmeldung über seine Umwelt zu bekommen,
welche ihm ermöglicht, sich in einer Umgebung zurecht zu finden. Sie liefern ihm alle Daten über
die Aussenwelt, aus denen er seine Position und die Umgebung ableiten muss.
10.1
Auswahl
Unser Roboter verwendet, wie der PalmBot, den wir als Vorlage verwenden, drei “Sharp
GP2D12 Infrared Ranger” (Abbildung B.5) als Entfernungssensoren, da sie sehr einfach anzusteuern sind und auch im Preis liegen. Man kann sie auch, im Gegensatz zu Ultraschallsensoren,
direkt an die Sensorpins des Controllers anhängen. Die ebenfalls zur Auswahl stehenden Lasersensoren sind aufgrund des Preises keine Option.
10.2
Funktion
Die Sensoren verwenden zur Messung Infrarotlicht, welches von einer Diode erzeugt und dessen
rückgestrahlter Anteil von einem Photowiderstand gemessen wird. Der interne Signalprozessor
wandelt das gemessene Signal, vermutlich eine Zeit- oder Helligkeitsdifferenz, über einen Voltregulator in das analoge Outputsignal um, welches am Vo -Pin anliegt[3].
25
Kapitel 11
Schaltung
Die einzelnen Bauteile des Roboters sind für sich gesehen nichts besonderes, erst in ihrem Zusammenspiel ergeben sie eine funktionierende Maschine, welche die geforderten Aufgaben erfüllt.
Damit das Zusammenspiel reibungslos gelingt, muss den Eigenheiten jedes Bauteiles Beachtung
geschenkt werden.
Die Verbindung der einzelnen Komponenten ist auch das, was die Hardware unseres Bots vom
kleineren, mechanisch weniger leistungsfähigen Vorbild, dem PPRK[5] auf der Hardwareebene am
meisten unterscheidet. (Abbildung B.1)
Akku
U 6V
SV203
Sensor
Upuls
U 0V
Usignal
Servo
Akku
U 6V
Abbildung 11.1: Schema der Schaltung
26
11.1
Strom
Damit jedes Bauteil seine Funktion erfüllen kann, wird es von den Akkus mit Energie versorgt.
Dabei versorgt ein Akkupack die Servomotoren, ein weiteres ist für die kleineren Verbraucher wie
Sensoren und Controller zuständig. Damit alle Bauteile zusammenspielen können, besitzen sie
einen gemeinsamen Grund, bei uns der Minus-Pol (Abbildung 11.1).
Jeder Servomotor ist am gemeinsamen Grund und am Akku angeschlossen, von wo er seine Energieversorgung erhält. Sie sind die Verbraucher mit dem grössten Strombedarf. Die Sensoren sind
zusammen mit dem Controller parallel mit den zweiten Akku verbunden. Durch diese Trennung
fliessen die grossen Ströme für die Motoren nicht durch die Steuerelektronik, wie es im PPRK[5]
der Fall war, sondern in einem getrennten Stromkreis, was Hitzeprobleme schon im Vorfeld vermeidet.
11.2
Signal
Der Controller, der an einer anderen Spannungsquelle als die Motoren liegt, muss Steuersignale
senden können. Das gelingt trotz der getrennten Stromkreise, da der Steuerchip und der Servo einen gemeinsamen Grund haben. Die Sensoren sind ebenfalls mit einem Pol am Controller
angeschlossen, über den ihre Messdaten als Spannungsdifferenz ausgelesen werden (siehe Figur
11.1).
27
Teil IV
Software
28
Kapitel 12
Software Architektur
12.1
Einführung
Softwareentwicklungsmethoden haben den Anspruch, den Entwicklungsprozess in allen Phasen zu unterstützen. Ein zentrales Element dabei ist die Software Architektur, die verschiedene
Bereiche abdeckt, beginnend bei der Anforderungsanalyse bis zum finalen Objektmodell. Dieser Ansatz der Softwarearchitektur beschränkt sich auf abstrahierte Modelle als Grundlage für
die Implementierung: Komponententeilung, Kommunikation, Datenfluss sowie Sequenzen mit Zustandsübergängen.[7]
In diesem Teil der Dokumentation werden ausschliesslich Bereiche unserer Software Architektur
behandelt. Die Implementation ist gemäss den Konventionen von C#[8] innerhalb des Sourcecodes offen und ausführlich dokumentiert, die Benutzerführung und Administration ist im Manual
beschrieben, das dem Bot beiliegt.
12.2
Anforderungen
Die beste Hardware eines Roboters bringt wenig, wenn sein Gehirn, also die Software, versagt.
Es ist deshalb wichtig, eine einfache aber sichere Lösung zu finden. Da in der Robotik viele
verschiedene Ansätze möglich sind und der Bot auch als Experimentierobjekt konzipiert ist, ist
ausserdem eine hohe Flexibilität und Skalierbarkeit wichtig. Die Architektur muss also modular,
flexibel und möglichst simpel sein.
29
12.3
Environment
12.3.1
Wahl der Umgebung
Unter einer Umgebung versteht man das System, auf dem die Software aufbaut, von dem sie
initialisiert und auch kontrolliert wird. Sie besteht unter anderem aus der benutzen Hardware,
dem Betriebssystem und den benutzten Frameworks und Services. Jede Software ist speziell für
eine Umgebung entwickelt worden, wenn solche Systeme auch manchmal durch Abstraktion eine
Unabhängigkeit vom unterliegenden Subsystem (z.B. Betriebssystem, siehe Java) anstreben.
Die Wahl der Umgebung ist von zentraler Bedeutung in Bezug auf Effizienz, Produktivität
und Potential der zu entwickelnde Applikation. Es wurden verschiedene solche Umgebungen in
Betracht gezogen, einige davon sind die Java RE, ein rohes RT Linux, Windows DNA sowie die
Microsoft .NET Plattform.
Prozess
Die erste Designstudie basierte einfachheitshalber auf Windows DNA und war in VB6.0 umgesetzt. Die Ergebnisse waren viel versprechend, doch ist VB vergleichsweise umständlich und in
den Möglichkeiten begrenzt, sodass wir auf C# und das .NET Framework umstiegen. Als Betriebssystem kam in Folge nur Windows NT in Frage, auf dessen Services wie MSMQ, VSA.NET
und die .NET CLR die Software nun aufsetzt. Die .NET Plattform ist zwar kein Echtzeitsystem
und zu unserer Entwicklungszeit noch in Betaphase, doch sie bietet ein umfassendes, robustes
Framework, und in Kombination mit C# somit eine moderne und produktive Umgebung.
12.4
Komponenten
12.4.1
Modularität
Die geforderte Flexibilität kann durch ein komponentenorientiertes Softwaredesign erreicht werden. Diese Idee wurde in der Designstudie sehr stark gewichtet, wodurch ein Komplex von über
15 eigenständigen Komponenten entstand.
Bei der Umsetzung in C# verlagerte sich die Gewichtung auf die Isolierung logischer Komponenten in Darstellung, Steuerung und Backend, wobei der Bereich Steuerung einerseits mit Plugins
erweitert und andrerseits per Scripts beliebig automatisiert werden kann. Die Software ist in die
Ebene des Frontends und des Backends gegliedert, wobei Ersteres aus einer Hauptapplikation und
30
verschiedenen Modulen, Plugins und Scripts besteht und das Backend die Kommunikation mit
der Hardware koordiniert.
12.4.2
Kommunikation
MessageQueue
Client
Frontend
Server
Log Queue
Backend
Nav Cmd Queue
Nav Stat Queue
Gen In Queue
Gen Out Queue
Abbildung 12.1: Kommunikation der Komponenten
Frontend und Backend sind autonom, müssen aber ständig Informationen abgleichen. Dieses
Problem wird durch Nachrichten mit Steuer- oder Statusinformationen gelöst, die über die systemweite MessageQueue ausgetauscht werden (Abbildung 12.1). Eine nützliche Eigenschaft ist,
dass die MessageQueue auch netzwerkweit agieren kann, wodurch das Backend auch auf einem
anderen Rechner ausgeführt werden kann als das Frontend, zum Beispiel auf einem PDA1 . In
Kombination mit einem WLAN führt das zur interessanten Option, den Bot per Funk zu steuern.
1
mit Windows CE und .NET Unterstützung
31
Kapitel 13
Backend
13.1
Aufgaben
Das Backend ist der Vermittler zwischen dem entscheidenden, steuernden “Bewusstsein” und
dem ausführenden und sensorischen physischen Körper. Auf der einen Seite stehen die Module,
die Bewegungsbefehle senden und dazu ständig Feedbacks erwarten, und auf der anderen Seite
der Controller mit den Motoren und Sensoren.
Das Backend muss also die Befehle der Module abfangen und verwalten, um daraus konkrete
Motorbefehle zu extrahieren und zum Controller zu übermitteln. Gleichzeitig muss es regelmässig
die Daten der Sensoren abfragen und zusammen mit Statusberichten bzgl. Motorbefehle zu den
Modulen zurücksenden.
13.2
Datenfluss
Grundsätzlich fliessen die Informationen im Backend in zwei unabhängigen Kanälen, einer von
den Modulen in Richtung Hardware (Requestchannel), der andere umgekehrt in Richtung Module
(Feedbackchannel).
13.2.1
Phasen
Beiden Kanäle durchlaufen entgegengerichtet vergleichbare Phasen. In Richtung des Requestchannels ist die erste Phase die MessageQueue, welche regelmässig auf neue Nachrichten überprüft
wird. Wird eine Nachricht empfangen, wird sie in der zweiten Phase extrahiert, kategorisiert und
an die dritte Phase weitergeleitet, wo sie verarbeitet und koordiniert wird. Die Verarbeitung
32
umfasst diverse Berechnungen. Bei Bedarf wird in der folgenden Phase eine Nachricht in einem
für die Hardware verständlichen Format generiert. Diese Daten werden unmittelbar an die letzte
Phase übergeben: die geordnete Übermittlung an den Controller über die Schaltkreise des RS232
Bussystems.
Ähnlich verläuft der Fluss im Feedbackchannel. Die Sensoren werden vom Controller abgefragt.
Die Antwortsignale werden extrahiert, analysiert, umgerechnet und zusammengefasst, um dann
in eine Nachricht verpackt und in der MessageQueue in Richtung Module gesendet zu werden.
13.2.2
Koordination
Da die Befehle vom Controller jeweils sofort ausgeführt werden, müssen sie koordiniert gesendet
werden. Dies wird gewährleistet, indem Gruppen von Befehlen erst in einer Queue gesammelt und
in Textbefehle (Tabelle 7.2) konvertiert werden. Dieses Befehlsset wird dann durch einen weiteren
Befehl angestossen und zeitgesteuert an den Controller übergeben.
33
Kapitel 14
Frontend
14.1
Aufgaben
Das Frontend ist die Schnittstelle zwischen dem Menschen und der steuernden Software. Seine
zentrale Aufgabe ist folglich die Interaktion mit dem Benutzer. Neben der Visualisierung der
Softwareprozesse bietet das Fontend dem Benutzer auch die Möglichkeit, in diese einzugreifen.
14.2
Aufbau
Entsprechend der geforderten Modularität besteht das Frontend aus einem Container, der
Grundfunktionalitäten wie Shell und Log zur Verfügung stellt und beliebige Module und Plugins
im Modulbereich laden kann.
Da das Frontend in erster Linie für Notebooks konzipiert ist, die, so die ursprüngliche Idee,
direkt auf dem Roboter stationiert sind, eignet sich eine sonst übliche Maussteuerung für die
Benutzeroberfläche nicht. Wir entschieden uns daher für eine mauslose Benutzerführung mit einer
bildschirmfüllenden Darstellung, die sich im Allgemeinen aus vier Elementen zusammensetzt: in
der linken Spalte der Modulbereich, in der rechten die Shell, das Log, sowie die Statusanzeige.
14.2.1
Shell
Die Shell ist die eigentliche Kommunikationsschnittstelle zum Benutzer. Sie ist einer typischen
Textshell nachempfunden und besteht entsprechend aus der Befehlszeile und einem kleinen Fenster, in welchem die direkten Ausgaben der ausgeführten Befehle ausgegeben werden.
34
Um konsequent den Ideen des objektorientierten Designs zu folgen, basieren die Befehle auf
dem Muster [.]object.method([param1[,param2]*]). Anfangs wird das Objekt gewählt, mit dem
man interagieren möchte, beispielsweise module für das Modulmanagement oder log für das Event
Log. Falls dieses Objekt Teil des Containers ist, muss vor dem Objektnamen ein Punkt gesetzt
werden, ansonsten wird der Befehl an das aktuelle Modul weitergeleitet. Durch einen Punkt
getrennt folgt der Methodenname mit beliebigen Parametern zwischen den Klammern. Beispiel:
.bot.quit() beendet die Robotersoftware, .module.load(script) lädt das Script Modul.
14.2.2
Log
Im Log wird über alle Aktivitäten Protokoll geführt. Dies umfasst alle Befehle an den Controller,
diverse Statusmeldungen sowie allfällige abgefangene Fehler. Per Shell können zu jedem Eintrag
erweiterte Informationen abgefangen werden. Optional kann das Log zur späteren Untersuchung
in ein Textfile geschrieben werden.
14.2.3
Status
Im Statusfenster werden Daten zum aktuellen Zustand gezeigt. Von Bedeutung sind vor allem
die Anzeigen der aktuellen Servobewegungen und Sensormesswerten, die neben der numerischen
Darstellung auch mit Balken graphisch visualisiert werden.
14.2.4
Module
Die Module übernehmen die eigentliche Steuerung des Roboters, indem sie Messages mit Bewegungsanforderungen an das Backend senden und ankommende Sensormesswerte analysieren.
Die Modulansicht ist ein Container, in den die integrierten Module und externen Plugins geladen
werden können. Im Grunde können beliebige neue Module für die Applikation geschrieben werden, einzige Bedingung ist die Implementierung der vorgegebenen PModule Schnittstelle. Schon
zu Beginn stehen folgende Module zur Verfügung: das General Modul, dass allgemeine Aufgaben
wie Kalibrierung, Parametrisierung übernimmt und ein direktes Controller-Terminal anbietet; das
Scripting Modul, das das Erstellen, Kompilieren und Starten von Scripts zur Steuerung des Bots
ermöglicht; das Neuro Modul, mit dem automatisierbare neuronale Netzwerke generiert, trainiert
und propagiert werden können; sowie das Map Modul, mit dem mit Pixelkarten gearbeitet werden
kann.
35
Kapitel 15
Arbeiten mit der Software
Der Benutzerführung jeder Software liegt eine Philosophie zugrunde, die unter anderem die
Art und Weise beinhaltet, mit der eine Problemstellung angegangen wird. Die technische Umsetzung wird im Manual detailliert abgehandelt, während wir hier einige grundsätzliche Aspekte
untersuchen.
15.1
Vorgehensweise bei einfachen Problemstellungen
Mögliche einfache Problemstellungen sind beispielsweise das Fahren um einige Schritte in eine
gegebene Richtung oder das Abfahren eines regelmässigen Sechsecks. Für solche Aufgaben ist das
Script Modul ideal: in kleinen Scripts können beliebig komplexe Bewegungsabläufe konstruiert
werden, die optional auch Sensordaten berücksichtigen.
15.2
Einbindung von Erweiterungen
Das Scripten ist eine schnelle und bequeme Lösung, doch stösst es auch an Grenzen, weswegen
Scripts generell auch beliebige externe .NET oder auch COM Komponenten einbinden können.
Beispielsweise kann eine Komponente geschrieben werden, mit deren Hilfe der Bot via Scripts
auf GPS Navigation zurückgreifen kann. Die Scripts können somit auch als Scharnier verwendet
werden, das verschiedene Komponenten koordiniert und mit dem Backend synchronisiert.
15.3
Erweitern mit Plugins
Bei einigen Problemstellungen macht es Sinn, gleich ein ganzes Plugin zu schreiben. Plugins
haben im Gegensatz zu eingebundenen externen Komponenten eine eigene Oberfläche im Fron36
tend, können direkt vom User per Command Line beeinflusst werden und sind standalone, das
heisst sie können direkt aufgerufen werden, ohne dass dafür Scripts nötig sind.
Plugins können in zwei Kategorien geteilt werden: Erstens die steuernden Plugins, die direkt
mit dem Bot kommunizieren. Ein Beipiel für ein solches Plugin ist das Map Modul, mit dem die
Navigation mit Karten ermöglicht wird. Soll eine Karte aufgezeichnet oder in einer aufgezeichneten
Karte navigiert werden, so wird das Map Modul geladen und in Folge direkt mit ihm gearbeitet.
Anders in der zweiten Kategorie, wo die Plugins ausschliesslich Hilfsobjekte sind, die nicht selber
mit dem Backend kommunizieren. Ein Beispiel für diese Kategorie ist das Neuro Modul, mit dem
neuronale Netzwerke erstellt, propagiert und trainiert werden können, die dann aber per Scripts
eingebunden und gelinkt werden.
Zusammenfassend werden für einfache Problemstellungen Scripts verwendet, deren Funktionalität durch beliebige externe Komponenten erweitert werden kann, während bei Problemstellungen, die auf einer Kommunikation mit dem Benutzer basieren, mit Plugins gearbeitet wird.
37
Teil V
Ausblick
38
Kapitel 16
Weiterführung
Der Bot in seiner jetzigen Version ist keinesfalls ein fertiges Produkt, er ist eher eine Plattform,
auf die man aufbauen kann, die man verändert oder verbessert. In dieser Hinsicht bietet er viele
mögliche Ansetzpunkte für Veränderungen: Die Hardware, also die Elektronik, die Mechanik oder
den Steuercomputer, oder die Software, also das Backend, das Frontend oder auch das Scripting.
16.1
Hardware
Der erste Ansatzpunkt für Hardwareveränderungen ist der Computer, auf dem die Steuersoftware arbeitet: Er kann frei gewählt werden, sofern er über eine RS232 Schnittstelle verfügt.
Neben den üblichen Desktop PCs oder Notebooks erfüllen auch einige Sub-Notebooks und sogar
Handhelds diese Anforderung. Wenn allerdings die Plattform gewechselt wird, muss die Software
angepasst oder neu geschrieben werden.
Auch andere Bauteile können ausgetauscht oder erweitert werden. Für zukünftige Applikationen
werden unter Umständen die drei Sensoren nicht ausreichen, der Controller kann aber noch von
zwei weitere Datenquellen einlesen. Stärkere Motoren könnten es erlauben, einen Computer, zumindest ein leichtes Notebook, direkt auf dem Gehäuse anzubringen. Bessere Sensoren könnten
die Reichweite erweitern. Manipulatorarme könnten eine grössere Interaktion mit der Umwelt
erlauben, indem Gegenstände bewegt werden können.
16.2
Software
Die Software bietet noch viel mehr Möglichkeiten für Veränderungen. Die Einfachste davon
ist, ein neues Script zu schreiben, wodurch selbst komplexere Vorgänge, wie das Ausweichen von
39
Wänden oder das Zeichnen von Schriftzügen, ermöglicht werden können. Das NeuroBox Modul
stellt dabei eine leistungsfähige Umgebung für die Simulation der Denkweise von biologischen
Lebewesen zu verfügung.
Ein weiterer Angriffspunkt sind die Module, die dynamisch ausgetauscht werden können und mit
denen selbst sehr komplexe Verhaltensweisen implementiert werden können. Das MapModul kann
Beispielsweise auf die Verarbeitung von Vektordaten umgebaut werden, oder man schreibt gleich
ein komplett neues Modul wie eines für Fussball1 oder das Finden von Wegen aus einem Labyrinth.
Ein Frontend mit einem anderen User Interface könnte die Steuerung durch Sprach- oder andere
akustische Signale erlauben, oder duch eine Kamera, deren optische Informationen direkt ausgewertet werden, reagiert der Bot auf Gesten.
Auch das komplette Backend kann neu programmiert werden, wie es bei einem einschneidenden
Plattformwechsel erforderlich ist. Dabei kann auf die einfache aber leistungsfähige Befehlssprache
(Tabelle A.2) des Controllers direkt zugegriffen werden.
16.3
Neue Wege
Anstatt den Roboter nur zu erweitern, kann er auch komplett auf ein neues Einsatzgebiet hin
ausgerichtet werden. Als autonomer Staubsauger könnte er Böden reinigen, mit einer Kamera
liesse er sich für die Raumüberwachung einsetzen. Der Phantasie sind nur durch die eigenen
Fähigkeiten oder die Technologie Grenzen gesetzt.
16.4
Hilfe
Für weiterführende Projekte stehen wir gern mit Rat und Tat zur Seite. Auch wenn diese
Maturaarbeit mit der Abgabe von Dokumentation, Hardware und Software abgeschlossen ist,
werden wir noch weiter am Bot arbeiten, damit er noch leistungsfähiger und vielseitiger wird,
und unterstützen gerne andere bei einem ähnlichen Vorhaben. sourceforge.net, eine der grössten
Plattformen für Opensource Projekte, unterstützt auf http://sourceforge.net/projects/xbot auch
die koordinierte Weiterentwicklung unserer Software.
1
Wie auch bei http://www.robocup.org/
40
Teil VI
Anhang
I
Anhang A
Tabellen
Objekt
Anzahl
Preis
Gesamtpreis Fr.
Akkupack (NiMH, 6V)
2
68.35
Fr.
136.70 Fr.
Ladegerät
1 119.95
Fr.
119.95 Fr.
Servo S-71
3
62.95
Fr.
188.85 Fr.
Verpackung
1
2.00
Fr.
2.00 Fr.
IR-Sensor GP2D12
3
13.50
$
68.00 Fr.
Omni Wheels, 3Pack
1
45.00
$
75.60 Fr.
Controller SV-203
1
62.00
$
104.20 Fr.
Versandkosten
1
29.00
$
48.70 Fr.
UPS-Gebüren, Zoll
1
35.30
Fr.
35.30 Fr.
RS-232 Kabel, 3m
1
22.90
Fr.
22.90 Fr.
Alu-Blech, gelocht
1
79.00
Fr.
79.00 Fr.
Alu-Profile, 1m
4
5.00
Fr.
20.00 Fr.
Steckverbindung
1
1.00
Fr.
1.00 Fr.
Schrauben + Muttern
42
0.25 Fr.
10.50 Fr.
Schrauben + Muttern
65
0.25 Fr.
16.25 Fr.
Metallbohrer
1
4.40
Fr.
Gesamt
4.40 Fr.
933.35 Fr.
Tabelle A.1: Das endgültige Budget
II
Befehl
Parameter (n)
Beschreibung
BDn
0 bis 255
Board Auswahl
SVn
1 bis 8
Servo Auswahl
Mn
0 bis 255
Zu einer absoluten Position bewegen
In
-128 bis 127
Zu einer relativen Position bewegen
Dn
1 bis 65535
Verzögerung (ms)
PSn
1 bis 8
Setzt ein einziges Pin von Servoport n
PCn
1 bis 8
Löscht ein einziges Pin von Servoport n
PTn
1 bis 8
Ändert ein einziges Pin von Servoport n
ADn
1 bis 5
Lies A/D Wert, das board gibt einen Wert zwischen 0 und
255 gefolgt von ASCII 13 zurück, repräsentiert einen Wert
zwischen 0V und 5V.
SOn
0 bis 255
Gibt ein Bit über den SPI Port aus
SI
-
Liest ein Bit über den SPI Port ein
WRm n
m = 0 bis 255 Schreibe ins interne RAM, m ist Speicherposition, n ist der
n = 0 bis 255
zu schreibende Wert
RRm
m = 0 bis 255
Lies den Inhalt des internen RAM, m ist die Speicherposition
WEm n
m = 0 bis 8190 Schreibe ins externe EEPROM, m ist die Speicherposition,
n = 0 bis 255
REm
n ist der zu schreibende Wert
m = 0 bis 8190 Lies den Inhalt des externen EEPROM, m ist die Speicherposition
?
-
Hilfe, gibt Kurzfassung der Kommandoliste zurück
V?
-
Gibt die Firmware Version zurück.
Tabelle A.2: Die Befehlsliste des SV-203 (Aus [2])
III
Anhang B
Abbildungen
Abbildung B.1: Übersicht der Elektronik
IV
Abbildung B.2: Der SV203 Controller von Pontech
Abbildung B.3: Ein NiMH Akkupack mit fünf Zellen
V
Abbildung B.4: Ein Servomotor mit angeschlossenem Omniwheel
Abbildung B.5: Ein GP2D12 IR Entfernungsmesser
VI
Anhang C
Glossar
Framework Ein Framework ist eine Softwareumgebung, die Programmen Grundfunktionen des
Betriebssystems, wie Filesystem- oder Memorymenagement, oder höhere Funktionen, wie
das Zeichnen von 3D Bildern oder das Interagieren mit dem User, zu verfügung stellt.
Java RE JRE bedeutet Java Runtime Environment, SUN’s Java Laufzeitumgebung. Java Applikationen werden in Zwischencode kompiliert, der dann von der JRE interpretiert und
schrittweise ausgeführt wird. Dieses auch als JIT bekannte Prinzip ermöglicht eine Unabhängigkeit von Betriebssystem und Hardware und erlaubt dank Sandboxing einen individuellen Sicherheitskontext.
.NET CLR Die .NET Common Language Runtime ist das Pendant zur Java RE in der .NET
Welt. Weitere Informationen zu .NET:
http://www.heise.de/ix/artikel/2001/12/122/
http://msdn.microsoft.com/net/
http://www.microsoft.com/net/
Neuronales Netzwerk Neuronale Netzwerke (NN), oft auch als künstliche neuronale Netzwerke
(KNN) oder Artificial Neural Networks (ANN) bezeichnet, sind informationsverarbeitende
Systeme, die aus einer grossen Anzahl einfacher Einheiten (Zellen, Neuronen) bestehen,
die sich Informationen in Form der Aktivierung der Zellen über gerichtete Verbindungen
zusenden.[10]
Omnidirektional Bedeutet “in alle Richtungen gerichtet”, Omni = alle, direktional = gerichtet.
Oft auch “Ungerichtet”
Reguläre Ausdrücke Regular Expressions sind ein mächtiges, flexibles und effizientes MitVII
tel um Texte zu parsen und bearbeiten.[9] Für das Parsen der Befehle mit dem Muster
[.]object.method([param1[,param2]*]) haben wir beispielsweise folgenden regulären Ausdruck
entwickelt:
^(\w+)\.(\w+)\((([^,]+)(,([^,]+))*)?\)$.
Roboter Bedeutet ursprünglich Sklave, heute ist damit aber vor allem eine unabhängig von
menschlicher Steuerung agierende Maschine gemeint, die verschiedene Aufgaben erledigen
kann. Abkürzung: Bot.
RS232 RS-232 ist eine simple, universelle aber etwas in die Jahre gekommene serielle Schnittstelle, deren Bandbreite auf 256kbps und Länge auf 15m beschränkt ist. RS-232 ist neben
der parallelen die einzige Schnittstelle, auf die mit NT ohne spezielle Treiber direkt per
FileStream (“COM1”) zugegriffen werden kann. http://www.arcelect.com/rs232.htm bietet
weiterführende Informationen.
Trial and Error Prinzip Eine einfache Vorgehensweise zur Lösung von Problemen: Es werden
alle Möglichkeiten getestet, bis eine funktionierende gefunden wird oder oder keine weiteren
Möglichkeiten mehr vorhanden sind. Das Verfahren wird im Deutschen auch als “Versuch
und Irrtum” bezeichnet.
VSA.NET VisualStudio for Applications.NET ist ein Framework für die interne Automation
von .NET Applikationen.
Windows DNA Windows DNA steht für Distributed interNet Applications Architecture und
bietet eine auf COM+ (Component Objetc Model) basierende proprietäre Infrastruktur für
verteilte n-Tier Lösungen. Eine Alternative zu COM+ ist CORBA, auf dem zum Beispiel
Bonobo, eine Linux Komponentenschnittstelle, aufbaut.
WLAN Ein WLAN (Wireless Local Area Network) ist ein LAN, das anderst als Ethernet nicht
über Kabel, sondern per Funk kommuniziert. Der heute aktuelle Standard IEEE 802.11b
arbeitet mit einer Geschwindigkeit von bis zu 11Mbps und hat eine Reichweite von etwa
50m.
http://www.apple.com/chde/airport/specs.html
http://www.csdmag.com/main/2000/06/0006stand.htm
VIII
Literaturverzeichnis
[1] Edwin Wise, Applied Robotics, Prompt Publications, 1999, ISBN 0-7906-1184-8.
[2] SV203 Servo Motor Controller Board: User’s Manual Pontec, 1998.
http://www.pontech.com/products/sv200/sv203 v.1.20 webmanual.pdf
[3] GP2D12 Manual, Sharp.
http://www.sharp.co.jp/ecg/opto/products/pdf/optical sd/optical sd/gp2d12.pdf
[4] Ivo Steiner, Chemieblätterset: “Batterien und Akkumulatoren”, 2000/2001.
[5] Palm Robot Kit
http://www.cs.cmu.edu/ pprk/
http://www.acroname.com/robotics/info/PPRK/PPRK.html
[6] Mr. Robot, Robots & Microcontrollers for the Future,
http://www.mrrobot.com/
[7] Ruth Breu, Objektorientierter Softwareentwurf, Springer Verlag, 2001, ISBN 3-540-41286-7
[8] Eric Gunnerson, C#, Die neue Sprache für Microsofts .NET Plattform, Galileo Press, 2001,
ISBN 1-893115-86-0
[9] Jeffred E.F. Friedl, Reguläre Ausdrücke, O’Reilly Verlag, 1998, ISBN 3-930673-62-2
[10] Andreas Zell, Simulation neuronaler Netzwerke, R. Oldenbourg Verlag, 1994, ISBN 3-48624350-0
IX
Index
Mechanik, 17
Akkumulator, 20
Funktionsweise, 21
Karten, 8
Anforderungen, 29
Neural Map, 9
Architektur, 29
Pixelmap, 8
Backend, 32
Speicherung, 8
Aufgaben, 32
Vektormap, 9
Datenfluss, 32
Kommunikation, 31
Koordination, 33
Komponenten, 30
Budget, 4
Koordination
Liste, II
Backend, 33
Controller, 18
Maps, 11
Befehlsliste, III
Mechanik, 17
Modularität, 30
Datenfluss
Backend, 32
Navigation
Dokumentation, 2
Wegberechnung, 11
Einsatzgebiete, 40
Neural Map, 9
Elektronik, 26
OmniWheel, 7
Feedbackpotentiometer, 24
Pixelmap, 8
Fortbewegung, 6
Platform, 30
Frontend, 34
Pulsweitenmodulation, 19
Aufgaben, 34
Punktreduktion, 9
Strukturierung, 34
Schaltung, 26
Gehäuse, 16
Sensor
Funktion, 25
Hardware
Anpassung, 39
Sensoren, 25
Gehäuse, 16
Servo
X
Modifikation, 24
Servomotoren, 22
Schema, 23
Software
Anforderungen, 29
Anpassung, 39
Architektur, 29
Backend, 32
Designstudie, 30
Einführung, 29
Frontend, 34
Kommunikation, 31
Komponenten, 30
Modularität, 30
Umgebung, 30
Weiterentwicklung, 40
Strategie
Wegberechnung, 11
Stromversorgung, 20
Vektormap, 9
Wegberechnung, 11
Wegpunktberechnung
Ausbreitungsanalyse, 13
Grenzverfolgung, 11
XI