R2-Bier2: Unterschied zwischen den Versionen

Aus Das Projektwiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:

== Motivation ==
== Motivation ==


Zeile 7: Zeile 6:


Das Konzept des '''R2-Bier2''' ist relativ einfach gehalten. Der Raspberry fungiert als Hauptrechner. Dabei gibt der Raspberry über seine GPIO-Pins Befehle an den Arduino und veranlasst den Roboter so zur Bewegung. Dabei gibt der Raspberry zuerst den Befehl, dass sich der Roboter langsam im Kreis drehen soll und aktiviert gleichzeitig die Gesichtserkennung. Sobald diese ein Gesicht erkannt hat, gibt der Raspberry den Befehl zum Stoppen der Drehung. Dadurch steht der Roboter so ausgerichtet, dass er durch eine einfache Vorwärtsbewegung direkt auf das erkannte Gesicht zufahren kann. Nun fährt der Roboter solange geradeaus, bis die Abgrundserkennung die Tischkannte erkannt hat. Ist dies geschehen verweilt der Roboter, an seiner Position, bis der Nutzer die Ware entsprechend abgeladen hat und über einen Taster den Befehl gibt, dass der Roboter zurück fahren soll. Ist dies geschehen, fährt der Roboter auf seine Ausgangsposition zurück. Die genaue Realisierung der Nutzung der GPIO-Pins, der Abstandserkennung, der Gesichtserkennung und der Kommunikation mit dem Arduino werden in den folgenden Abschnitten erläutert.
Das Konzept des '''R2-Bier2''' ist relativ einfach gehalten. Der Raspberry fungiert als Hauptrechner. Dabei gibt der Raspberry über seine GPIO-Pins Befehle an den Arduino und veranlasst den Roboter so zur Bewegung. Dabei gibt der Raspberry zuerst den Befehl, dass sich der Roboter langsam im Kreis drehen soll und aktiviert gleichzeitig die Gesichtserkennung. Sobald diese ein Gesicht erkannt hat, gibt der Raspberry den Befehl zum Stoppen der Drehung. Dadurch steht der Roboter so ausgerichtet, dass er durch eine einfache Vorwärtsbewegung direkt auf das erkannte Gesicht zufahren kann. Nun fährt der Roboter solange geradeaus, bis die Abgrundserkennung die Tischkannte erkannt hat. Ist dies geschehen verweilt der Roboter, an seiner Position, bis der Nutzer die Ware entsprechend abgeladen hat und über einen Taster den Befehl gibt, dass der Roboter zurück fahren soll. Ist dies geschehen, fährt der Roboter auf seine Ausgangsposition zurück. Die genaue Realisierung der Nutzung der GPIO-Pins, der Abstandserkennung, der Gesichtserkennung und der Kommunikation mit dem Arduino werden in den folgenden Abschnitten erläutert.

== Programmierung ==

=== Ansteuerung der GPIO-Pins mittels WiringPi ===

Für dieses Projekt ist die Ansteuerung der GPIO-Pins des Raspberrys eines der wichtigsten Fähigkeiten des Programms, da ohne die GPIO-Pins weder die Kommunikation mit dem Arduino, noch die Abgrundserkennung funktionieren würden. Für die einfache Realisierung der GPIO Ansteuerung wurde auf die frei verfügbare Bibliothek WiringPi zurückgegriffen. WiringPi steht unter der GNU LGPLv3. Die Benutzung von WiringPi ähnelt absichtlich der GPIO Ansteuerung der Arduino IDE. WiringPi wird über GIT gepflegt. Dadurch kann der Quellcode einfach aus dem GIT geklont und compiliert werden. Für eine genaue Anleitung zur Installation von WiringPi sei auf [Dro16] verwiesen. Für die Nutzung von WiringPi muss die Bibliothek, wie jede andere genutzte Bibliothek auch, im Präprozessor definiert werden. Dafür muss im Präprozessor folgende Zeile eingefügt werden:

<code><nowiki>
#include <wiringPi.h>
</nowiki></code>

Ist dies geschehen, kann im weiteren Programm auf die Funktionen der Bibliothek zurück gegriffen werden. Bei der Verwendung von GPIO-Pins muss zuerst der Modus der Pins definiert werden. Im hier dokumentierten Programm erfolgt das über die Methode <code>setUpPins()</code>. Diese ist wie folgt aufgebaut:

<pre>
#include <wiringPi.h>
#define TRIGGER 9
#define ECHO 7
#define STARTER 8

