Roboter-Steuerung

Aus Hansa-Wiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Zielsetzung

Die Zielsetzung unseres Roboter-Projektes war es anfangs, einen Roboter zu entwickeln, der eine Art Blind-Kick-Spiel (Stefan Raab) nachbildet.

Der Roboter hätte hierbei als Fußballspieler gedient und hätte über eine Sprachsteuerung Befehle entgegennehmen und sich somit auf einem Spielfeld manövrieren lassen müssen.

Das Ziel des Spieles wäre es ein sich auf dem Spielfeld befindenden Ball mit dem Roboter in ein definiertes Ziel zu schießen.

Problematik

Hierfür müsste für den Roboter zunächst eine Wegschussvorrichtung realisiert werden. Anschließen würde sich jedoch das Problem ergeben, dass der Roboter exakt vor dem Ball anhalten müsste, um ihn anschließend wegschießen zu können. Da die Verzögerungen zwischen der Vergabe und der Ausführung eines Befehls jedoch zu groß ist, wäre eine exakte Ansteuerung des Roboters auf den Ball nicht möglich gewesen. Hielte der Roboter nur einen Zentimeter zu spät an, so würde der Ball von dem Roboter leicht verschoben werden, was einen Abschuss des selben unmöglich machen würde.

Lösung des Problems

Änderung der Zielsetzung

Aus diesem Grund haben wir uns entschlossen die Zielsetzung des Projektes leicht abzuändern. Der Ball soll nun nicht mehr mittels mehrerer Schüsse über das Spielfeld bewegt werden, sondern durch einen einzigen Schuss direkt von dem Roboter aus an sein Ziel gelangen. Es werden mehrere Ziele auf dem Spielfeld festgelegt und dem Spieler eine gleiche Anzahl an Schüssen gewährt. Für jedes Ziel, dass mindestens von einem Ball getroffen wurde, erhält der Spieler einen Punkt. Trifft er alle Ziele mit jeweils einem Ball, so erhält er also die maximale Punktzahl.

Ballabschussvorrichtung

Für die Realisierung der neuen Zielsetzung wird folglich eine auf dem Roboter befestigte Ballabschussvorrichtung benötigt. Diese muss in einer Spielrunde selbständig mehrere Bälle hintereinander Abschießen können und somit eine automatische Ballnachladevorrichtung besitzen. Als Bälle sollen Tischtennisbälle verwendet werden, da diese durch ihre geringe Masse besonders leicht zu bewegen sind und dennoch eine angemessene Größe besitzen.

Die Ballabschussvorrichtung wurde aus zwei rechtwinklig zu einander angeordneten Papprollen, welche dem Durchmesser der Tischtennisbälle entsprechen, und einem Stück Federstahl zusammengesetzt. Die durch die rechtwinklige Anordnung erhaltene „L“-förmige Papprolle wurde so auf den Roboter montiert, dass ein Papprollenstück nahezu horizontal und das andere vertikal zum Spielfeld ausgerichtet ist. Das horizontale Stück dient als Lauf der Abschussvorrichtung.

Damit ein sich im Lauf befindender Ball nicht von alleine heraus rollt, ist der Lauf nicht exakt horizontal sonder leicht nach hinten gekippt zum Spielfeld angebracht. Das vertikale Papprollenstück dient als Ballmagazin. Wird es mit Bällen gefüllt, so befindet sich der unterste Ball automatisch im Laufanfang.

Durch einen kleinen Einschnitt an der Stelle, an der die beide Papprollen zusammenstoßen, ist der abzuschießende Ball von außen zugänglich und kann somit von dort aus in die Richtung der Laufmündung beschleunigt werden. Für die Beschleunigung wird das bereits erwähnte gerade Stück Federstahl verwendet. Dieses ist an seinem einen Ende so am Roboter befestigt, dass sein anderes Ende genau auf den Ausschnitt in den Papprollen zeigt. Wird dieses nun durch einen Motor gespannt und anschließen augenblicklich losgelassen, so schnellt es auf den untersten Tischtennisball hinzu, überträgt seinen Impuls auf diesen und beschleunigt ihn somit aus den Lauf hinaus. Ein Ballabschuss hätte stattgefunden.

Ein weiteres zu lösendes Problem war die Spannung des Federstahls durch einen Lego-Motor. Gelöst wurde dieses, in dem rechtwinklig auf die Motorachse eine kreisförmige Ebene durch ihrem Mittelpunkt hindurch befestigt wurde. Ein von der Ebene abstehender Legostein berührt bei einem gewissen Achsendrehwinkel das Stück Federstahl spannungslos, sodass dieses bei weiterer Achsendrehung gespannt wird. Wird die Achse über einen gewissen Punkt hinweg gedreht, so bewegt sich das Federstahlstück durch seine aufgebaute Spannung am Legostein vorbei und schnellt auf den Ball hinzu. Wird die Achse wiederum um einen gewissen Winkel weiter gedreht, so gelangt der Legostein wieder in die Position, in der er das Federstahlstück spannungslos berührt. Der beschriebene Vorgang kann somit durch die Rotation der Motorachse beliebig oft wiederholt werden. Durch die Rotationsgeschwindigkeit kann zudem die Abschussstärke in einem begrenzten Maß gesteuert werden.

Auf folgendem Video sieht man wie die Ballschussvorrichtung in der Praxis funktioniert:

Bau des Roboters

Das größte Problem beim Bau des Roboters war es die nicht aus Legosteinen bestehende Abschussvorrichtung mit dem aus Legosteinen bestehenden Roboter zu verbinden. Aus diesem Grund konstruierten wir uns auch einen neuen Roboter, der jedoch die Plattform des "Standard-Roboters" hatte.

