MIKROPROZESSOREN
Programmieren mit
der BASIC-Stamp 2
Teil 8: (Ende): Der photophobische Roboter
Von Dennis Clark
Phase 3: Der photophobische
Roboter und die subsumtive
0 1
Programmierung Read Left Read Right
Photocell Photocell
Wir wollen nun überlegen, ob es für den Roboter
eine anspruchsvollere Tätigkeit gibt als nur plan-
IDur=0
und ziellos im Raum umherzufahren. Ein Schritt in
Yes
diese Richtung ist das Verhalten ähnlich einer 4
2
Decrement
Grille, die das Licht scheut und danach trachtet,
Duration Is Left
(IDur) Brighter?
sich in einer dunklen Ecke zu verkriechen. Dieses
IDur>0
Verhalten bezeichnen wir als photophobisch , was
3
ungefähr so viel wie lichtscheu bedeutet. Der No
Is Right
Fluchtreflex gehört zum Selbsterhaltungs-Reper-
Brighter?
Yes
toire vieler Lebewesen. Für die Selbsterhaltung des
Roboters ist er zwar nicht unbedingt notwendig,
No
990050 - 8 - 11
doch wir können auch ihm zu diesem Urverhalten
verhelfen. Dabei liefern die Lichtsensoren, die wir
schon bei früheren Experimenten installiert haben, Bild 1. Vorschlag für die State Machine des photophobischen Verhaltens.
die vom Programm benötigten Informationen. Zum
Abfragen der Sensor-Informationen verwenden wir
den Basic-Stamp-2-Befehl rctime. Das Lesen der
Sensor-Informationen dauert um so länger, je weni- vorangegangenen Experimente. Hier gibt Setze lDur = 30
ger Licht detektiert wird. Da das Lesen eines ein- es nicht nur zwei Zustände, sondern fünf: Setze lstate = 4 (Dekrementie-
zelnen Lichtsensors zu viel Zeit in Anspruch ren)
nimmt, wenden wir einen kleinen Trick an. Unter- State 0 Anderenfalls
schieden werden sollen lediglich zwei Fälle: Es soll Lese linken Lichtsensor Setze lstate = 3
erkannt werden, ob der rechte oder der linke Sen- Setze state = 1 State 3
sor heller beleuchtet ist. Während seines Weges State 1 Addiere die Differenz zum Mess-
durch den Raum blickt der Roboter sozusagen stän- Lese rechten Lichtsensor wert des rechten Sensors
dig abwechselnd nach rechts und nach links. An Multipliziere den Wert mit 1,5, da Wenn Rechts heller ist als Links
Hand der gewonnenen Informationen entscheidet er der rechte Sensor bei gleicher Setze lDir = turn left (tl)
sich, den Weg in die Richtung fortzusetzen, in die Beleuchtungsstärke etwas niedrigere Setze lDur = 30
der schwächer beleuchtete Lichtsensor zeigt. Diese Werte als der linke liefert Setze lstate = 4
Richtung muss er eine bestimmte Zeit lang beibe- Setze state = 2 Anderenfalls
halten, denn sonst kann es passieren, dass er kaum Setze lstate = 0 (keine Aktion,
von der Stelle kommt. Ein ruckweise nur wenige State 2 beide Seiten ungefähr gleich)
Zentimeter vor- und rückwärts fahrender Roboter Addiere die Differenz zum Messwert
würde sicher nicht dem Verhalten einer Grille ent- des linken Sensors State 4
sprechen. Das photophobische Verhalten ist kom- Wenn Links heller ist als Rechts Dekrementiere lDur, lDur = lDur - 1
plexer als die einfacheren Verhaltensmuster der Setze lDir = turn right (tr) Wenn lDur = 0
64 Elektor 4/2000
MIKROPROZESSOREN
zierte Programm-Verzweigung zu einem anderen
Programmteil zur Folge; hier ist der Index der
Dark Seeking
Photocells
Behaviour
betreffende State.
Übernehmen Sie die Variablen- und Konstantenli-
ste auf der linken Seite in Ihr Programm (an den
Wander
Motors Anfang), und hängen Sie die Routine lightlook an
Behaviour
das Ende Ihres Programms an! Die Hauptroutine
990050 - 8 - 12
main kann dann zum Beispiel wie folgt aussehen:
Setup for running
Bild 2. Wander- und Seek-Aktionen, dargestellt mit den Termen der subsumtiven
wstate = 0 Ausgangswert Wander-State
Programmierung.
lstate = 0 Ausgangswert Photophobie-State
main:
Setze lstate = 0 (Aktion been- pensiert. Der Faktor hängt natürlich von gosub wander
det, beginne von vorn) den real verwendeten Sensoren ab, er gosub lightlook
Anderenfalls muss durch Messungen ermittelt werden. gosub act
keine Aktion, Wiederholung von Die etwas komplexere State Machine des goto main
State 4 für weiteres Dekremen- photophobischen Roboters deutet schon
tieren, Aktion noch nicht been- darauf hin, dass auch das Programm Nach dem Programmstart setzt die Routine wan-
det komplexer ist als bisher gewohnt. Die der die Variable drive auf eine zufällige Bewegungs-
Programmierung wird dadurch jedoch richtung. Anschließend ändert die von wander völ-
Bild 1 zeigt die State Machine (vgl. nicht wesentlich schwieriger. Wenn die lig unabhängige Routine lightlook die Variable
Teil 6), die Grundlage des photo- Einzelschritte in der Form definiert wur- drive, sobald sie eine fluchtträchtige Dunkelzone
phobischen Verhaltens unseres Roboters den, die wir oben für den photophobi- erkennt. Zuletzt setzt die Routine act die Variable
ist. Diese State Machine wurde erst schen Roboter gewählt haben, können drive auf einen Wert, der die Aktivierung und Dreh-
erstellt, als alle notwendigen Aktionen wir ein Programm unmittelbar an Hand richtung der Antriebsmotoren in der gewünschten
definiert und in logischer Abfolge organi- der dort stehenden State-Deskriptionen Weise bestimmt. Die genauere Betrachtung ergibt,
siert waren. Da sich Variablenwerte schreiben. Die Einzelschritt-Beschreibung dass lightlook eine höhere Priorität als wander
ändern und Daten zwischen den States ist dem Programm schon recht ähnlich, besitzt, denn lightlook kann drive verändern, nach-
ausgetauscht werden müssen, haben wir sie wird deshalb auch pseudo code dem diese Variable von wander gesetzt wurde. An
diesen Weg gewählt. In anderen Fällen genannt. Wenn man im konkreten Fall diesem Beispiel werden die erweiterten Möglich-
mag es einfacher sein, zuerst das State- einen solchen Pseudo-Code nicht erstel- keiten deutlich, die diese Methode der Roboter-Pro-
Diagramm zu erstellen und hiervon aus- len kann, kann man auch das Programm grammierung bietet. In Bild 2 ist das neue BoE-
gehend die einzelnen State-Funktionen nicht schreiben! Bot-Verhalten in Form eines Subsumtions-Dia-
zu definieren und zu organisieren. Wie die Das Basic-Stamp-2-Programm für das gramms dargestellt.
Erfahrung zeigt, gibt es meistens mehr photophobische Roboter-Verhalten ist in Hier tut sich ein spannendes Betätigungsfeld auf:
als nur einen Weg, um ein bestimmtes Listing 1 zu finden. Das Programm ent- Verwandeln Sie den photophobischen Roboter in
Verhalten zu realisieren. hält einige Shortcuts, die eventuell der eine Grille, die sich in die Dunkelheit verzieht und
Die State-Deskriptionen sollen so detail- Erklärung bedürfen. Der Befehl tmp = dort zirpt! Am Anfang dieses Experiments können
liert und ausführlich wie möglich sein, so pright >> 1 teilt pright durch zwei und folgende Überlegungen stehen:
dass bei der Programmierung möglichst legt das Ergebnis in tmp ab. In der näch-
nichts vergessen wird. Bei State 1 wurde sten Zeile werden tmp und pright addiert. - Beide Lichtsensoren müssen Beleuchtungsstär-
der Messwert des rechten Sensors mit 1,5 Auf diese Weise wird pright mit 1,5 mul- ken detektieren, die unterhalb der Dunkelgrenze
multipliziert. Durch den Korrekturfaktor tipliziert, was die Unterschiede zwischen liegen (niedrige Beleuchtungsstärke = hoher
werden die unvermeidbaren Exemplar- dem rechten und dem linken Sensor kom- Messwert),
streuungen der Lichtsensoren kom- pensiert. Der Sprungbefehl hat eine indi- - sobald die Dunkelgrenze unterschritten ist, muss
der Roboter stehen bleiben,
- es werden die Messwerte von lightlook übernom-
men, so dass keine neuen Messungen nötig sind,
IR
Avoid
- der Roboter zirpt nur dann, wenn er im Dunkeln
Proximity
Behaviour
Detectors
still steht,
- dieser Zustand hat höhere Priorität als lightlook
und wander,
Dark Seeking
Photocells
Behaviour
- wenn einer der beiden Sensoren eine über dem
Schwellenwert liegende Beleuchtungsstärke
detektiert, wird die Roboterbewegung fortgesetzt.
Wander
Motors
Behaviour
Wenn wir die von lightlook gemessenen Beleuch-
tungswerte in ein anderes Modul übernehmen, ver-
990050 - 8 - 13
letzen wir die Regel, dass die Module voneinander
Bild 3. Subsumption Network Diagram eines photophobischen Roboters. unabhängig sein sollen. Da eine zweite Messung
4/2000 Elektor 65
MIKROPROZESSOREN
branch lstate,[lread1,lread2,lcomp1,lcomp2]
Listing 13
lDur = lDur - 1 state 4 decr duration
drive = lDir correct direction
light looker vars and constants
if lDur > 0 then lDone1 still counting
LLIGHT con 11 left sensor
lstate = 0 restart FSM
RLIGHT con 4 right sensor
lDone1: done
pleft var word left value
return
pright var word right value
lread1: state 0
lstate var byte FSM state
rctime LLIGHT,0,pleft get left value
lDur var byte how long to go
lstate = 1 go next state
lDir var word where to go
return
LMARG con 15 light margin
lightlook:
lread2: state 1
low LLIGHT set up for sensors
rctime RLIGHT,0,pright get right value
low RLIGHT branch takes 200us
tmp = pright >> 1 compensation
pright = pright + tmp
lstate = 2 go next state
return
lcomp1: state 2
tmp = pleft +LMARG set threshhold
if tmp > pright then lDone2 left not past
threshhold
lDir = tr bright to left
lDur = 30 for a while
lstate = 4 go decr state
return
lDone2:
lstate = 3 2nd compare
return
lcomp2: state 3 compare
tmp = pright +LMARG set threshhold
if tmp > pleft then lDone3 not past
lDir = tl bright to right
lDur = 30 for a while
lstate = 4 go decr state
return
lDone3:
lstate = 0 none past
return
avoid: IRPD routine
Listing 14
High IEN enable 555
i=0
IRPD vars and constants
i = ileft * 2 + iright read IRPD
ileft var in9 IR LED outputs
low IEN disable 555
iright var in0 i=(see code)
if ilast = I then ickit two reads agree
IEN con 5 enable for 555
goto iDone just first read
ilast var byte hit counter
ickit: This line chooses new direction
lookup i,[rr,tr,tl,drive],tmp
drive = tmp
i=0 clear history
iDone:
ilast = i new history
return
66 Elektor 4/2000
MIKROPROZESSOREN
praktisch das gleiche Ergebnis liefert und cher realisieren als die Flucht in eine Das Subsumption Network Diagram, das alle
nur unnötig Zeit kostet, ist dieser Regel- dunkle Ecke. Es ist sogar so unkompli- besprochenen Verhaltensmuster enthält, ist in
verstoß tolerierbar. Außerdem ist die Unab- ziert, dass eine State Machine nicht Bild 3 dargestellt.
hängigkeit der Module kein unumstößli- erstellt werden muss. Eigentlich besteht Subsumtions-Diagramme sind insbesondere dann
ches Gesetz, vor allem wenn der Verstoß das Ausweichverhalten aus zwei States: nützlich, wenn man Außenstehenden die potenti-
keine oder nur vernachlässigbare Neben- Der erste nimmt lediglich eine IRPD-Mes- ellen Roboter-Aktivitäten erklären möchte. An
effekte hat. Natürlich kann man auch hier sung vor, der zweite nimmt eine zweite Hand solcher Diagramme kann man Vorhersagen
die rctime-Funktion hinzufügen, falls man Messung vor und vergleicht sie mit der über das Roboter-Verhalten treffen und auch das
absolut korrekt vorgehen möchte. ersten. Da die beiden Aktionen sehr eng Verhalten unterschiedlich programmierter Roboter
Der nächste Schritt ist das Aufstellen miteinander verbunden sind, ist es miteinander vergleichen. Das Diagramm schafft
einer detaillierten Liste der Aktionen, die sowohl schwierig als auch unnötig, sie meistens wesentlich schneller Klarheit über das
innerhalb der einzelnen States der Finite aufzuspalten. Roboter-Verhalten als das Nachvollziehen des
State Machine stattfinden müssen. Das Programm von Ausweich-Verhal- zugehörigen Programms.
Anschließend wird das State-Diagramm tensmuster avoid ist aus Listing 2 Dem weiteren Ausbau Ihres BoE-Bot-Projekts sind
erstellt. Es muss überlegt werden, wo die ersichtlich. kaum Grenzen gesetzt. Sie können zum Beispiel ein
Verhaltens-Routine im Subsumtions-Dia- Die Basic-Stamp 2 führt mathematische Verhaltensmuster implementieren, das den Robo-
gramm des Roboters einzubauen ist. Operationen stets von links nach rechts ter bei einem Zusammenstoß mit einem Objekt ver-
Danach folgt das Schreiben der Routine aus. Die Operationen müssen entweder anlasst, sich rückwärts zu bewegen und um das
und das Einfügen des gosub-Befehls im in der richtigen Reihenfolge stehen, oder Objekt herumzufahren. Zuerst muss eine sensori-
Hauptprogramm main. Nicht vergessen es sind Klammer-Ausdrücke zu benutzen. sche Stoßstange montiert werden, die der Basic-
werden darf die Initialisierung der State Die verwendeten Infrarot-Demodulatoren Stamp 2 die Berührungen signalisiert. Dann ist eine
Machine im Setup-Teil vor dem Haupt- legen die zugehörigen I/O-Leitungen auf Liste der notwendigen Aktionen zu erstellen. Die
programm! Low, wenn sie ein Signal detektieren. Aktionen werden in States umgesetzt, und es wird
Folglich hat 3 die Bedeutung kein Sig- festgelegt, welche Variablen eingeführt werden
nal , 2 bedeutet Signal rechts , 1 müssen. Überlegen Sie auch, welche Priorität die
steht für Signal links , und 0 ist das Reaktion auf ein Stoßstangen-Signal im Subsumti-
Phase 4:
Zeichen für Signale auf beiden Leitun- ons-Diagramm haben muss. Die Programmierung
Ausweichverhalten
gen . Die lookup-Instruktion enthält in dieses Verhaltensmusters (und aller weiteren) ist
Unser BoE-Bot-Roboter ist jetzt so pro- ihrer Tabelle den alten Wert von drive. nun nicht mehr schwierig. Wir wünschen Ihnen viel
grammiert, dass er sich auf zufälligen Der Grund ist, dass keine Änderungen Spaß!
Wegen bewegt und sich dabei photopho- vorgenommen werden können, solange
bisch verhält. Er ist jedoch noch nicht in keine Erkennung stattfindet; der Wert von (990050-8)gd
der Lage, Hindernissen auszuweichen drive muss folglich unverändert bleiben.
und sie zu umfahren. Ein Vermeidungs- Wenn ein Hindernis erkannt wird, ändert
verhalten, das ihn vor Zusammenstößen das Modul avoid die Bewegungsrichtung
mit Wänden und Möbeln schützt, würde des Roboters. Die Richtung wird so geän-
seine Gebrauchsfähigkeit sicher beträcht- dert, dass das Hindernis nicht mehr im
lich erhöhen. Wir setzen die schon aus Erfassungsbereich liegt.
Internet:
einem vorangegangenen Experiment Um dieses Verhalten zu implementieren,
http://www.parallaxinc.com
bekannten Infrarot-Näherungsdetektoren übernehmen Sie die Variablen- und Kon-
BASIC Stamp Manual Version 1.9, BASIC
(IRPD s) zum Erkennen der Hindernisse stantenliste an den Anfang Ihres Pro-
Stamp DOS- und Windows-Editor, Pro-
ein. Der Roboter soll seine Bewegungs- gramms und fügen Sie die avoid-Routine
grammbeispiele, internationale Distributo-
richtung um 180 Grad ändern, wenn er zu den übrigen Subroutinen hinzu. Da
ren.
ein Hindernis unmittelbar vor sich hat. avoid höhere Priorität als alle anderen
Wie kann man dieses Verhalten program- bisher implementierten Verhaltens-Sub-
http://www.stampsinclass.com
mieren? Zum Beispiel so: routinen haben soll, wird avoid im Haupt-
BoE Dokumentation, Robotics Curriculum,
programm main wie folgt aufgerufen:
BoE-Bot *.dxf und *.dwg Grafikformate,
Lese den IRPD-Messwert
Diskussionen zum Einsatz der BASIC Stamp
Wenn es der erst Messwert ist, dann Setup for running im Ausbildungsbereich.
Speichere den Messwert wstate = 0 Ausgangswert Wan-
chucks@turbonet.com
Anderenfalls der-State
Initiator des BoE-Bot-Projekts und Co-Autor
Wenn es der letzte Messwert ist, lstate = 0 Ausgangswert Photo-
dieser Artikelserie. Technische Unterstüt-
dann phobie-State
zung.
Bestimme die Bewegungsrichtung ilast = 0 Ausgangswert der
und setze drive Avoid-History
kgracey@parallaxinc.com
Lösche den Messwert-Speicher
Co-Autor dieser Artikelserie. Technische
Anderenfalls main:
Unterstützung und Beantwortung von Fra-
Speichere den Messwert gosub wander
gen zum BoE-Bot-Projekt.
gosub lightlook
Dieses Verhaltensmuster ist weniger gosub avoid
http://www.elektronikladen.de
komplex als lightlook, denn das Umfah- gosub act
Deutscher Parallax-Distributor
ren eines Hindernisses lässt sich einfa- goto main
4/2000 Elektor 67
Wyszukiwarka
Podobne podstrony:
Programmieren mit der BASIC Stamp 2 (7)Programowanie Obiektowe W Visual Basic Net Dla Ka degoVisual Basic 2005 Zapiski programistyVisual Basic w programie Excel funkcje definiowane, składnia językaMethoden der Arbeit mit BildernVisual Basic 2005 ProgramowanieBasic Microcontroller in C ProgrammingMastering Visual Basic NET Database ProgrammingVB NET Programming with Microsoft Visual Basic NET?livery GuideMakra programowanie w Visual BasicHauff Der junge Englaenderzestawy cwiczen przygotowane na podstawie programu Mistrz Klawia 6Międzynarodowy Program Badań nad Zachowaniami SamobójczymiSchalter ICs mit einstellbarer Strombegrenzungwięcej podobnych podstron