Roboterpraktikum: EyeBot

Gerd Tröger (troeger@informatik.uni-leipzig.de)

Aufgabe

Inbetriebnahme des EyeBot und Evaluation seiner grundlegenden Moeglichkeiten, sowie Bereitstellung einer einfachen Funktion zur Ortung eines roten Balles mit Hilfe der Kamera des Roboters.

Dokumentation

Inhalt

1.Inbetriebnahme
1.1.Netzteilbetrieb
2.Bewegungen
2.1.Einfache Bewegungen
2.2.Bewegungsablaeufe
2.3.Stoss
3.Serielle Schnittstelle
3.1.Uebertragung von Daten zum Host
4.Kamera
4.1.Uebertragung von Bildern zum Host
4.2.Bildauswertung, Ballortung
5.Naechste Schritte

1. Inbetriebnahme

Die Inbetriebnahme des Eyebot gestaltet sich recht einfach: man benoetigt lediglich den Roboter und ein Set Batterien bzw. Akkus. Damit lassen sich bereits die im ROM und Flash vorhandenen Demos ausfuehren, jedoch macht sich relativ schnell der derzeit groesste Schwachpunkt des vorhandenen Roboters bemerkbar: die recht stoeranfaellige Mechanik. Nach Auswertung verschiedener Loesungsvorschlaege erscheint es am sinnvollsten, die beiden Teile der Beine, an denen die Motoren befestigt sind, durch ein einziges stabiles Winkelblech o.ae. zu ersetzen.

Zum laden eigener Programme siehe Abschnitt 3.

1.1. Netzteilbetrieb

Ein weiteres Problem des Roboters, dass jedoch bei den meisten autonomen Robotern gemeinsam auftritt, ist die Lebensdauer der mobilen Stromversorgung. Speziell die Motoren des Eyebot sind ziemlich starke Stromverbraucher. Es ergeben sich zwei Moeglichkeiten, die Betriebszeiten des Roboters auf experimentierfreundliche Zeiten anzuheben:

Abschalten der Motoren
entweder durch Abziehen der Steckverbinder oder indem man den Roboter auf eine kleine Kiste auf den Bauch legt, so dass die Beine nicht belastet sind
Netzteilbetrieb
es existiert zwar eigentlich auf der Platine eine Anschlussmoeglichkeit fuer eine stationaere Stromversorgung, allerdings kann man auch einfach den Steckverbinder fuer das Batterieset an ein Netzteil anschliessen

Dabei ist natuerlich auf die Wahl eines geeigneten Netzteils zu achten, insbesondere da die Elektronik des Roboters relativ empfindlich auf die vorhandene Spannung reagiert. Empfehlenswert ist ein stabilisiertes, frei regelbares Netzteil, dass ich Bereich von 6-9 Volt Gleichspannung wenigstens 2 Ampere Strom halten kann, wobei die Motoren koennen durchaus Stromspitzen darueber hinaus erzeugen koennen. Der Ruheverbrauch (hochgesetzt) liegt zwischen 0.5 und 0.8 Ampere. Zur Auswahl der richtigen Spannung kann man sich an der Batterie-Ladestatus-Anzeige orientieren.

2. Bewegungen

Die Bewegungsmoeglichkeiten des Roboters ergeben sich natuerlich aus der vorhandenen (bzw. nicht vorhandenen) Mechanik. So sind die sechs Beine zwar einzeln drehbar und hoehenverstellbar, aber das Kniegelenk laesst sich nicht ansteuern. Damit lassen sich Insektenbewegungen ueber ebene Flaechen eingeschraenkt nachvollziehen.

Die Beispiele und Quelltextverweise in diesem Abschnitt beziehen sich auf walker6legs.

2.1. Einfache Bewegungen

Wie oben erwaehnt laesst sich jedes Bein einzeln drehen sowie heben/senken. Man kann den aktuellen Zustand jedes Bein ausserdem auslesen. Tut man dies aus eigenen Programmen heraus, empfiehlt es sich, fuer jedes Bein zuerst einmal eine Normallage zu justieren, damit spaeter koordinierte Bewegungen mehrerer Beine gleichmaessiger (und damit zuverlaessiger) funktionieren. Ausgehend von den vorhandenen Beispielprogrammen genuegt dazu eine Modifikation der #defines KorrXxYyFB [Xx = Fr/Mi/Re (Front, Middle, Rear) Yy = Le/Ri (Left, Right)].

2.2. Bewegungsablaeufe

Bewegungsablaeufe enstehen aus koordinierten Bewegungen der Beine, aehnlich den Insektenbewegungen. Fuer einen stabilen Stand benoetigt der Roboter genau drei Beine auf dem Boden, die restlichen drei koennen in der Zwischenzeit an eine neue Position bewegt werden. Kontinuierliche Bewegungen ergeben sich aus der Wiederholung einer Abfolge von Einzelschritten, in denen jeweils nacheinander alle Beine ein Stueck bewegt werden. Beispiele fuer die Bewegungen finden sich in den Demoprogrammen in layer 3, siehe die Definition von oneStep[][][].

2.3. Stoss

