Inhaltsverzeichnis:

Raspberry Pi - Autonomer Mars-Rover mit OpenCV-Objektverfolgung - Gunook
Raspberry Pi - Autonomer Mars-Rover mit OpenCV-Objektverfolgung - Gunook

Video: Raspberry Pi - Autonomer Mars-Rover mit OpenCV-Objektverfolgung - Gunook

Video: Raspberry Pi - Autonomer Mars-Rover mit OpenCV-Objektverfolgung - Gunook
Video: Assembling the 4tronix M.A.R.S. Rover Kit 2024, November
Anonim
Raspberry Pi - Autonomer Mars-Rover mit OpenCV-Objektverfolgung
Raspberry Pi - Autonomer Mars-Rover mit OpenCV-Objektverfolgung

Angetrieben von einem Raspberry Pi 3, Open CV-Objekterkennung, Ultraschallsensoren und DC-Getriebemotoren. Dieser Rover kann jedes Objekt verfolgen, für das er trainiert wurde, und sich auf jedem Gelände bewegen.

Schritt 1: Einführung

Image
Image
Erforderliche Materialien und Software
Erforderliche Materialien und Software

In diesem Instructables werden wir einen autonomen Mars Rover bauen, der Objekte erkennen und sie mit der Open CV-Software auf einem Raspberry Pi 3 verfolgen kann, mit der Option, ein Webcam-Gerät oder die ursprüngliche Himbeer-Pi-Kamera zu verwenden. Es ist auch mit einem Ultraschallsensor ausgestattet, der auf einem Servo montiert ist, um seinen Weg in dunklen Umgebungen zu verfolgen, in denen die Kamera nicht funktioniert. Von Pi empfangene Signale werden an den Motortreiber-IC (L293D) gesendet, der 4 x 150 U/min Gleichstrommotoren antreibt, die auf einem Gehäuse aus PVC-Rohren montiert sind.

Schritt 2: Benötigte Materialien und Software

Erforderliche Materialien und Software
Erforderliche Materialien und Software
Erforderliche Materialien und Software
Erforderliche Materialien und Software

Benötigte Materialien

  1. Raspberry Pi (Alle außer Null)
  2. Raspberry PI Kamera oder eine Webcam
  3. L293D Motortreiber-IC
  4. Roboterräder (7x4cm) X 4
  5. DC-Getriebemotoren (150 U/min) X 4
  6. PVC-Rohre für Chassis

Software erforderlich

  1. Spachtelmasse für SSH ing the Pi
  2. Lebenslauf zur Objekterkennung öffnen

Schritt 3: Aufbau des Rover-Chassis

Bau des Rover-Chassis
Bau des Rover-Chassis
Bau des Rover-Chassis
Bau des Rover-Chassis
Bau des Rover-Chassis
Bau des Rover-Chassis

Um dieses PVC-Chassis zu bauen, benötigen Sie

  • 2 x 8"
  • 2 x 4"
  • 4 T-Verbindungen

Ordnen Sie die PVC-Rohre in einer leiterartigen Struktur an und führen Sie sie in T-Verbindungen ein. Sie können das PVC-Dichtmittel verwenden, um die Fugen noch stärker zu machen.

Die DC-Getriebemotoren werden mit Schellen mit dem PVC-Rohrchassis verbunden und anschließend werden die Räder mit Schrauben mit den Motoren verbunden.

Schritt 4: Aufbau einer Ultraschall-Entfernungsmesserbaugruppe

Aufbau einer Ultraschall-Entfernungsmesserbaugruppe
Aufbau einer Ultraschall-Entfernungsmesserbaugruppe

Die Ultraschall-Entfernungsmesserbaugruppe besteht aus einem HC-SR04-Ultraschallsensor, der mit einem Micro-Servomotor verbunden ist. Die Kabel werden mit dem Ultraschallsensor vorkonfektioniert, bevor sie in das Kunststoffgehäuse gesteckt werden, das über Schrauben mit dem Servomotor verbunden ist.

Schritt 5: Schaltpläne und elektrische Anschlüsse

Schaltpläne und elektrische Anschlüsse
Schaltpläne und elektrische Anschlüsse
Schaltpläne und elektrische Anschlüsse
Schaltpläne und elektrische Anschlüsse

Bitte stellen Sie die elektrischen Anschlüsse gemäß beiliegendem Schaltplan her.

Schritt 6: SSH- und Open-CV-Installation

SSH- und Open-CV-Installation
SSH- und Open-CV-Installation

