Roboter steuern mit ROBOprogy
Entfernungsmessung durch Echolot-Verfahren
Soll sich ein Roboter in seiner Umgebung zurechtfinden, soll er Gegenstände entdecken oder Hindernissen ausweichen, ist es wenig sinnvoll, ihn mehr oder weniger ziellos herumfahren zu lassen, bis er irgendwo anrempelt. So findet er nur Zufallstreffer, von Navigieren kann keine Rede sein. Mit systematischem Vorgehen hat das wenig zu tun - oft bleibt dem Roboter aber nichts anderes übrig, wenn man keine Möglichkeit zur „Fernerkundung“ einbaut. Eine Möglichkeit, die ihm gestattet, nach jedem Ausflug zu seinem „Nest“ zurück zu finden, sieht so aus: Er protokolliert die gefahrenen Wege und Richtungen vektoriell, also nach Betrag und Richtung, erstellt daraus eine „innere Landkarte“ und fährt – unter Berücksichtigung möglicher Abkürzungen – in umgekehrter Reihenfolge zurück. Man sagt, Ameisen hätten entsprechende Programme eingebaut.
Höher entwickelte Lebewesen gehen anderes vor: Sie versuchen, sich ohne direkten Kontakt mit Gegenständen zu orientieren und benötigen dazu die Möglichkeit, Entfernungen und Richtungen zu messen. Für beides ist der ROBOprogy gerüstet: Für die kontrollierte Einstellung der Sensor-Richtung wurden Servosteuerungen eingebaut. Und zur Entfernungsmessung das Echolot. An dieser Stelle muss auf physikalische Grundlagen hingewiesen werden: Um einen Gegenstand der Größe 1 cm entdecken zu können, benötigt man eine Wellenlänge, die kürzer ist. Bei einer Schallgeschwindigkeit in Luft von 340 m/s muss man also mindestens 34 kHz verwenden. Typische Ultraschallgeber arbeiten auf 42 kHz und sind gut geeignet. Diese hohe Frequenz hat Vorteile: Man hört sie nicht, die Schallwellen lassen sich gut in eine Richtung bündeln und es gibt wenige konkurrierende Schallquellen. Lichtwellen sind erheblich zu schnell und führen zu unmessbar kurzen Zeitdifferenzen.
Es gibt aber auch Nachteile: Trifft der Schallimpuls auf eine ebene Fläche, die das Echo am Empfänger vorbei reflektiert, kann man diese Fläche nicht entdecken. Oder der Schallimpuls wird mehrfach reflektiert und täuscht eine falsche Entfernung vor. Dagegen kann man wenig unternehmen.
Das Echoverfahren läuft so ab: Der Mikroprozessor liefert ein Startsignal, worauf hin ein Leistungsverstärker ein kurzes, lautes Schallsignal erzeugt, das ein Trichter-Lautsprecher vorzugsweise in eine Richtung abstrahlt. Gleichzeitig startet eine interne Uhr. Sobald die Echos ankommen, liest der Mikroprozessor die Uhr ab und speichert die Ergebnisse. Zum Schluss meldet er, wie viele getrennte Echos empfangen wurden. Dann beginnt nach einer kurzen Pause, während der entferntere Echos abklingen können, die folgende Messung. Klingt sehr einfach. Um verwertbare Signale zu erhalten, muss man einige Probleme meistern:
Einige Probleme konnten durch geeignete Programmierung des ROBOprogy gemeistert werden, manche sind durch externe Hardware zu lösen. Es empfiehlt sich beispielsweise, den Empfänger unempfindlich zu machen, während der Lautsprecher Krach macht. Verzichtet man darauf, kann es nach der Übersteuerung zu lange dauern, bis der Empfänger wieder ausreichend empfindlich reagiert. Noch besser sind übersteuerungsfeste Verstärker. Dieses Problem lässt sich nicht per Software lösen, da ist analoge Technik gefragt.
Nun zur praktischen Anwendung: Zunächst muss man dem Prozessor befehlen, Echomessungen durchzuführen, indem man den Befehl
echo
eingibt. Dann erzeugt der Atmel MEGA32 am Pin 4 einen kurzen positiven Impuls (etwa 0,5 Mikrosekunden lang), der einen externen Leistungsverstärker veranlasst, einen kurzen Ultraschallimpuls abzustrahlen. Mindestens eine Schwingung muss die Membran des Lautsprechers schon machen; mehr als 20 Schwingungen sollen es aber nicht sein, sonst kommen die ersten Echos schon zurück, während der Lautsprecher noch Krach macht. Für große Entfernungen sollte man mit ausreichend Leistung und Schalltrichter vor Lautsprecher und Mikrofon arbeiten. Der Mikroprozessor wird 250 Mikrosekunden nach dem Sendepuls „scharf gestellt“ wird – erst danach reagiert er auf negative Flanken am Eingang 5in (Pin 20 des MEGA32). Nun gibt es mehrere Möglichkeiten:
Ein Beispiel soll die mögliche Auswertung illustrieren: Standen in Schallrichtung bei 14 cm, 60 cm und 100 cm jeweils Gegenstände (weder zu groß und noch zu klein), so liefert der Echo-Befehl folgende Zahlen auf das Datenstack:
28 120 200 3 255
Die 255 ganz rechts gibt an, dass Echos empfangen wurden. Die nächste Zahl (3) gibt an dass drei Echos empfangen wurden. Die anderen drei Zahlen sind die gemessenen Schallwege.
Soll das Programm einen Gegenstand suchen, der etwa 50 cm entfernt ist, so muss die Software so geschrieben werden, dass die Ergebnisse 28 (eigener Roboter?) und 200 (Hintergrund?) ignoriert werden. Der verbleibende Wert 120 kommt der gesuchten Distanz am Nächsten und bedeutet eine Entfernung von 60 cm. (Für solche "Zahlenfenster" gibt es den Befehl UBETWEEN). Auf diese Weise kann man längs einer Peillinie unterschiedlich weit entfernte Gegenstände messen, sofern sich die Echos ausreichend sauber voneinander trennen lassen.
Die gemessene Laufzeit der Schallimpulse entspricht nicht genau der doppelten Entfernung, da im Sender und Empfänger Verzögerungen auftreten. Diese muss man für die verwendete Hardware bestimmen und als Konstante in das Programm übernehmen. Abstandsänderungen lassen sich dagegen mit der Formel ds = dt * 170 m/s immer genau messen. Mit den gewählten Umrechnungsfaktoren im MEGA32 erzielt man eine Messgenauigkeit von 5 mm – die Einschwingeigenschaften der Schallwandler erlauben kaum bessere Werte. Für erste Versuche werden nun einfache, bewährte Schaltungen für Messentfernungen bis zu etwa einem Meter gezeigt:


