Im vorhergehenden Artikel haben wir den Roboter Scribbler 2 und seine grafische Programmierumgebung kennengelernt. In diesem Artikel möchten wir den Einstieg vertiefen, indem wir bestimmte Punkte wie Multitasking oder den Einsatz von Variablen genauer erläutern.

Die erwähnten Konzepte werden durch die Erstellung eines kompletten Programms zur Kollisionsvermeidung veranschaulicht.

Algorithmus zur Kollisionsvermeidung für den Roboter Scribbler 2

Unser Algorithmus ist zwar sicherlich nicht der beste, den man sich vorstellen kann, er zeigt jedoch anschaulich die verschiedenen Funktionen der Programmiersoftware für den Roboter Scribbler 2. Das Prinzip ist folgendes: Wir teilen zunächst den Frontbereich des Roboters in Zonen ein und versuchen festzustellen, wo sich innerhalb dieser Zonen Hindernisse befinden.

Der Algorithmus funktioniert folgendermaßen:

  • Der Roboter bewegt sich geradeaus vorwärts, solange er kein Hindernis antrifft.
  • Trifft der Roboter auf ein Hindernis, vollzieht er eine Vierteldrehung in eine Richtung (die Richtung wird dabei zufällig gewählt). Er führt daraufhin eine neue Messung durch und fährt wieder geradeaus, wenn er kein weiteres Hindernis antrifft. Trifft er ein weiteres Hindernis an, vollzieht er eine 180°-Drehung in die andere Richtung. Trifft er auch dort ein Hindernis an, fährt er zurück und vollzieht etwas mehr als eine 180°-Drehung (die Richtung wird dabei zufällig gewählt). Trifft er jedoch kein Hindernis an, fährt er wieder geradeaus weiter.
  • Der Roboter bewegt sich geradeaus vorwärts, solange er kein Hindernis antrifft.
  • Sollte der Roboter vor einem Hindernis, das der Algorithmus nicht vermeiden konnte, blockiert sein und seine Räder drehen durch, so fährt er einige Sekunden rückwärts und dreht dann zufällig nach rechts oder links.

In diesem Algorithmus haben wir in verschiedenen Situationen gleiche Reaktionen gewählt, um bestimmte Konzepte zu veranschaulichen, insbesondere die Subroutine.

Die folgende Abbildung zeigt unser Programm zur Kollisionsvermeidung:

Programm zur Kollisionsvermeidung

Der Quellcode für das Programm kann unter folgendem Link heruntergeladen werden: Programm zur Kollisionsvermeidung

Gehen wir das Programm Schritt für Schritt durch.

Hauptroutine

Das Programm setzt sich aus mehreren Teilen zusammen. Jeder Teil wird als Routine bezeichnet. Standardmäßig beginnt das Programm mit der grünen Routine (das Zahnrad auf dem Startblock ist grün, was bedeutet, dass es sich um den Startblock für das gesamte Programm und nicht nur für eine Subroutine handelt).

Im Hauptprogramm beginnen wie mit einem Bewegungsblock, bei dem beide Motoren so eingestellt sind, dass sie mit voller Leistung in die gleiche Richtung drehen. Der Roboter fährt also zunächst unbegrenzt geradeaus. Dies ist eine Grundvoraussetzung für unseren Algorithmus. Es sei hier noch einmal darauf hingewiesen, dass ein sich unendlich wiederholender Bewegungsblock nur dann anhält, wenn ein anderer Bewegungsblock eine andere Fortbewegungsrichtung vorgibt oder das Ende des Programms erreicht ist.

Dabei werden Tests durchgeführt (gelbe Blöcke), um zu sehen, ob der Roboter rechts, links oder vor sich ein Hindernis ortet, oder ob er vor einem Hindernis blockiert ist (d. h. beide Motoren laufen, der Roboter bewegt sich jedoch nicht fort).

Bei jedem Test lassen wir von 3 LEDs einen Farbcode anzeigen und gleichzeitig eine kleine Klangsequenz abspielen. Das ist natürlich absolut nicht notwendig, jedoch ein guter Test, ob der Programmcode tatsächlich die erwarteten Ergebnisse erzielt.

Je nach Fall wird eine andere Subroutine aufgerufen. Um eine Subroutine aufzurufen, wird folgende Schaltfläche eingesetzt:

Taste, um ein Unterprogramm in der Software Scribbler Programm Maker erstellen