Jetzt müssen wir eine SSH-Verbindung zu unserem Himbeer-Pi herstellen, um die erforderliche Software zu installieren. Wir beginnen mit SSHing zu unserem Raspberry Pi. Stellen Sie sicher, dass Ihr Pi mit demselben Router wie Ihr PC verbunden ist und Sie wissen, dass seine IP-Adresse ihm von Ihrem Router zugewiesen wurde. Öffnen Sie nun eine Eingabeaufforderung oder PUTTY, wenn Sie unter Windows arbeiten, und führen Sie den folgenden Befehl aus.

ssh [email protected]

Die IP Ihres Pi könnte anders sein, meine ist 192.168.1.6.

Geben Sie nun Ihr Standardpasswort ein - "raspberry"

Nachdem Sie nun eine SSH-Verbindung zu Ihrem Pi hergestellt haben, beginnen wir mit der Aktualisierung mit diesem Befehl.

sudo apt-get update && sudo apt-get upgrade

Lassen Sie uns jetzt die erforderlichen Entwicklertools installieren, sudo apt-get install build-essential cmake pkg-config

Als nächstes müssen wir einige Bild-E/A-Pakete installieren, die unserem Pi helfen, verschiedene Bildformate von der Festplatte abzurufen.

sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

Jetzt einige Pakete zum Abrufen von Videos, Live-Streaming und Optimieren der OpenCV-Leistung

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

sudo apt-get install libxvidcore-dev libx264-dev

sudo apt-get install libgtk2.0-dev libgtk-3-dev

sudo apt-get install libatlas-base-dev gfortran

Wir müssen auch Python 2.7- und Python 3-Header-Dateien installieren, damit wir OpenCV mit Python-Bindungen kompilieren können

sudo apt-get install python2.7-dev python3-dev

Herunterladen des OpenCV-Quellcodes

cd ~

wget -O opencv.zip

opencv.zip entpacken

Opencv_contrib-Repository herunterladen

wget -O opencv_contrib.zip

opencv_contrib.zip entpacken

Es wird auch empfohlen, eine virtuelle Umgebung für die Installation von OpenCV zu verwenden.

sudo pip install virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

Nun, da virtualenv und virtualenvwrapper installiert wurden, müssen wir unser ~/.profile aktualisieren, um die folgenden Zeilen unten aufzunehmen

export WORKON_HOME=$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh

Erstellen Sie Ihre virtuelle Python-Umgebung

mkvirtualenv cv -p python2

Wechseln Sie in die erstellte virtuelle Umgebung

Quelle ~/.profile

Arbeitslebenslauf

Installieren von NumPy

pip install numpy

Kompilieren und installieren Sie OpenCV

cd ~/opencv-3.3.0/

mkdir-Build

CD-Build

cmake -D CMAKE_BUILD_TYPE=RELEASE / -D CMAKE_INSTALL_PREFIX=/usr/local / -D INSTALL_PYTHON_EXAMPLES=ON / -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/modules / -D BUILD_. EXAMPLES=ON

Endlich OpenCV kompilieren

mache -j4

Nachdem dieser Befehl ausgeführt wurde. Alles, was Sie tun müssen, ist es zu installieren.

sudo machen config

sudo ldconfig

Schritt 7: Ausführen des Python-Codes für Rover

Image
Image

Erstellen Sie eine Python-Datei namens tracker.py und fügen Sie den folgenden Code hinzu.

sudo nano tracker.py

Code:-

#ASAR-Programm