Eine kurze Beschreibungen dazu: Der Piezolautsprecher ist ein Kondensator; der über einen 33 kOhm-Widerstand auf mindestens 12 V aufgeladen wird, wodurch sich das Kristall verbiegt. In der obigen Schaltung ist ein Serienkondensator eingezeichnet, der den Lautsprecher vor Überspannung schützt. Der Startimpuls vom ROBOprogy schaltet den MOSFET kurz ein und entlädt diesen Kondensator schlagartig. Daraufhin beginnt das Piezo-Kristall, mit seiner Eigenfrequenz zu schwingen und strahlt dabei einen intensiven, kurzen Schallimpuls ab. So, als ob man mit einem Hammer auf eine Glocke schlägt. Die getesteten Schallwandler funktionierten (mit geändertem MOSFET) problemlos bis zu 150 V, wodurch die erzeugte Lautstärke und Reichweite deutlich anstieg. Man soll da aber nicht übertreiben. Will man vermeiden, dass am Kristall eine Dauerspannung liegt, solange kein Impuls erzeugt wird, kann man parallel zum Piezo-Lautsprecher einen 1k-Widerstand legen.
Der Empfänger verstärkt das Signal mit einem zweistufigen Breitband-Verstärker mit gutem Übersteuerungsverhalten auf mindestens 1 V. Der dritte Transistor erzeugt daraus kurze Nadelimpulse, die dem Interrupt-Eingang des ROBOprogy (Pin 4) die Ankunft des Echos signalisieren. Die Nadelimpulse enden erst dann, wenn die Lautstärke ausreichend weit gefallen ist. Für weiterführende Experimente und Verbesserungen der Schaltungseigenschaften ist eine Signalkontrolle mit einem guten triggerbaren Oszillografen unverzichtbar.
Der Sendeimpuls sollte direkt vom MEGA32 (Port PB3) abgenommen werden, damit er nicht durch den langsamen Verstärker ULN2003 verfälscht wird. Auf der Unterseite der Platine ist am besten erreichbar der Pin 6 des ULN2003, der in folgender Grafik links oben blau markiert ist:
Bei der Umrechnung der gemessenen Signal-Laufzeit in Entfernung muss man berücksichtigen, dass beide Kristalle einige Schwingungen benötigen, um mit voller Amplitude zu schwingen. Deshalb ist die berechnete Entfernung stets ein wenig größer als die tatsächliche Entfernung. Die Differenz ist leider von der Lautstärke bzw. Übersteuerung des Empfängers abhängig und beträgt bei den verwendeten Piezoelementen etwa 1 cm bis 2 cm. Schaltungen, die diesen Nachteil nicht besitzen, sind erheblich aufwendiger.
Ein Programmbeispiel: Man stellt ein Hindernis 54 cm vor Lautsprecher/Mikrofon und überträgt zum ROBOprogy folgendes Programm mit dem Namen „EE“:
: EE { -- } 250 0
do echo \ irgend etwa gemessen?
if 0 \
ja, Anzahl liegt auf dem Stack
do . \ Ergebnisse der Reihe nach
drucken
loop
cr \ danach neue Zeile beginnen
then 50 ms \
kurze Pause, dann nochmal messen
loop ;
und startet es beliebig oft per Knopfdruck. Dann werden 250 Echosignale im Abstand von je 50 ms erzeugt. Am Bildschirm des PC sieht man etwa 250 Zeilen mit dem Wert von 107 oder 108. Die gesamte Laufweg betrug also 108 cm, der Gegenstand ist etwa 54 cm entfernt. Bringt man weitere Reflektoren in den Schallbereich, erscheinen zusätzliche Zahlen. Bewegt man diese Gegenstände, so können diese „unsichtbar“ werden – dann fehlen die entsprechenden Ergebnisse. Bei Versuchen hat sich herausgestellt, dass pro Sendepuls nicht mehr als zehn Echos getrennt werden können. Ursache ist das Nachschwingen der Piezokristalle. Während dieser Zeit darf kein neues Echo eintreffen.
Zuletzt noch einige Hinweise:
Nebenbei: Der Eingang 5in kann jederzeit und unabhängig vom Echolot als Eingang abgefragt werden.
© Herbert Weidner 2006-8