10
3. Fahrbarer Roboter Autor: Fachhochschule Südwestfalen Fachbereich Elektrische Energietechnik Campus Soest Einführungs praktikum Roboterprogrammierung

Roboter Einführungs praktikum - FH-SWF-Soest-EETlips.fh-swf.de/ftp/datentechnik/Mindstorms - Einfuehrung in die... · Implementierung des „Labyrinth-Roboters“ in LabVIEW 1. Implementieren

  • 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