Eine Teilaufgabe meines Praktikums bestand daraus, eine stossende Bewegung zu programmieren, um z.B. einen Ball zu bewegen. Das dazugehoerige Programm ist von walker6legs abgeleitet, siehe Stoss-Programm. Der zugrundeliegende Bewegungsablauf besteht aus einer nicht wiederholten Abfolge von neun Einzelschritten:

Die programmierte Umsetzung befindet sich in stoss.c in den Konstanten kickStep, kickHiStep (wie zuvor, nur mit hoeherliegendem Roboter) sowie entsprechenden Aufrufen von make_n_stepsC().

3. Serielle Schnittstelle

Der EyeBot verfuegt unter anderem ueber eine klassische serielle Schnittstelle (RS232), die zum Upload eigener Programme verwendet werden kann. Dazu verbindet man den EyeBot mittels des vorhandenen 9-poligen seriellen Kabels mit einer der seriellen Schnittstellen des PCs, stellt sowohl im EyeBot als auch PC-seitig die Schnittstellenparameter auf gemeinesame Werte (38400 bps, 8N1, hardware flow control). Der Upload erfolgt dann einfach durch kopieren des .hex-files, das bei der Compilierung erzeugt wurde, an die entsprechende Schnittstelle.

Zur Vereinfachung steht das Programm dter von Thomas Pantzer (pantec@informatik.uni-leipzig.de) zur Verfuegung. Die vorhandene, compilierte Version benutzt /dev/ttyb (ggf. einen link erzeugen) mit oben genannten Parametern. Nach dem Aufruf startet man die Uebertragung mit "/load datei.hex".

3.1. Uebertragung von Daten zum Host

Bekanntermassen sind serielle Schnittstellen fuer bidirektionale Uebertragungen ausgelegt, und da der EyeBot lediglich ueber ein relativ kleines Mono-LC-Display verfuegt ist es natuerlich interessant, Daten auch in umgekehrter Richtung, also zum PC, zu uebertragen - sei es zum Debugging der eigenen Applikation, zur Steuerung des Roboters ueber den PC (wie bei den Kheperas), oder wie weiter unten dargestellt zur Uebertragung von Kamerabildern (Abschnitt 4.1.).

Zum Test dieser Moeglichkeiten habe ich ein weiteres Programm geschrieben, siehe Serial. Es enthaelt unter anderem Funktionen zum Uebertragen der aktuellen Zeit des Roboters an die serielle Schnittstelle und zum Ruecksenden (Echo) aller empfangenen Zeichen, demonstriert also sowohl das Senden, wie auch das Empfangen. Hoehere Funktionen sind daraus leicht ableitbar.

4. Kamera

Der vorhandene EyeBot verfuegt auch ueber eine kleine Farb-Kamera mit 80 mal 60 Pixel Aufloesung. (Es sind wohl auch Versionen ohne Kamera oder mit einer Graustufen-Kamera erhaeltlich.) Im ROM ist ein Beispielprogramm enthalten, dass auch diverse Filtermoeglichkeiten fuer die Kamera bietet.

Bei Verwendung der Kamera sollte man unbedingt darauf achten, dass sich die Helligkeit der Bilder nach und nach aendert, insbesondere waehrend den ersten Bildern nach einer groesseren aeusseren Helligkeitsaenderung.

4.1. Uebertragung von Bildern zum Host

Damit man die Kamera in eigenen Programmen verwenden kann, muss man sich allerdings erst einmal sprichwoertlich ein Bild von ihr machen. Dazu kommt eine weitere Funktion von Serial zum Einsatz: Uebertragung des (ungefilterten) Kamerabilds ueber die serielle Schnittstelle zum PC. Zum Empfang habe ich noch ein Hilfsprogramm geschrieben, imgreceive.cc. Vor dessen Benutzung muss die serielle Schnittstelle bereits auf die richtigen Parameter eingestellt worden sein (etwa durch einen vorherigen Aufruf von dter). imgreceive benutzt in der Voreinstellung ebenfalls /dev/ttyb als Schnittstelle und gibt die Bilddaten auf der Standardausgabe aus. Die Syntax lautet also z.B.: "imgreceive > img000.bmp" (die Bilddaten werden bereits im Bitmap-Format uebertragen). Beispielbilder (img0.*.bmp) befinden sich ebenfalls im Verzeichnis von Serial. Verglichen mit einfachen Webcams sind die Bilder natuerlich sehr schlecht, aber andererseits fuer die Verhaeltnisse der anderen vorhandenen Roboter geradezu luxurioes.

4.2. Bildauswertung, Ballortung

Mit diesen Hilfsmitteln ist es nun moeglich, an der Auswertung der Kamerabilder zu gehen. Das Ergebnis findet sich im dritten Programm, locateRed. Implementiert sind unter anderem folgende Funktionen:

5. Naechste Schritte

Angedacht war als naechstes, den EyeBot auf den roten Ball auszurichten und bei Bewegung ausgerichtet zu lassen. Mit den vorhandenen Funktionen zur Lokalisierung und zum Drehen des Roboters (siehe walker6legs bzw. Stoss, turnRight und turnLeft) sollte dies eigentlich problemlos moeglich sein. Leider hat die defekte Mechanik dies bis jetzt nicht erlaubt.

Leipzig, den 28. July 2000

Kompletten Pfad downloaden: als Zip-File