Diese unten abgebildeten Spielzeugroboter habe ich als Restposten auf einer Messe gekauft. Es werden sehr schön verschiedene Bewegungs- und Programmierkonzepte mit einfachsten Mittel demonstriert.
Der Spider bewegt sich mit 6 Beinen, die mit Hilfe einer einfachen Mechanik und zwei Motoren synchronisiert werden. In der Glaskuppel kann man die Infrarotdiode sehen, deren Reflektionen an festen Gegenständen von einer einfachen Auswerteschaltung zu einem ( immer gleichen ) Ausweichmanöver führt. Der Roboter stößt somit kaum an und läuft eine erstaunlich lange Zeit bevor der einfache Mechanismus dann doch mal das Hinderniss nicht erkennt. Speziell schmale hohe Gegenstände oder nicht reflektierende Oberflächen machen ihm zu schaffen.
-----------------------------------------------------------------------------------------------
Dieser Robot wird mit Hilfe eines Klatschschalters gesteuert. Es laufen dann die Stufen vorwärtsfahren, anhalten und drehen nacheinander ab. Mit etwas Geschick und schnellen Klatschkommandos läßt sich dieser Robot durchaus per Hand fernsteuern. Das besondere an diesem Roboter das vorhandensein nur eines Motors. Die Umschaltung (beide Räder vorwärts oder gegensinnig) wird mit Hilfe einer ausgeklügelten Mechanik erreicht, die von der Drehrichtung des Motors abhängig ist.
-----------------------------------------------------------------------------------------------
Dieser Robot wird von einer Art Diskette gesteuert. Es befinden sich zwei Spuren auf der Diskette, für jeden Antriebsmotor eine. Bei den geschwärzten Stelle wird der entsprechende Motor angesteuert, bei den weißen Stelle bleib er aus. Jedes Rad hat seinen eigenen Motor, ebenso der Anrieb für die Diskette. Das Programm läuft zyklisch durch.
Hier ist meine erste eigene Konstruktion :
Eine kleine Wanze
Er hat 3 Modellbau-Servos als Antrieb und eine sogenannte BASIC-Briefmarke als Gehirn. In der ersten Aufnahme sieht man die beiden Servos, die die vorderen und hinteren Beinpaare bewegen. Die rechten und die linken Beine sind jeweils über eine Stange gekoppelt. Das dritte Servo dient zum Antrieb der Wippe, die man auf dem nächsten Bild sieht. Die Wippe bildet das mittlere Beinpaar, das in Ruhestellung gerade nicht den Boden erreicht. Durch Aussteuern des dritten Servos kann der Robot auf der einen bzw. anderen Seite angehoben werden, um die dazugehörigen vorderen und hinteren Beine in ihre Grundstellung bringen zu können. Die eigentliche Bewegung wird dann mit den auf dem Boden stehenden Beinen durchgeführt. Der Robot kann mit Hilfe dieser Steuerung vorwärts und rückwärts laufen bzw. fast auf der Stelle drehen. Das Modell ist aus Sperrholz gefertigt und hat keine z.Z. keine weiteren Sensoren zur Umgebungserkennung. Ich werde das Modell mit einer weiteren BASIC-Briefmarke ausstatten, um ein intelligentes Verhalten implementieren zu können. Die vorhandene Steuerung ist mit der Kontrolle der Füße schon ziemlich ausgelastet. Hier ein Bild auf das dritte
Servo bzw. ein paar Details :
Hier folgt das Beispielprogramm mit dessen Hilfe alle Bewegungen demonstriert werden :
'
Programm zur Steuerung der Wanze'
symbol mitte = b1 'Register für Mitte-Servo
symbol rechts = b3 'Register für Rechts-Servo
symbol links = b4 'Register für Links-Servo
symbol Vrechts = b5 'Register Geschwindigkeit rechts
symbol Vlinks = b6 'Register Geschwindigkeit links
rechts = 145 'Wert für neutrale Position
links = 145 ' entspr. ca. 1 ms
main:
vrechts = 25 'volle Fahrt voraus rechts
vlinks = 25 'volle Fahrt voraus links
for b2=1 to 10 '10 Schritte mit dieser Einstellung
gosub go
next
vrechts = -25 'volle Fahrt zurück
vlinks = -25
for b2=1 to 10 ' 10 Schritte weit
gosub go
next
vrechts = -25 ' Diese Einstellun dreht nach rechts
vlinks = 25
for b2=1 to 5 ' 5 Schritte lang
gosub go
next
vrechts = 25 ' Diese Einstellung dreht nach links
vlinks = -25
for b2= 1 to 5 ' 5 Schritte lang
gosub go
next
goto main ' wieder von vorn
go:
mitte = 120 ' Mittleres Bein rechts anheben
for b0=0 to 10 ' 10 Perioden ca. 200 ms lang ausgeben
gosub move
next
rechts = 145 + vrechts ' mit angehobener Mitte die anderen Beine
links = 145 + vlinks ' verstellen
for b0=0 to 10 ' wieder 200ms Zeit geben
gosub move
next
mitte = 165 ' mittleres Bein links anheben
for b0=0 to 10 ' 200 ms positionieren
gosub move
next
rechts = 145 - vrechts ' mit angehobener Mitte die anderen Beine
links = 145 - vrechts ' verstellen
for b0=0 to 10 ' 200 ms positionieren
gosub move
next
return
move:
pulsout 2,mitte ' auf Pin2 sitzt das Mitten-Servo
pulsout 1,rechts ' auf Pin1 sitzt das rechte Servo
pulsout 0,links ' auf Pin0 sitzt das linke Servo
pause 20 ' 20 ms Impulspause
return
Um das Programm vollständig verstehen zu können, folgen noch ein paar Angaben:
Modellbau-Servos werden impulsweitenmoduliert angesteuert, wobei eine Impulsdauer von 1,5 ms der Mittelstellung des Servos entspricht. Gibt man 1 ms bzw. 2 ms aus läuft das Servo in seine Endstellungen. Zwischenwerte sind natürlich erlaubt. Die Impulspause beträgt normalerweise 20 ms, was den gängigen Fernsteuerungen entspricht. Zum Einsatz kamen alte Servos aus einem meiner Heli's, wo sie nach ca. 50 Flugstunden wegen zunehmender Parkinsonscher Krankheit ( Servozitteren ) in den Vorruhestand gegangen waren. Eine Heilung von dieser Krankheit ist bei Servos zwar technisch möglich, lohnt sich aber bei billigen Exemplaren nicht (grausam). Es handelt sich dabei um Diamond DXL-Servos, die ich wegen der kurzen Lebensdauer generell nicht mehr im Hubschrauber einsetze. Das mittlere Servo ist ein uraltes ROBBE S12, daß noch irgendwo in Keller herum lag.
Wem der Selbstbau einer solchen Mechanik zu aufwendig erscheint, der kann bei der Firma
RoboStore in den USA einen vergleichbaren Bausatz aus GfK erwerben. Dort findet man auch noch andere interressante Modelle, die zu Nachbau und Weiterentwicklung einladen.
Damit der Roboter auch weiß, wann er auf ein Hindernis trifft und auf welcher Seite es sich befindet, müssen Fühler her. Sie werden einfach aus zwei Kupferösen und einem Stück Federstahl hergestellt. Auf der folgenden Abbildung kann man diese Erweiterung sehr gut sehen :
Das Programm ist jetzt so erweitert worden, daß bei einer Kollisionmeldung der Roboter zuerst ein paar Schritte rückwärts geht und dann zur jeweils anderen Seite wendet.
' Programm zur Steuerung der Wanze mit Kollisionserkennung
'
output 0
output 1
output 2
output 7
input 3
input 4
symbol mitte = b1 'Register fuer Mitte-Servo
symbol rechts = b3 'Register fuer Rechts-Servo
symbol links = b4 'Register fuer Links-Servo
symbol Vrechts = b5 'Register Geschwindigkeit rechts
symbol Vlinks = b6 'Register Geschwindigkeit links
rechts = 145 'Wert fuer neutrale Position
links = 145 ' entspr. ca. 1,5 ms
main:
vrechts = -25 'volle Fahrt voraus rechts
vlinks = -20 'volle Fahrt voraus links
gosub go
if bit0 = 1 then auswr
if bit1 = 1 then auswl
goto main ' wieder von vorn
auswr:
gosub zurueck
vrechts = -25
vlinks = 20
for b2=1 to 6
gosub go
next
bit0 = 0
goto main
auswl:
gosub zurueck
vrechts = 25
vlinks = -20
for b2=1 to 6
gosub go
next
bit1 = 0
goto main
zurueck:
sound 7,(110,20,0,5,120,20)
vrechts = 25 ' 2 Schritt zurueck
vlinks = 20
for b2=1 to 3
gosub go
next
return
go:
mitte = 120 ' Mittleres Bein rechts anheben
for b7=0 to 10 ' 10 Perioden ca. 200 ms lang ausgeben
gosub move
next
rechts = 145 + vrechts ' mit angehobener Mitte die anderen Beine
links = 145 + vlinks ' verstellen
for b7=0 to 10 ' wieder 200ms Zeit geben
gosub move
next
mitte = 165 ' mittleres Bein links anheben
for b7=0 to 10 ' 200 ms positionieren
gosub move
next
rechts = 145 - vrechts ' mit angehobener Mitte die anderen Beine
links = 145 - vrechts ' verstellen
for b7=0 to 10 ' 200 ms positionieren
gosub move
next
return
move:
pulsout 2,mitte ' auf Pin2 sitzt das Mitten-Servo
pulsout 1,rechts ' auf Pin1 sitzt das rechte Servo
pulsout 0,links ' auf Pin0 sitzt das linke Servo
if pin4=0 then label1
if pin3=0 then label2
goto ende
label1:
bit0 = 1
goto ende
label2:
bit1 = 1
ende:
pause 20 ' 20 ms Impulspause
return
Mit Hilfe dieser Programmierung läuft er schon recht lange in der Wohnung herum ohne sich festzufahren (laufen).
-----------------------------------------------------------------------------------------------