Es öffnet sich folgendes Fenster:

Fenster beim Aufruf einer Subroutine

Durch Anklicken des Zahnrads im linken Bildsymbol ändert sich die Farbe des Zahnrads. Dadurch wird festgelegt, welche Subroutine angelegt werden soll. Diese wird in einem Programm neben dem Hauptprogramm entwickelt und zunächst in halbtransparenter Farbe angezeigt, wie auf der folgenden Abbildung zu sehen.

Unterprogramm in der Software Scribbler Programm Maker

Sie bleibt so lange halbtransparent, bis die Subroutine an irgendeiner Stelle im Programm aufgerufen wird. Das ist sehr praktisch, da man dadurch „tote“ Sequenzen des Programms erkennen kann.

Zum Aufrufen einer Subroutine dient die folgende Schaltfläche:

Ruftaste einer Subroutine in der Software Scribbler Programm Maker

Wenn Sie diese Schaltfläche anklicken und den Block zum Aufrufen der Subroutine in Ihrem Programm positionieren, wird das gleiche Parameterfenster geöffnet wie beim Erstellen einer Subroutine (siehe unten). Klickt man im Parameterfenster auf das Zahnrad, so wechselt es die Farbe, wodurch sich die aufgerufene Subroutine ändert.

Die Hauptroutine enthält einen Block zum Ausschalten der 3 LEDs, einen Warteblock von einer Sekunde, um das Programm zu dehnen und seine Funktionsweise besser zu verstehen (durch diesen Block entsteht eine gewisse Ruckartigkeit, die sich jedoch durch das Löschen des Blocks beheben lässt).

Das bisherige Programm wird nun in eine Endlosschleife gesetzt, damit der Roboter das Hauptverhalten immer wiederholt (Endlosschleifen sind in der Robotik sehr beliebt).

Nach der Endlosschleife folgen zwei Blöcke, die niemals ausgeführt würden, wäre die Programmschleife tatsächlich endlos. Diese Blöcke werden nur aufgerufen, wenn Sie angeben, wie oft die Programmschleife wiederholt werden soll. Das ist vor allem beim Debugging eines Programms sinnvoll. Die beiden Blöcke markieren das Ende des Programms und stoppen den Roboter.

Subroutine für den Test der Roboterumgebung

In unserem Programm handelt es sich um die orangefarbene Subroutine. Sie beginnt mit einem Testblock „Kopf oder Zahl“.

Block in der Scribbler Programm Maker Software werfen

Es handelt sich um einen Zufallstest, der das Programm unter oder neben dem Testblock mit einer bestimmten Wahrscheinlichkeit (in diesem Fall 1:2) auslöst. Dieses Prinzip wird eingesetzt, damit der Roboter nicht jedes Mal das gleiche Verhalten an den Tag legt, wenn er auf ein Hindernis trifft.

Der darunter liegende Programmcode sorgt dafür, dass sich der Roboter um 90° nach links dreht und die Variablen testet (Flaggen), falls er ein Hindernis ortet. Sollte er kein Hindernis erkennen, so verlässt er die orangefarbene Subroutine. Beim Verlassen der orangefarbenen Subroutine kehrt er genau dort wieder in die Hauptroutine zurück, wo er stehengeblieben war; der Roboter bewegt sich wieder geradeaus vorwärts.

Der Code rechts sorgt dafür, dass der Roboter sich um 90° nach rechts und nicht nach links dreht.

Einsatz von Flaggen in der Programmierumgebung des Scribbler 2

Der Scribbler Program Maker bietet eine sehr einfache Verwaltung der Variablen, die nur mit Ja oder Nein arbeiten (auch Boole’sche Variablen genannt). Diese Variablen werden durch farbige Flaggen dargestellt, die gehisst oder eingeholt werden. Es können bis zu 7 Variablen eingesetzt werden.

Um eine Flagge zu hissen oder einzuholen, wird folgende Schaltfläche eingesetzt:

Block eine Fahne in den Scribbler Programm Maker Software erhöhen

Wenn der Flaggenblock auf die Arbeitsfläche gezogen wird, öffnet sich folgendes Parameterfenster:

Fenster zur Einstellung der Block-Flag in der Scribbler Programm Maker Software

Mit der linken Schaltfläche kann bestimmt werden, welche Flagge gehisst oder eingeholt werden soll. Wenn die Flagge gehisst oder eingeholt wurde, kann ihr Zustand zu einem späteren Zeitpunkt im Programm mithilfe eines Testblocks getestet werden.

