Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - Objektverfolgung

Statt Hindernisse zu finden und ihnen auszuweichen, kümmern wir uns hier darum, wie man einem Objekt folgt. Der gleiche Sensor, aber ein anderer Programmcode. Alles, was das neue Programm leisten muss, ist, innerhalb eines vorgegebenen Abstandes nach einem Objekt zu suchen und wenn sich der Abstand zum Objekt vergrößert, ihm zu folgen. Ist der Abstand geringer als die Vorgabe, geht der Roboter zurück, ist er gleich der Vorgabe, bleibt er stehen.

(Courtesy of Parallax Inc.)

2 - Programm zur Objektverfolgung

In diesem Programmbeispiel soll der ActivityBot einen Abstand von 32cm zwischen sich und einem Objekt vor ihm einhalten. Wird kein Hindernis erkannt, bewegt sich der Roboter vorwärts, bis er auf ein Objekt trifft. Dann soll er sich diesem bis auf 32cm annähern. Wird das Objekt vom ActivityBot entfernt, soll der Roboter nachsetzen und auf Distanz bleiben. Umgekehrt, wird das Objekt auf den Roboter zubewegt, setzt er zurück und stellt die alte Distanz von 32cm so wieder her.

Programm zur Objektverfolgung
Aufgaben
  • Übertrage das Programm PING_Verfolger.c in den Editor und speichere es ab.
  • Starte das Programm über das Hauptmenü mit Program  - Load EEPROM & Run.
  • Stelle den Roboter in Richtung einer Wand auf und überprüfe, ob er sich auf einen Abstand von 32cm einstellt.
  • Lasse ihn in Richtung eines Objekts laufen; nachdem er das Objekt erfasst und sich auf einen Abstand von 32cm eingestellt hat, bewege das Objekt vom Roboter weg bzw. auf ihn zu. Der ActivityBot sollte so reagieren, dass die 32cm Abstand jedes mal eingehalten werden.

Das Programm PING_Verfolger.c

Wie arbeitet das Programm PING_Verfolger.c?

Es werden fünf Variable deklariert: abstand_gemessen, abstand_vorgegeben, differenz, pk und speed.

  • abstand_gemessen speichert den gemessenen Abstand von einem Objekt zum ActivityBot.
  • abstand_vorgegeben speichert den Abstand, den das ActivityBot zwischen sich und einem Objekt stets einhalten sollte
  • differenz speichert die Differenz aus gemessenem und vorgegebenem Abstand.
  • pk speichert eine Proportionalitätskonstante; differenz kann mit pk multipliziert werden, um eine Geschwindigkeit zu erreichen, mit der die Größe abstand_vorgegeben aufrecht erhalten wird.
  • speed enthält das Produkt aus differenz und pk.

Das Programm startet mit dem vorgegebenen Abstand von 32cm und einer Proportionalitätskonstanten von -10. Die Ramping Schrittweite wird auf 6 eingestellt, um plötzliche Geschwindigkeitsänderungen abzufedern. Innerhalb der Endlosschleife reagiert das Programm so, dass der ActivityBot einen Abstand von 32cm zwischen sich und einem Zielobjekt aufrecht erhält. Dazu werden wiederholt fünf Schritte sehr schnell durchlaufen:

 

Zeile 16

Bestimme den Abstand mit abstand = ping_cm(8).

 

Zeile 17

Berechne die Differenz zwischen dem gewünschten und tatsächlichen Abstand.

 

Zeile 18

Berechne die Geschwindigkeit, die notwendig ist, um die Abstandsdifferenz zu korrigieren.

 

Zeilen 19 und 20

Begrenze die Geschwindigkeit auf +/- 128 mit zwei if-Anweisungen.

 

Zeile 22

Treibe beide Räder mit der korrigierten Geschwindigkeit an.

3 - Bemerkungen zu Regelkreisen

Was du wissen solltest!

Ein automatisiertes System, das eine bestimmte gewünschte physikalische Größe aufrecht erhält, wird auch als Regelkreis bezeichnet. Im Fall des ActivityBot ist die physikalische Größe der Abstand zwischen dem Roboter und einem Objekt vor ihm.

 

Bei vielen Regelkreisen wird eine sogenannte  Rückführung des aktuellen Wertes (abstand_gemessen) an den Regler benutzt, um der Abweichung (differenz) vom Sollwert (abstand_vorgegeben) kontinuierlich (durch eine Veränderung der Geschwindigkeit speed) entgegenzuwirken.

 

