Die Drohne soll aus der Luft Fotos machen und diese an die Bodenstation schicken.
Während des Fluges soll die Kommunikation zwischen Bediener und Drohne möglich sein.
Anschließend soll es sicher auf dem Boden landen.
Für das W-LAN benötigen wir zuvor einige kleine Einstellungen. Wir ändern unter /etc/network/interfaces ein Paar Einstellungen. Hierzu geben wir ein:
sudo nano /etc/network/interfaces
Und verweisen auf /etc/wpa_supplicant/wpa_supplicant.conf, wo wir unsere Verbindungsdaten eintragen. Die Datei wpa_supplicant.conf muss nun ebenfalls bearbeitet werden. Dort tragen wir den Netzwerknamen ein, in welches wir uns einwählen möchten und hinterlegen dort auch den W-LAN-Schlüssel. Nach einem Neustart verbindet sich der Raspberry automatisch in das konfigurierte Netzwerk.
Verbindung zum Monitor ist möglich über Putty. Zuvor muss das Programm Putty installiert sein. Einfacher und schneller geht die Verbindung per HDMI-Kabel zum Monitor. Unter Umständen ist die serielle Schnittstelle des Raspberry-Pi nicht aktiv. Hierzu muss man die folgenden Anweisungen befolgen, um die Schnittstelle zu aktivieren. raspi-config
Advance Options -> Serial -> Ja --> „Enable“
Anschließend kann man via startx die grafische Benutzeroberfläche starten. Danach kann man manuell das W-Lan anschalten.
- 50 Bilder pro Sekunde
- Für alle Bibliotheken: Raspberry-Pi, Arduino etc.
- Programmiersprachen: Python, C / C ++
- Schnittstellen: Serial, SPI, USB, Digital/Analog, UART, I2C
- Blickwinkel: 75° horizontal, 47° vertikal
- Kosten: ca. 105 €
Software zur Verwendung der Pixy-Cam-Kamera auf dem Raspberry-Pi oder Windows-Rechner.
Fokus einstellen
Um die Kamera etwas schärfer zu stellen dreht man die Linse so weit auf, bis das Programm ein schärferes Bild zeigt. Die Auflösung der Kamera ist ziemlich gering, weswegen das Bild etwas verpixelt ist.
Farbsignatur anlernen
Die Kamera Pixy-Cam kann sich bis zu 7 Farbsignaturen merken. Zuerst positioniert man das Objekt vor der Kamera. Dann klickt man in der Menüleiste auf Action→Set Signature 1: Das Bild wird eingefroren, sodass man ein Rechteck um die erkannte Farbfläche ziehen kann. Danach wird die Farbe erkannt und unter s=1 gespeichert.
Anlernen ohne PixyMon
Es gibt die Möglichkeit Objekte ohne PixyMon anzulernen. Dazu drückt man den weißen Taster auf der Kamera solange, bis die LED rot leuchtet. Dann hält man das Objekt vor die Kamera und kann anhand der LED Farbe, die erkannte Farbe sehen. Anschließend betätigt man nochmal den Taster und die Signatur wird gespeichert. Leider, funktioniert diese Methode nur beschränkt, weshalb man die Signaturen lieber über PixyMon anlernen sollte.
Der Apache Server wird für die Anwendung eines Webservers benötigt. Mit den folgenden Codes laden wir den beliebtesten Webserver und die Serversprache PHP auf unseren Raspberry-Pi:
sudo apt-get install apache 2 php5 sudo /etc/init.d/apache 2 start oder stop /var/www.index.html cd /var/www sudo nano index.html
Anschließend meldet man sich mit einer ssh-Verbindung und der zuvor ermittelten IP-Adresse auf dem Raspberry-Pi an.
Zur Gestaltung der Website wird eine CSS-Datei angelegt. In der CSS-Datei legen wir zunächst die Hintergrundfarbe auf grau fest und setzen den Außenrandabstand auf 0. Durch den Befehl Front Family wird die Schriftart der Webseite festgelegt. Wir haben uns hier für Georgia entschieden. Da es sich aber um keine Standardschriftart handelt, haben wir Arial als zweite Schriftart gewählt. Diese wird erst benutzt, wenn die ersten beim Nutzer der Webseite nicht verfügbar ist.
Webseitengröße bestimmen
Nun bestimmten wir den äußeren Abstand und die Breite der Webseite. Der Container ist auf eine Breite mit 900 Pixel eingestellt. Durch margin-left und margin-right wird der automatische Abstand nach links und rechts festgelegt. Dadurch kann die Webseite sich optimal auf die verschiedenen Endgeräte anpassen. Padding ist für einen erzwungenen Leerraum zwischen dem Inhalt eines Elements und seinem eigenen Elementrand. Hier setzen wir ihn auf 0. Nach oben ist ein Abstand von 15 Pixel festgelegt. Den Container haben wir mit deinen Rahmen versehen (border-radius). Overflow:hidden legt fest, dass ein übergroßer Inhalt eines Elements beschnitten wird.
Header
Im Bereich Header kümmern wir uns um die Gestaltung des Kopfes. Als erstes legen wir die Höhe des Kopfes mit 150 Pixel fest. Am Rand fügen wir danach das Logo der Hochschule Niederrhein ein.
Navigationszeile
Hier wird die Höhe der Navigationszeile festgesetzt mit 30 Pixel. Als nächsten legen wir die Farbe der Schrift in der Navigationszeile fest (color:white). Durch den Befehl text-decoration: none können wir bestimmen, ob der Text unterstrichen oder fett gedruckt werden soll. In diesen Fall verhindern wir dadurch, dass die hinterlegten Links unterstrichen angezeigt werden. In der Navigationszeile sollen die Elemente hintereinanderstehen. Dies lässt sich am einfachsten durch eine Liste gestalten. Allerdings sollen keine Aufzählungszeichen oder Nummerierungen an den Elementen vorhanden sein. Dies erreichen wir durch list-style-type auf None zu setzen. Die Elemente sollen an den Links am Rand der Navigationszeile starten, was wir durch den Befehl float: left erreichen. Mit margin legen wir erneute die Außenabstände in der folgenden Reihenfolge fest: oben, rechts, unten, links. In diesen Abschnitt legen wir fest, dass in der Navigationszeile die Links unterstrichen werden, sobald wir den Mauszeiger auf die dort hinterlegten Links bewegen. Dadurch wird für den Nutzer besser ersichtlich, wo er sich mit dem Mauszeiger befindet.
Fußzeile
In der Fußzeile möchten wir, dass der Text mittig zu lesen ist (text-align: center). Außerdem soll ein Strich die Fußzeile von den Rest der Seite abtrennen (border-top: 1px solid black). Den Leerraum legen wir mit 2 Pixeln fest.
Zunächst müssen wir den Kopf unserer Webseite gestalten. Dafür legen wir als erstes den Titel mit Drohne Livestream fest. Durch den ersten Meta Befehl erreichen wir, dass sich die Seite einmal pro Sekunde aktualisiert. Unter Google kann mein unsere Webseite durch den Suchbegriff „Drohne eHealth“ finden. Dies haben wir durch description content bestimmt. Zum Schluss verlinken wir unsere Webseite mit den nötigen Stylesheet und fügen javascript als Sprache ein.
Die Kommunikation zwischen der Drohne und der Webseite wird über ein Python-Programm geregelt. Bei der Kommunikation geht es darum, ob die Pixy-Cam aus der Luft ein Objekt (Farbe) erkennt. Wenn die Pixy-Cam ein Objekt erfasst hat, wird die Pi-Kamera ein Foto machen, und dieses auf der Webseite darstellen. Solange soll die Drohne im „Hold-Modus“ in der Luft stehen. Ist auf dem Foto ein Objekt dargestellt, wonach gesucht wird, gibt es zwei Möglichkeiten. Erstens können wir der Drohne durch Anklicken des Start-Buttons mitteilen, dass sie weiterfliegen soll. Zweitens kann man durch Anklicken des Stopp-Buttons mitteilen, dass sie zurück fliegen soll. Damit dies gelingt, wird ein Ordner auf dem Raspberry-Pi erstellt, worauf die Webseite zugreift und der Raspberry-Pi via einem Python-Programm ebenfalls ständig abfragen in diesem Ordner durchführt.
Start-Button
In diesem Ordner schreibt die Webseite über das PHP-Script eine Datei mit dem Inhalt 1, wenn auf Start geklickt wird. Das Python-Programm schaut in diese Datei rein und erkennt die 1. Die 1 stellt eine Anweisung für den Flightcontroller dar, die Suche zu starten. Der Flightcontroller geht über in den Modus „Auto“. In diesem Modus fliegt die Drohne und scannt die Gegend über die Pixy-Cam ab.
Stopp-Button
Wenn auf der Webseite der Stopp-Button geklickt wird, schreibt das PHP-Script in die Datei eine 0. Sobald der Raspberry-Pi durch die Abfrage des Python-Programms entdeckt, gibt er die Anweisung an den Flightcontroller, dass er die Suche unterbricht und auf den Flugmodus „Attitude Hold“ wechselt. In diesem Modus bleibt die Drohne an Ort und Stelle.
Pixy-Cam erkennt ein Objekt
Sobald die Drohne ein Objekt erkennt, schreibt das Python-Programm in die Datei eine 1 und ändert den Flugmodus auf „Attitude Hold“. Wir sehen das Bild auf der Webseite und können über Start und Stopp die Drohne weiter fliegen lassen oder zurückkommen lassen.
Pixy-Cam erkennt kein Objekt
Findet die Drohne kein Objekt, schreibt das Python-Programm in die Datei eine 0. Solange in der Datei eine 0 steht, fliegt die Drohne weiter und wir können die Suche über Stopp anhalten.
Das Python-Programm wird durch den folgenden Befehl im Editor aufgerufen:
sudo python get_blocksNewNew.py
from __future__ import print_function from pixy import * from ctypes import * import RPi.GPIO as GPIO import time from dronekit import connect, VehicleMode, LocationGlobalRelative import os import os.path status = 0 class Blocks (Structure): _fields_ = [ ("type", c_uint), ("signature", c_uint), ("x", c_uint), ("y", c_uint), ("width", c_uint), ("height", c_uint), ("angle", c_uint) ] #def search(): #vehicle.mode = VehicleMode("Auto_Loiter") #vehicle.armed = True #def stop(): #vehicle.mode = VehicleMode("ALTCTL") #vehicle.armed = True connection_string = '/dev/ttyACM0' if not connection_string: import dronekit_sitl sitl = dronekit_sitl.start_default() connection_string = sitl.connection_string() # Connect to the Vehicle print('Connecting to vehicle on: %s' % connection_string) vehicle = connect(connection_string, wait_ready=True) GPIO.setmode(GPIO.BOARD) GPIO.setup(40, GPIO.OUT) pixy_init() blocks = BlockArray(100) frame = 0 GPIO.output(40, GPIO.HIGH)#Schalte Lampe ein time.sleep(5) GPIO.output(40, GPIO.LOW)#Schalte Lampe aus # Wait for blocks # while 1: if (os.path.exists("/tmp/Status") and status == 0): #search() status = 1 elif (not os.path.exists("/tmp/Status") and status == 1 ) : #stop() status = 0 count = pixy_get_blocks(100, blocks) if count > 0: #print ("Objekt gefunden") GPIO.output(40, GPIO.HIGH)#Schalte Lampe ein file = open('/home/pi/Drohne/Found','w+') try: os.remove('/tmp/Status') except: pass else: #print ("Objekt nicht gefunden") GPIO.output(40, GPIO.LOW)#Schalte Lampe aus try: os.remove('/home/pi/Drohne/Found') except: KeyboardInterrupt time.sleep(1)
https://edimax.freshdesk.com/support/solutions/articles/14000057252-how-to-install-ew-7833uac-adapter-in-linux-running-kernel-higher-than-v4-4 https://elv.de/pixy-cam-fuer-minicomputer-wie-raspberry-pi-arduino-und-co.html https://www.conrad.at/de/kameramodul-pixy-cam-passend-fuer-arduino-boards-raspberry-pi-banana-pi-pcduino-1364834.html
Quellen für die HTML und CSS Seite
https://www.youtube.com/watch?v=j-6eOHxtd1M https://www.youtube.com/watch?v=fItb2xzsZrI&t=15s https://www.youtube.com/watch?v=ViiybTKxyuo https://www.youtube.com/watch?v=65cI1SN0isg
Quellen für PHP
Unterlagen aus dem ersten Semester: Script zum Raspberry-Pi Teil 2 https://www.php-einfach.de/php-tutorial/if-anweisungen/ http://www.phpbox.de/php_befehle/file_exists.php http://php.net/manual/de/control-structures.elseif.php https://www.php-kurs.com/variablen-in-php-nutzen.htm https://www.w3schools.com/php/php_syntax.asp