Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
3. Fahrbarer Roboter
Autor:
Fachhochschule Südwestfalen
Fachbereich Elektrische Energietechnik
Campus Soest
Einführungs praktikum
Roboterprogrammierung
Einführungs praktikum Roboterprogrammierung
3. Fahrbarer Roboter
Fachhochschule Südwestfalen – Fachbereich Elektrische Energietechnik - Campus Soest 30.10.2015 2 / 10
Hinweise zur Bearbeitung
Alle Aufgaben innerhalb dieses Praktikums beinhalten verschiedene Aspekte der Arbeit mit den LEGO
Mindstorms Komponenten und der Programmiersoftware LabVIEW. Um eine möglichst intuitive
Bearbeitung der Aufgaben zu ermöglichen werden innerhalb der Dokumentation die folgenden Symbole
und Notationen benutzt.
Symbol / Notation Bedeutung
1.1.1
Das Symbol der Maus deutet auf Bereiche innerhalb des Praktikums
hin, in denen bestimmte Bereiche selbstständig gelöst werden sollen.
Die nebenstehende Zahl ordnet jeder Lektion eine eindeutige Nummer
zu um die Orientierung zu erleichtern.
Menüpunkt 1
Textbausteine, die fett gedruckt und in alternativer Schriftart
abgedruckt sind sollen auf Menüpunkte oder Befehle innerhalb von
LabVIEW hinweisen.
Menüpunkt 1 Befehl A
Der Pfeil zwischen zwei fett gedruckten Texten deutet auf eine
Sequenz von Menüpunkten oder Befehlen hin. Hier soll also der Befehl
A unter dem Menüpunkt 1 ausgeführt werden.
projekt1.c
projekt2.c
Die Diskette deutet auf Dateizugriffe hin. An diesen Stellen werden
entweder Dateien gespeichert (Schreibende Hand) oder geöffnet
(Offene Hand). Der jeweilige Dateiname ist neben dem
Diskettensymbol angeordnet. Hier soll also das aktuelle Projekt unter
dem Dateinamen projekt1.c gespeichert werden und ein anderes
Projekt mit dem Dateinamen projekt2.c geladen werden.
Abbildung 1 Die hellblaue Schrift deutet auf Abbildungen, Tabellen oder andere im
Text eingebettete Elemente hin.
d
Texte oder Grafiken in einer solchen geschweiften Zelle deuten
daraufhin, dass hier nur Ausschnitte einer größeren Ansicht
dargestellt sind.
1 Task main()
2 {
3 Motor[port3] = 0;
4 }
Texte die in der nebenstehenden Art und Weise formatiert sind deuten
immer auf Code-Abschnitte hin. Hierbei wird zur besseren
Orientierung immer die Zeilennummer angegeben.
Einführungs praktikum Roboterprogrammierung
3. Fahrbarer Roboter
Fachhochschule Südwestfalen – Fachbereich Elektrische Energietechnik - Campus Soest 30.10.2015 3 / 10
Ein führung
Während des letzten Praktikumstermins wurden Grundlagen der Programmierung mit LabVIEW
vorgestellt. Hierzu wurde ein fahrbarer Roboter aufgebaut und eine erste einfache Applikation
(Hindernisdetektion) realisiert. Basierend auf diesem Modell sollen nun während dieses zweiten
Praktikums weitere wichtige Funktionen eingeführt werden. Hierbei soll im ersten Teil (Aufgabe 3.1) das
bereits bestehende Programm zur Hindernisdetektion so erweitert werden, das der Roboter in der Lage ist
ein unbekanntes „Labyrinth“ selbstständig zu durchfahren. In diesem Zusammenhang sollen zunächst
einfache Regeln definiert werden die dies ermöglichen.
Aufgabe 3.1 Labyrinth
Mit Hilfe des Ultraschallsensors wurde während des letzten Praktikums realisiert, dass der Roboter
automatisch einem Hindernis ausweicht. Auf dieser Grundidee und dem zugehörigen Programm soll in der
ersten Aufgabe dieses Praktikums aufgesetzt werden um einen Roboter zu entwickeln der selbstständig
durch ein Labyrinth fahren kann und den Ausgang findet. Hierzu wird erneut der Ultraschallsensor
eingesetzt, wobei diesmal die Wände des Labyrinthes sicher erkannt werden müssen.
Zunächst ist es aber entscheidend dass man das gewünschte Verhalten des Roboters definiert. Eine solche
Handlungsvorschrift nach der ein Roboter agieren soll nennt man einen Algorithmus. Dieser ist zunächst
einmal unabhängig von einer spezifischen Programmiersprache, da es sich hierbei um eine allgemeine
Beschreibung der notwendigen Schritte zur Lösung eines Problems handelt, die dann aber später in einem
Programm implementiert wird.
In der Regel werden solche Algorithmen zunächst einmal in einer allgemeinen Form notiert. Diese Form
sollte es ermöglichen den jeweiligen Algorithmus in jeder beliebigen Programmiersprache implementieren
zu können. Hierzu stehen zahlreiche Beschreibungsmöglichkeiten zur Verfügung. Die einfachste Art ist die
Beschreibung durch sogenannten Pseudo-Code. Die folgende Abbildung zeigt ein Beispiel für eine textuelle
Programmbeschreibung mittels Pseudo-Code.
1 Roboter starten
2 Solange kein Button auf NXT gedrückt wurde
3 Auslesen des Ultraschallsensors und Anzeige auf dem Display
4 Wenn Hindernis erkannt dann
5 Roboter stoppen
6 Roboter im Bogen zurückfahren
7 Roboter wieder starten
8 sonst
9 Roboter stoppen
10 PROGRAMMENDE Abbildung 1 – Beispiel für die Beschreibung eines Programmes mit Hilfe von Pseudo-Code
Einführungs praktikum Roboterprogrammierung
3. Fahrbarer Roboter
Fachhochschule Südwestfalen – Fachbereich Elektrische Energietechnik - Campus Soest 30.10.2015 4 / 10
Wie das Beispiel in Abbildung 1 zeigt liegt das Augenmerk beim Pseudo-Code wirklich auf der Beschreibung
des Verhaltens eines Systems. Wie einzelne Punkte (z.B. Auslesen des Ultraschallsensors) im
Programm zu implementieren sind spielt hierbei noch keine Rolle.
Sei nun im Folgenden die gegebene Labyrinth-Aufgabe betrachtet: Abbildung 2 zeigt ein Beispiel für ein
Labyrinth und die Startposition des Roboters.
Abbildung 2 – Beispiel für ein einfaches Labyrinth
3.1.1 Pseudo-Code zur Beschreibung des Roboterverhaltens
1. Entwickeln Sie einen Algorithmus der es dem Roboter ermöglicht aus einem einfachen Labyrinth
selbstständig hinauszufinden.
2. Entwickeln Sie den Pseudo-Code für Ihren Algorithmus. Verwenden Sie dabei möglichst eindeutige
Aktionsbeschreibungen.
3.1.1 Benutzung der Rotationssensoren
Innerhalb des Labyrinthes ist es notwendig, dass der Roboter Drehungen ausführt. So werden auch in Ihrem
Pseudo-Code wahrscheinlich Aktionen auftauchen wie „Roboter dreht sich nach links“ oder „Roboter fährt
Rechtskurve“. Im letzten Praktikum wurde das Wendemanöver dadurch gelöst, dass einfach für eine
definierte Zeit die Motoren entsprechend gesteuert wurden. Wie könnten wir aber den Roboter nun exakt
eine 90°-Drehung ausführen lassen ohne mit Verzögerungen zu arbeiten?
Hierzu steht innerhalb jedes Motors ein Rotationssensor zur Verfügung welcher es ermöglicht die
Bewegung des Motors nach einem bestimmten Winkel zu stoppen. Abbildung 3 illustriert beispielhaft die
Funktion des Rotationssensors bei laufendem Motor. Wie dort zu sehen ist kann der Block Rotation
Sensor genutzt werden um den aktuellen Stand des Rotationssensors abzufragen. Dieser Block ist in der
folgenden Bibliothek zu finden: AddOns NXTToolkit NXT Library Input. Hierbei ist es jedoch
wichtig zu beachten, dass der zurückgegebene Wert keinen Absolutwert darstellt, d.h. um zum Beispiel eine
90°-Drehung des Motors aus der aktuellen Motorposition auszuführen muss der Stand des
Rotationssensors zunächst auf Null gesetzt werden. Dies geschieht über den zusätzlichen booleschen
Anschluss „Reset“ des „Rotation Sensor“-Blocks der auf True gesetzt werden muss.
Einführungs praktikum Roboterprogrammierung
3. Fahrbarer Roboter
Fachhochschule Südwestfalen – Fachbereich Elektrische Energietechnik - Campus Soest 30.10.2015 5 / 10
Abbildung 3 – Zur Benutzung des Rotationssensors
Um nun einen Motor (hier: einen Motor an Ausgangsport A) genau eine Umdrehung (360°) fahren zu lassen,
könnte das in Abbildung 4 dargestellte Programm genutzt werden. Hierbei wird auf der linken Seite der
Pseudo-Code angegeben und auf der rechten Seite das Blockdiagramm in LabVIEW.
Pseudo-Code LabVIEW-Diagramm
1 Rotationssensor an Port A zurücksetzen
2
3 Motor an Port A starten
4
5 Solange Wert des Rotationssensors < 360°
6
7 Wert des Rotationssensors anzeigen
8
9 sonst
10
11 Motor an Port A stoppen
12
Abbildung 4 – Gegenüberstellung Pseudo-Code und Blockdiagramm zum Ausführen einer 360°-Drehung eines Motors
3.1.2 Ausführen einer 90°-Drehung des Roboters
1. Entwickeln Sie auf Grundlage des in Abbildung 4 dargestellten Codes ein Programm welches den
Roboter eine 90°-Drehung ausführen lässt.
2. Im Fall des Labyrinthes sollte der „Wendekreis“ des Roboters möglichst klein sein um ein „anecken“
an den Wänden des Labyrinthes zu vermeiden. Ideal wäre hierbei eine Drehung des Roboters auf
der Stelle. Wie ließe sich so etwas realisieren und welche Änderungen müssten an dem Programm
vorgenommen werden?
In LabVIEW steht dieser Code auch als fertiger Block in der Output-Library unter dem Namen
„Motor distance“ zur Verfügung. Die folgende Abbildung zeigt das Interface dieses Blocks. Hierbei
kann über den Anschluss „Distance in Degrees“ der zu fahrende Winkel definiert werden.
Ansonsten kann dieser analog zu dem bisher genutzten „Motor Unlimited“-Block genutzt werden.
Einführungs praktikum Roboterprogrammierung
3. Fahrbarer Roboter
Fachhochschule Südwestfalen – Fachbereich Elektrische Energietechnik - Campus Soest 30.10.2015 6 / 10
Abbildung 5 – Interface des Blocks „Motor distance“
3. Die folgende Abbildung 6 zeigt das Grundgerüst für eine Realisierung einer 90°-Drehung auf der
Stelle innerhalb von LabVIEW. Bitte implementieren Sie diesen Code und testen Sie ihn. Welche
Änderungen müssen Sie vornehmen um den Roboter nun eine 90°-Rotation auf der Stelle
ausführen zu lassen?
Der Code ist kommentiert um Ihnen die Funktionsweise zu verdeutlichen, wobei generell das
Beispiel aus Abbildung 4 nur um einen weiteren Motor (mit dazugehörigem Rotationssensor)
erweitert wurde.
An der Abbruchbedingung der benutzten while-Schleife wurden zwei boolesche Ausdrücke mit
Hilfe einer booleschen Verknüpfung kombiniert (Diese finden Sie in der folgenden Bibliothek:
AddOns NXTToolkit Boolean). Hierbei handelt es sich um eine sog. ODER-Verknüpfung, d.h.
sobald mindestens eine der beiden logischen Abfragen wahr ist, ist auch das Verknüpfungsergebnis
wahr. Dies wird im Programm genutzt um sicherzustellen, dass beide Motoren ihre jeweiligen
Zielwerte erreichen bevor das Programm die Motoren stoppt.
Abbildung 6 – Beispielprogramm um einen Roboter auf der Stelle drehen zu lassen in LabVIEW
Einführungs praktikum Roboterprogrammierung
3. Fahrbarer Roboter
Fachhochschule Südwestfalen – Fachbereich Elektrische Energietechnik - Campus Soest 30.10.2015 7 / 10
Mit dem nun entwickelten Programm sind Sie in der Lage Drehungen des Roboters auf der Stelle
auszuführen. Dieses soll als Muster für zukünftige Entwicklungen gespeichert werden. Um den Umgang
hiermit zu erleichtern wurde das gesamte Programm in einem neuen Block zusammengefasst, deren
Interface in der folgenden Abbildung dargestellt ist.
Abbildung 7 – Rotate-Block
Drehen.vi Speichern Sie Ihr Programm
Um nun eine Implementierung Ihres entwickelten Pseudo-Code zu realisieren empfiehlt es sich auf dem
Programm aus dem letzten Praktikum aufzubauen, da dieses bereits entsprechend benötigte
Funktionalitäten (Benutzung des Ultraschallsensors, etc.) enthält.
Hindernis.vi Öffnen Sie Ihr Programm aus dem letzten Praktikum
3.1.3 Implementierung des „Labyrinth-Roboters“ in LabVIEW
1. Implementieren Sie nun auf Grundlage des Programmes aus dem letzten Praktikum und unter
Zuhilfenahme des eben erstellten Programmes für das Drehen auf der Stelle, entsprechenden
LabVIEW-Code der eine Implementierung ihres in Aufgabe 3.1.1 entwickelten Pseudo-Codes
entspricht.
2. Testen Sie Ihr Programm an einem real aufgebauten Labyrinth. Wo liegen noch
Verbesserungspotentiale bzw. in welchen Fällen könnte der von Ihnen vorgeschlagene
Algorithmus Probleme verursachen.
Labyrinth.vi Speichern Sie Ihr Programm unter neuem Dateinamen
Aufgabe 3.2 Linienverfolgung
In der nächsten Aufgabe soll im Folgenden nun ein Lichtsensor eingesetzt werden um zu ermöglichen, dass
der Roboter einer schwarzen Linie folgt. Hierzu soll der Roboter das in Abbildung 8 dargestellte Verhalten
aufweisen:
Abbildung 8 – Einfaches Verfolgen einer Linie
Einführungs praktikum Roboterprogrammierung
3. Fahrbarer Roboter
Fachhochschule Südwestfalen – Fachbereich Elektrische Energietechnik - Campus Soest 30.10.2015 8 / 10
Dieses Verhalten lässt sich sehr einfach in Form der folgenden zwei Regeln beschreiben:
Wenn der Lichtsensor eine helle Fläche erkennt, dann drehe leicht nach rechts
Wenn der Lichtsensor eine dunkle Fläche erkennt, dann drehe leicht nach links
Erstellen Sie ein neues Programm (VI-File)
3.2.1 Erstellen des Programmes zur Linienverfolgung
1. Verbinden Sie als erstes einen freien Eingangsport des NXT-Bricks mit einem Lichtsensor und
platzieren Sie die Sensoreinheit so, dass dieser zum Erkennen der Linie dienen kann. Ein Beispiel
für eine solche Anordnung ist in Abbildung 9 dargestellt.
Abbildung 9 – Linienerkennung mit einem Lichtsensor
2. Nehmen Sie die Werte auf, die der Lichtsensor liefert wenn er sich über der schwarzen Linie
befindet und wenn er sich über der „normalen“ Tischoberfläche befindet. Entwickeln Sie hierzu ein
Programm welches die benötigten Sensorwerte auf dem Display des NXT-Bricks anzeigt und
notieren Sie sich die entsprechenden Werte.
3. Fügen Sie Ihrem Programm nun eine geeignete Implementierung der zwei Regeln hinzu. Welche
Strukturelemente können Sie hierzu in LabVIEW verwenden? Wie würde der Pseudo-Code
aussehen? Testen Sie Ihr Programm an einer der aufgeklebten Linien im Labor. Welche
Verbesserungen fallen Ihnen ein?
In Aufgabe 3.1 wurde der Rotationssensor benutzt um die Motoren eine definierte Bewegung
ausführen zu lassen. Natürlich ist es im Gegenzug genauso möglich die Sensorwerte zu nutzen um zum
Beispiel die gefahrene Strecke des Roboters zu bestimmen.
3.2.2 Streckenmessung mit dem Roboter
1. Überlegen Sie zunächst wie die Werte der Rotationssensoren umgerechnet werden müssten,
damit daraus die gefahrene Strecke ermittelt werden kann. Welche Größe müssten Sie dafür
kennen.
Einführungs praktikum Roboterprogrammierung
3. Fahrbarer Roboter
Fachhochschule Südwestfalen – Fachbereich Elektrische Energietechnik - Campus Soest 30.10.2015 9 / 10
2. Einfache arithmetische Rechenoperationen können in LabVIEW sehr einfach durchgeführt
werden. Die folgende Abbildung zeigt hierfür mehrere einfache Beispiele, wobei Sie die
entsprechenden Operationen in der Numeric-Bibliothek finden können:
Abbildung 10 – Beispiele für arithmetische Operationen in LabVIEW
Fügen Sie in Ihr bestehendes Programm zur Linienverfolgung nun geeignete Operationen ein
damit während der Linienverfolgung die jeweils gefahrene Strecke auf dem Display des NXT -
Bricks angezeigt wird.
3. Testen Sie Ihr Ergebnis mit Hilfe einer geraden Strecke und ein em Zollstock. Was könnten
Gründe für eventuell vorhandene Ungenauigkeiten sein?
LinieStrecke.vi Speichern Sie Ihr Programm unter neuem Dateinamen
Aufgabe 3.3 SumoBOT
Basierend auf den Lösungen der vorangegangen Aufgaben soll nun abschließend alle Teams gemeinsam an
einem Turnier teilnehmen und so den „besten“ Roboter ermitteln. Eigens hierzu wurde der Robotersport
SumoBOT entwickelt. Die Regeln seien nachfolgend kurz dargestellt:
1. Jeweils zwei fahrbare Roboter treten in einem SumoBOT-Match gegeneinander an.
2. Beide Roboter werden zu Beginn innerhalb eines Spielfeldes so angeordnet, dass Sie sich direkt
gegenüberstehen. Das Spielfeld ist dabei kreisförmig und durch eine schwarze Linie abgegrenzt.
Eine Abbildung der Startaufstellung findet sich in der folgenden Abbildung.
Spieler 2Spieler 1
Spielfeld
Einführungs praktikum Roboterprogrammierung
3. Fahrbarer Roboter
Fachhochschule Südwestfalen – Fachbereich Elektrische Energietechnik - Campus Soest 30.10.2015 10 / 10
Abbildung 11 – Spielfeld und Startanordnung beim SumoBOT
3. Ziel eines Matches ist es den anderen Roboter
a. aus dem kreisförmigen Spielfeld zu befördern. Hierzu muss der Roboter komplett
außerhalb der schwarzen Spielfeldbegrenzung sein. Natürlich verliert ein Roboter auch,
wenn er ohne gegnerische Einwirkung das Spielfeld verlässt.
b. navigationsunfähig zu machen, z.B. indem er auf die Seite gelegt wird. Hierzu sind alle
Formen von Hilfsmitteln an den Robotern gestattet, sofern Sie aus Standard-LEGO-
Komponenten gefertigt wurden.
4. Ein Match dauert höchstens fünf Minuten. Sollte zu diesem Zeitpunkt keiner der beiden Roboter
gewonnen haben, endet das Match unentschieden und es wird ein Wiederholungsmatch angesetzt.
3.3.1 Implementierung eines SumoBOT-Programmes
1. Implementieren Sie ein komplettes Programm für einen SumoBOT-Roboter. Überlegen Sie
welche Elemente der vorherigen Aufgabenteile Sie hierzu wiederverwenden können.
Bedenken Sie, dass zum einen sichergestellt werden muss, dass der Roboter das Spielfeld
nicht selbstständig verlässt. Zum anderen muss aber auch eine geeignete Strategie gefunden
werden, die es ermöglicht den Gegner zu schlagen.
SumoBOT.vi Speichern Sie Ihr Programm unter neuem Dateinamen