void setUpPins(){
wiringPiSetup();
pinMode(TRIGGER,OUTPUT);
pinMode(ECHO,INPUT);
pinMode(STARTER,OUTPUT);
digitalWrite(TRIGGER,LOW);
digitalWrite(STARTER,LOW);
}
</pre>

Version vom 9. Februar 2017, 16:51 Uhr

Motivation

Das Projekt R2-Bier2 ist im Modul Eingebettete Systeme am Campus Velbert/Heiligenhaus entstanden. Ziel des Projekts war die Programmierung eines Servierroboters, welcher Gesichter erkennen und auf diese zufahren soll, bis eine Tischkante erkannt wird. Dadurch wird an das erkannte Gesicht eine Ware beliebiger Art -- im Idealfall Bier -- geliefert. Als Grundlage wird dafür eine Roboterplattform, welche im Rahmen des Projekts \textit{Hochschulsonde} im Modul \textit{Vertiefung Systemtechnik} im Wintersemester 2012/13 entstanden ist, verwendet. Die bereitgestellte Software des Projekts Hochschulsonde steht unter der GNU-GPL und erledigt vollständig die Motorsteuerung. Die Software läuft auf einem AVR-Mikrocontroller AtMega2560, welcher sich auf einem ITEADUINO MEGA 2560 Board (im Folgenden als Arduino bezeichnet) befindet. Die Gesichts- und Abgrunderkennung wird mithilfe eines Raspberry Pi 3 (im Folgenden als Raspberry bezeichnet) ausgeführt.

Konzept

Das Konzept des R2-Bier2 ist relativ einfach gehalten. Der Raspberry fungiert als Hauptrechner. Dabei gibt der Raspberry über seine GPIO-Pins Befehle an den Arduino und veranlasst den Roboter so zur Bewegung. Dabei gibt der Raspberry zuerst den Befehl, dass sich der Roboter langsam im Kreis drehen soll und aktiviert gleichzeitig die Gesichtserkennung. Sobald diese ein Gesicht erkannt hat, gibt der Raspberry den Befehl zum Stoppen der Drehung. Dadurch steht der Roboter so ausgerichtet, dass er durch eine einfache Vorwärtsbewegung direkt auf das erkannte Gesicht zufahren kann. Nun fährt der Roboter solange geradeaus, bis die Abgrundserkennung die Tischkannte erkannt hat. Ist dies geschehen verweilt der Roboter, an seiner Position, bis der Nutzer die Ware entsprechend abgeladen hat und über einen Taster den Befehl gibt, dass der Roboter zurück fahren soll. Ist dies geschehen, fährt der Roboter auf seine Ausgangsposition zurück. Die genaue Realisierung der Nutzung der GPIO-Pins, der Abstandserkennung, der Gesichtserkennung und der Kommunikation mit dem Arduino werden in den folgenden Abschnitten erläutert.

Programmierung

Ansteuerung der GPIO-Pins mittels WiringPi

Für dieses Projekt ist die Ansteuerung der GPIO-Pins des Raspberrys eines der wichtigsten Fähigkeiten des Programms, da ohne die GPIO-Pins weder die Kommunikation mit dem Arduino, noch die Abgrundserkennung funktionieren würden. Für die einfache Realisierung der GPIO Ansteuerung wurde auf die frei verfügbare Bibliothek WiringPi zurückgegriffen. WiringPi steht unter der GNU LGPLv3. Die Benutzung von WiringPi ähnelt absichtlich der GPIO Ansteuerung der Arduino IDE. WiringPi wird über GIT gepflegt. Dadurch kann der Quellcode einfach aus dem GIT geklont und compiliert werden. Für eine genaue Anleitung zur Installation von WiringPi sei auf [Dro16] verwiesen. Für die Nutzung von WiringPi muss die Bibliothek, wie jede andere genutzte Bibliothek auch, im Präprozessor definiert werden. Dafür muss im Präprozessor folgende Zeile eingefügt werden:

#include <wiringPi.h>

Ist dies geschehen, kann im weiteren Programm auf die Funktionen der Bibliothek zurück gegriffen werden. Bei der Verwendung von GPIO-Pins muss zuerst der Modus der Pins definiert werden. Im hier dokumentierten Programm erfolgt das über die Methode setUpPins(). Diese ist wie folgt aufgebaut:

#include <wiringPi.h>
#define TRIGGER 9
#define ECHO 7
#define STARTER 8

void setUpPins(){
	wiringPiSetup();
	pinMode(TRIGGER,OUTPUT);
	pinMode(ECHO,INPUT);
	pinMode(STARTER,OUTPUT);
	digitalWrite(TRIGGER,LOW);
	digitalWrite(STARTER,LOW);
}