Inhaltsverzeichnis:
- Schritt 1: Einführung
- Schritt 2: Benötigte Materialien und Software
- Schritt 3: Aufbau des Rover-Chassis
- Schritt 4: Aufbau einer Ultraschall-Entfernungsmesserbaugruppe
- Schritt 5: Schaltpläne und elektrische Anschlüsse
- Schritt 6: SSH- und Open-CV-Installation
- Schritt 7: Ausführen des Python-Codes für Rover
Video: Raspberry Pi - Autonomer Mars-Rover mit OpenCV-Objektverfolgung - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:17
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
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
Benötigte Materialien
- Raspberry Pi (Alle außer Null)
- Raspberry PI Kamera oder eine Webcam
- L293D Motortreiber-IC
- Roboterräder (7x4cm) X 4
- DC-Getriebemotoren (150 U/min) X 4
- PVC-Rohre für Chassis
Software erforderlich
- Spachtelmasse für SSH ing the Pi
- Lebenslauf zur Objekterkennung öffnen
Schritt 3: Aufbau 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
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
Bitte stellen Sie die elektrischen Anschlüsse gemäß beiliegendem Schaltplan her.
Schritt 6: 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.
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
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:
Heimwerken -- Einen Spinnenroboter herstellen, der mit einem Smartphone mit Arduino Uno gesteuert werden kann – wikiHow
Heimwerken || Wie man einen Spider-Roboter herstellt, der mit einem Smartphone mit Arduino Uno gesteuert werden kann: Während man einen Spider-Roboter baut, kann man so viele Dinge über Robotik lernen. Wie die Herstellung von Robotern ist sowohl unterhaltsam als auch herausfordernd. In diesem Video zeigen wir Ihnen, wie Sie einen Spider-Roboter bauen, den wir mit unserem Smartphone (Androi
Bewegungsaktivierte Cosplay Wings mit Circuit Playground Express - Teil 1: 7 Schritte (mit Bildern)
Bewegungsaktivierte Cosplay-Flügel mit Circuit Playground Express - Teil 1: Dies ist Teil 1 eines zweiteiligen Projekts, in dem ich Ihnen meinen Prozess zur Herstellung eines Paars automatisierter Feenflügel zeige. Der erste Teil des Projekts ist der Mechanik der Flügel, und der zweite Teil macht es tragbar und fügt die Flügel hinzu
Raspberry Pi mit Node.js mit der Cloud verbinden – wikiHow
So verbinden Sie Raspberry Pi mit Node.js mit der Cloud: Dieses Tutorial ist nützlich für alle, die einen Raspberry Pi mit Node.js mit der Cloud, insbesondere mit der AskSensors IoT-Plattform, verbinden möchten. Sie haben keinen Raspberry Pi? Wenn Sie derzeit keinen Raspberry Pi besitzen, empfehle ich Ihnen, sich einen Raspberry Pi zuzulegen
DIY Circuit Activity Board mit Büroklammern - HERSTELLER - STEM: 3 Schritte (mit Bildern)
DIY Circuit Activity Board mit Büroklammern | HERSTELLER | STEM: Mit diesem Projekt können Sie den Weg des elektrischen Stroms ändern, um durch verschiedene Sensoren zu laufen. Mit diesem Design können Sie zwischen dem Aufleuchten einer blauen LED oder dem Aktivieren eines Summers wechseln. Sie haben auch die Wahl, einen lichtabhängigen Widerstand mit
Raspbian in Raspberry Pi 3 B ohne HDMI installieren - Erste Schritte mit Raspberry Pi 3B - Einrichten Ihres Raspberry Pi 3: 6 Schritte
Raspbian in Raspberry Pi 3 B ohne HDMI installieren | Erste Schritte mit Raspberry Pi 3B | Einrichten Ihres Raspberry Pi 3: Wie einige von Ihnen wissen, sind Raspberry Pi-Computer ziemlich großartig und Sie können den gesamten Computer nur auf einer einzigen winzigen Platine bekommen. Das Raspberry Pi 3 Model B verfügt über einen Quad-Core 64-Bit ARM Cortex A53 mit 1,2 GHz getaktet. Damit ist der Pi 3 ungefähr 50