In unserem Programm führt die orangefarbene Subroutine folgende Abläufe aus:

  • Nach dem Zufallsprinzip mit einer Wahrscheinlichkeit von 1:2 wird eine der zwei folgenden Möglichkeiten ausgeführt:
    • Der Roboter dreht sich um 90° nach links und testet, ob er Hindernisse findet. Wenn ja, wird eine grüne Flagge gehisst, wenn sich das Hindernis links befindet und eine gelbe Flagge, wenn es sich rechts befindet (wir hätten immer die gleiche Flagge einsetzen können, haben uns jedoch für zwei Flaggen entschieden, falls ein noch präziseres Programm erstellt werden soll). Wird kein Hindernis gefunden, braucht der Roboter nicht in der Subroutine fortzufahren und ein Block zum vorzeitigen Verlassen der Subroutine wird ausgeführt.
    • Der Roboter dreht sich um 90° nach rechts und testet, ob er Hindernisse findet. Wenn ja, wird eine rosafarbene Flagge gehisst, wenn sich das Hindernis links befindet und eine violette Flagge, wenn es sich rechts befindet. Wird kein Hindernis gefunden, braucht der Roboter nicht in der Subroutine fortzufahren und ein Block zum vorzeitigen Verlassen der Subroutine wird ausgeführt.
  • Nun wird die Farbe der Flagge geprüft. Je nach Farbe führt der Roboter eine 180°-Drehung nach rechts oder nach links aus, um eine neue Zone zu überprüfen. Trifft der Roboter auch hier wieder auf Hindernisse, ruft der Roboter eine der Subroutinen zur Kollisionsvermeidung auf. Wird kein Hindernis gefunden, verlässt das Programm die Subroutine und kehrt in die Hauptroutine zurück.

Subroutinen zur Kollisionsvermeidung

In diesen Subroutinen führt das Programm Manöver zur Kollisionsvermeidung aus. Die violette und die blaue Subroutine stimmen bis auf die Drehrichtung überein, daher beschreiben wir nur die violette.

Violette Subroutine: Umfahren eines Hindernisses nach links

In dieser Subroutine verwenden wir eine Endlosschleife. Bei jeder Programmschleife testet der Roboter, ob immer noch ein Hindernis zu seiner Rechten ist. Wenn dies der Fall ist, dreht er sich auf der Stelle nach links und beginnt von neuem. Wenn dies nicht der Fall ist, verlässt er die Programmschleife über einen Block zur vorzeitigen Beendung.

End Loop-Block in den frühen Software Scribbler Programm Maker

Der oben stehende Block bewirkt ein Verlassen der Programmschleife.

Rosafarbene Subroutine zum Verlassen einer Sackgasse

Diese Subroutine wird aufgerufen, wenn der Roboter von Hindernissen umgeben ist. In diesem Fall fährt der Roboter 2,5 Sekunden rückwärts, dreht sich dann nach dem Zufallsprinzip mit dem bereits beschriebenen Kopf-oder-Zahl-Test nach rechts oder nach links.

Schlussbemerkung

In diesem Artikel haben wir ein Programm zur zufälligen Erkundung des Raumes und zur Kollisionsvermeidung kennengelernt. Das vorliegende Programm hatte zum Ziel, möglichst viele neue Funktionsblöcke zu verwenden. Insbesondere haben wir folgende Blocks vorgestellt:

  • Block zur Einleitung einer Subroutine
  • Block zum Aufrufen einer Subroutine
  • Warteblock
  • Block zum Zufallstest
  • Verwaltung von Flaggen
  • Block zum vorzeitigen Verlassen einer Subroutine
  • Block zum vorzeitigen Verlassen einer Programmschleife

Mit diesem Programm konnten wir die Vorstellung des Scribbler Program Maker noch weiter vertiefen. Das Programm ist einfach zu verwenden und besonders gut für Schüler der Mittelstufe geeignet. Es erfordert keinerlei Vorkenntnisse in der Programmierung und ist in bestimmten Bereichen wie etwa den Variablen bewusst einfach gehalten. Dieses Programm bietet einen interessanten Einstieg in die Robotik für jüngere Schüler und Anfänger.

 


 

Generation Robots (http://www.generationrobots.de)

Jegliche Verwendung oder Vervielfältigung bedarf der vorherigen ausdrücklichen Genehmigung.