Ingenieure benutzen zeichnerische Darstellungen für solche Regelkreisanordnungen. Wenn der Wert von abstand_vorgegeben auf 32 eingestellt ist und der Wert von abstand_gemessen bei 38 liegt, dann ist der Fehlerwert oder die Differenz -6. Dieser Wert wird mit einem Proportionalitätsfaktor (pk) multipliziert und als Korrekturfaktor mit der Geschwindigkeit speed verknüpft (speed = pk x differenz = 60), um die Abweichung zu korrigieren.

Die Regelgröße (IST-Wert) wird mit der Führungsgröße (SOLL-Wert) verglichen und die Regelabweichung (Differenz von Soll- und Ist-Wert) dem Regler zugeführt. Der macht daraus eine entsprechende Steuergröße, die auf die Regelabweichung Einfluss nimmt.

4 - Verfolgerreaktion besser verstehen

Es ist sehr hilfreich zu sehen, wie die Werte auf verschiedene Abstandsmessungen reagieren. Um das zu erfahren, solltest du ein paar Werte im Terminalfenster anzeigen lassen.

 

Abstandsmessungen näher untersuchen
Aufgaben
  • Speichere das Programm PING_Verfolger2.c über den Button Save Project As unter dem neuen Namen PING_SteuersignaleZeigen.c ab.
  • Verändere die main() Funktion wie unten dargestellt.
  • Schiebe den PWR-Schalter in Position 1 und klicke auf Run with Terminal.
  • Starte das Programm und beobachte die Ausgabewerte im Terminal, wenn ein Objekt in verschiedenen Abständen vor den PING)))-Sensor gehalten wird. Beschränke die Abstände auf 20 bis 44 cm.

Das Programm Ping_SteuersignaleZeigen.c

WARNUNG: Dieses Programm ist nicht dafür geeignet, einen Roboter zu navigieren; es ist nur für die Darstellung der Steuerbefehle im Terminal gedacht und dient der Anschauung.

 

Liegt die Abstandsmessung bei 40, ergibt sich mit differenz = abstand_vorgegeben - abstand_gemessen = 32 - 40 = -8. Die Geschwindigkeit wird dann über speed = pk * differenz = -10 * -8 = + 80.

Der ActivityBot fährt vorwärts mit 80 Ticks pro Sekunde. Der Wert liegt im Bereich von +/- 128 und damit etwas über halber maximaler Geschwindigkeit, mit der er sich einem Objekt nähern würde. Nimmt die Abstandsmessung auf einen Wert 24 ab, reagiert der Roboter mit speed = -80 mit einer Rückwärtsbewegung. Bei einem Abstand von 28 bewegt er sich weniger schnell rückwärts mit einer Geschwindigkeit von speed = -49.

 

  • Wiederhole die Berechnungen für Entfernungen von 30, 32, 34 und 36 cm.

Jetzt kommst du!

Es lässt sich in dieser Übung mit vielen verschiedenen Werten experimentieren. Wenn der Wert der Variablen abstand_vorgegeben von 32 in 20 geändert wird, versucht der ActivityBot einen Abstand von 20cm zwischen sich und einem Objekt einzuhalten. Der Wert von pk kann erhöht werden, um Differenzen schneller auszugleichen oder erniedrigt werden, um die Prozesse langsamer ablaufen zu lassen.

 

  • Verändere die Werte von abstand_vorgegeben und pk um zu sehen, wie sich das auf das Verhalten des Roboters auswirkt.
  • Mache dir Notizen über das, was du verändert hast und wie der ActivityBot darauf reagiert hat. Welche Werte von abstand_vorgegeben und pk scheinen optimal zu sein?

 

Wird der Wert von drive_setRampStep erniedrigt, dämpft das das Reaktionsverhalten und kann dazu führen, dass der Roboter zu langsam reagiert und damit Gefahr läuft, mit dem Objekt zusammenzustoßen. Wird der Wert dagegen erhöht, reagiert der Roboter heftiger. Manchmal so heftig, dass bei einer abrupten Richtungsänderung der Ping))) Sensor vom Steckbrett geschleudert wird.

Weitere Untersuchungen mit den Variablenwerten
  • Stelle den Wert von drive_setRampStep so niedrig ein, dass die Bewegungen sanfter werden oder erhöhe ihn, um die Bewegung abrupter werden zu lassen.
  • Experimentiere mit den Werten und versuche Einstellungen zu finden, die die Leistungsfähigkeit des Roboters optimieren.
  • Mache dir Notizen von allen Veränderungen und wie der ActivityBot darauf reagiert und welche Leistungssteigerungen es wo gegeben hat.
Druckversion | Sitemap
© Reinhard Rahner - Gettorf