Ein weiteres Problem trat auf, als wir den Motor, der die Ballabschussvorrichtung spannen soll, anbringen sollte. Der Motor musste nämlich außen auf einer Seite angebracht werden, was durch das Gewicht des Motors dazu führte, dass der Roboter ein Übergewicht bekam. Durch bessere Befestigung und vor allem durch zwei Reifen auf jeder Seite ließ sich das Problem jedoch gut lösen.

Auf folgendem Bildern sieht man das Resulatat unserer Bastel-Arbeit:

Umsetzung Sprachsteuerung

Für unsere Sprachsteuerung war uns zunächst einmal wichtig den Roboter möglichsts komfortable steuern zu können.

Zunächst realisierten wir die Steuerung der Grundbefehle vorwärts, rückwärts, und die Drehung nach links und rechts. Um die Steuerung zu vereinfach kann durch den Sprachbefehl VOR der Roboter solange geradeausfahren bis er den Sprachbefehl STOP empfängt. Für die genauere Steuerung gibt es den Befehl NACH VORN, der den Roboter nur ein kleines Stückchen nach vorne fahren lässt. Das Rückwärtsfahren verhält sich analog dazu.

Gedreht werden kann der Roboter allerdings nur in kleinen Stücken, da es sowieso keinen Sinn macht den Roboter sich um mehr als 360° drehen zu lassen.

Um die Steuerung ein wenig komfortabler zu gestalten, lassen sich alle Befehle durch den Befehl WEITER wiederholen. So muss man z.B. nicht 10-mal NACH LINKS sagen.

In folgendem Bild sieht man eine Liste mit dem Sprachbefehlen, die gegeben werden können:

Bild:Sc1.JPG


Den DialogOS-Graphen sieht man im folgenden Bild:

Genaue Beschreibung des Graphen

Der Graph zur Sprachsteuerung beginnt mit dem Startknoten, der direkt auf einen Spracherkennungsknoten verweist. Von diesem wird der größte Teil der Befehle, die an den Roboter gegeben werden, koordiniert und somit bildet der Knoten das Herzstück der Sprachsteuerung. Wird ein gültiger Befehl erkannt, so werden die entsprechenden Befehle zur geforderten Steuerung des Roboters aufgerufen. Nach der Beendigung einer beliebigen Steueranweisung kehrt die Sprachsteuerung wieder zu dem Spracherkennungsknoten zurück. Da jede Anweisung letztendlich wieder zum Spracherkennungsknoten führt, handelt es sich hierbei um eine Endlosschleife. Das Programm wird somit niemals beendet und die Verwendung eines Endknotens erübrigt sich. Mögliche Befehle zur Steuerung des Roboters sind „nach vorn“, „nach hinten“, „weiter“ „vor“, „zurück“, „rechts“, „bisschen rechts“, „links“, „bisschen links“, „weiter“ und „Schuss“.

Die Befehle „nach vorn“ und „nach hinten“ befinden sich auf der rechten Seite des Baums. Nach einen Aufruf eines der beiden Befehle werden beide Motoren gestartet, eine gewisse Zeit gewartet und anschließend beide wieder deaktiviert. Der Roboter fährt somit ein kleines Stück nach vorne bzw. nach hinten und hält wieder an. Anschließend wird eine Variable gesetzt, die angibt, welcher der beiden Befehle als letztes aufgerufen wurde. Wird nun der Befehl „weiter“ aufgerufen, so wird die Variable ausgewertet und der zuletzt aufgerufene Befehl wiederholt.

Die Befehle „vor“ und „zurück“ befinden sich auf der linken Seite des Graphen. Wie bei den Befehlen „nach vorn“ und „nach hinten“ werden zunächst beide Motoren aktiviert. Anschließen wird ein Spracherkennungsknoten aufgerufen, der auf den Befehl „Stopp“ wartet. Wird der Befehl erteilt, so werden beide Motoren wieder deaktiviert und die Sprachsteuerung kehrt zum Spracherkennungsknoten zurück. Die Befehle „vor“ und „zurück“ lassen den Roboter somit solange nach vorne bzw. nach hinten fahren, bis der Befehl zum Anhalten gegeben wurde.

Die Befehle „rechts“, „bisschen rechts“, „links“ und „bisschen links“ befinden sich in der Mitte des Graphen und sind analog zu einander aufgebaut. Einer der beiden Motoren wird aktiviert, es wird eine gewisse Zeit gewartet und anschließend wird der zuvor aktivierte Motor wieder deaktiviert. Der Roboter dreht sich somit ein Stück in die vorgegebene Richtung. Danach wird wieder zum Spracherkennungsknoten zurückgekehrt.

Der letzte Befehl lautet „Schuss“. Wird er gegeben, so wird zum Knoten „Schuss“ gesprungen. Dieser ruft ein NXC-Programm auf, das einen Ballschuss veranlasst.

Der Quelltext des NXC-Programms lautet folgender Maßen.

task main()
{
    for (int i=0; i<3; i++)
    {
     PlayTone (750,350);
     if (i<2)
      Wait(500);
    }
    RotateMotor (OUT_A, 80, 360);
}

Zunächst wird über die for-Schleife dreimal ein Warnton abgespielt, der auf den Abschuss eines Balls hinweisen soll. Hierfür wird der Befehl "PlayTone" und anschließend der Befehl "Wait" aufgerufen. Beim dritten Aufruf von "PlayTone" wird auf das Wait verzichtet, da so etwas Zeit eingespart werden kann. Anschließend wird der Motor um 360° mit dem Befehl "RotateMotor" gedreht und somit der Ball abgeschossen.

Persönliche Werkzeuge