#Dieses Programm verfolgt einen roten Ball und weist einen Himbeer-Pi an, ihm zu folgen. import sys sys.path.append('/usr/local/lib/python2.7/site-packages') import cv2 import numpy as np import os import RPi. GPIO as IO IO.setmode(IO. BOARD) IO.setup (7, IO. OUT) IO.setup(15, IO. OUT) IO.setup(13, IO. OUT) IO.setup(21, IO. OUT) IO.setup(22, IO. OUT) def fwd(): IO.output(21, 1)#Linker Motor vorwärts IO.output(22, 0) IO.output(13, 1)#Rechter Motor vorwärts IO.output(15, 0) def bac(): IO.output (21, 0)#Linker Motor rückwärts IO.output(22, 1) IO.output(13, 0)#Rechter Motor rückwärts IO.output(15, 1) def ryt(): IO.output(21, 0) #Linker Motor rückwärts IO.output(22, 1) IO.output(13, 1)#Rechter Motor vorwärts IO.output(15, 0) def lft(): IO.output(21, 1)#Linker Motor vorwärts IO.output(22, 0) IO.output(13, 0)#Rechter Motor rückwärts IO.output(15, 1) def stp(): IO.output(21, 0)#Linker Motorstopp IO.output(22, 0) IO. Ausgang(13, 0)#Rechts Motorstopp IO. Ausgang(15, 0) ############################ ################################################ ##################### def main(): capWebcam = cv2. VideoCapture(0) # deklariere a VideoCapture-Objekt und mit Webcam verknüpfen, 0 => 1. Webcam verwenden # Originalauflösung anzeigen print "default resolution = " + str(capWebcam.get(cv2. CAP_PROP_FRAME_WIDTH)) + "x" + str(capWebcam.get(cv2. CAP_PROP_FRAME_HEIGHT)) capWebcam.set(cv2. CAP_PROP_FRAME_WIDTH, 320.0) # ändere die Auflösung auf 320x240 für eine schnellere Verarbeitung capWebcam.set(cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # zeige die aktualisierte Auflösung print "updated resolution = " + str(capWebcam.get(cv2. CAP_PROP_FRAME_WIDTH)) + "x" + str(capWebcam.get(cv2. CAP_PROP_FRAME_HEIGHT)) if capWebcam.isOpened() == False: # überprüfen, ob das VideoCapture-Objekt erfolgreich mit der Webcam verknüpft wurde print "Fehler: capWebcam nicht erfolgreich zugegriffen\n\n" # wenn nicht, drucke die Fehlermeldung auf std out os.system("pause") # pausiere, bis der Benutzer eine Taste drückt, damit der Benutzer die Fehlermeldung sehen kann # und die Funktion beenden (die das Programm beendet) # end if while cv2.waitKey(1) != 27 und capWebcam.isOpened(): # bis die Esc-Taste gedrückt wird oder die Webcam-Verbindung unterbrochen wird blnFrameReadSuccessf ully, imgOriginal = capWebcam.read() # nächsten Frame lesen wenn nicht blnFrameReadSuccessfully oder imgOriginal ist None: # wenn Frame nicht erfolgreich gelesen wurde "Fehler: Frame nicht von Webcam gelesen\n" ausgeben # Fehlermeldung an std out os.system. ausgeben ("pause") # Pause, bis der Benutzer eine Taste drückt, damit der Benutzer die Fehlermeldung sehen kann break # exit while loop (beendet das Programm) # end if imgHSV = cv2.cvtColor(imgOriginal, cv2. COLOR_BGR2HSV) imgThreshLow = cv2.inRange(imgHSV, np.array([0, 135, 135]), np.array([18, 255, 255])) imgThreshHigh = cv2.inRange(imgHSV, np.array([165, 135, 135]), np. array([179, 255, 255])) imgThresh = cv2.add(imgThreshLow, imgThreshHigh) imgThresh = cv2. GaussianBlur(imgThresh, (3, 3), 2) imgThresh = cv2.dilate(imgThresh, np.ones((5, 5), np.uint8)) imgThresh = cv2.erode(imgThresh, np.ones((5, 5), np.uint8)) intRows, intColumns = imgThresh.shape circles = cv2. HoughCircles(imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # Variable Kreise mit allen Kreisen im verarbeiteten Bild füllen, wenn Kreise is not None: # diese Zeile ist notwendig, damit das Programm nicht in der nächsten Zeile abstürzt, wenn keine Kreise gefunden wurden IO.output(7, 1) für Kreis in Kreisen[0]: # für jeden Kreis x, y, Radius = Kreis # x, y und Radius ausdrucken "ball position x = " + str(x) + ", y = " + str(y) + ", radius = " + str(radius) # print ball position und radius obRadius = int(radius) xAxis = int(x) if obRadius>0 & obRadius100&xAxis180: print("Bewegt sich nach rechts") ryt() elif xAxis<100: print("Bewegt sich nach links") lft() else: stp() else: stp () cv2.circle(imgOriginal, (x, y), 3, (0, 255, 0), -1) # kleinen grünen Kreis in der Mitte des erkannten Objekts zeichnen cv2.circle(imgOriginal, (x, y), radius, (0, 0, 255), 3) # roten Kreis um das erkannte Objekt zeichnen # Ende für # Ende falls sonst: IO.output(7, 0) cv2.namedWindow("imgOriginal", cv2. WINDOW_AUTOSIZE) # Fenster erstellen, verwenden Sie WINDOW_AUTOSIZE für eine feste Fenstergröße cv2.namedWindow("imgThresh", cv2. WINDOW_AUTOSIZE) # oder verwenden Sie WINDOW_NORMAL, um die Größenänderung des Fensters zu ermöglichen cv2.imshow("imgOriginal", imgOri ginal) # show windows cv2.imshow("imgThresh", imgThresh) # end while cv2.destroyAllWindows() # Fenster aus dem Speicher entfernen return ##################### ################################################ ############################ if _name_ == "_main_": main()

Jetzt müssen Sie nur noch das Programm ausführen

python tracker.py

Herzlichen Glückwunsch! Ihr selbstfahrender Rover ist fertig! Der auf Ultraschallsensor basierende Navigationsteil wird bald fertiggestellt und ich werde dieses anweisbare aktualisieren.

Danke fürs Lesen!

Empfohlen: