Cuprins:
- Pasul 1: Introducere
- Pasul 2: Materiale și software necesare
- Pasul 3: Construirea șasiului Rover
- Pasul 4: Construirea ansamblului telemetru cu ultrasunete
- Pasul 5: Scheme și conexiuni electrice
- Pasul 6: SSH și instalare CV deschis
- Pasul 7: Rularea codului Python pentru Rover
Video: Raspberry Pi - Rover autonom Mars cu urmărirea obiectelor OpenCV: 7 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:43
Alimentat de un Raspberry Pi 3, recunoașterea obiectelor Open CV, senzori cu ultrasunete și motoare de curent continuu. Acest rover poate urmări orice obiect pentru care este antrenat și se poate deplasa pe orice teren.
Pasul 1: Introducere
În acest Instructables, vom construi un Mars Rover autonom care poate recunoaște obiecte și le poate urmări folosind software-ul Open CV care rulează pe un Raspberry Pi 3 cu opțiunea de a utiliza un dispozitiv webcam sau camera originală raspberry pi. De asemenea, este echipat cu un senzor cu ultrasunete montat pe un servo pentru a-și urmări calea în medii întunecate în care camera nu ar funcționa. Semnalele primite de la Pi sunt trimise la driverul motorului IC (L293D) care acționează 4 x 150RPM motoare de curent continuu montate pe un corp construit cu țevi din PVC.
Pasul 2: Materiale și software necesare
Materiale necesare
- Raspberry Pi (Orice, dar zero)
- Cameră Raspberry PI sau o cameră web
- IC driver driver L293D
- Roți robot (7x4cm) X 4
- Motoare DC cu transmisie (150 rpm) X 4
- Țevi din PVC pentru șasiu
Este necesar software
- Chit pentru SSH ing Pi
- Deschideți CV pentru recunoașterea obiectelor
Pasul 3: Construirea șasiului Rover
Pentru a construi acest șasiu din PVC, veți avea nevoie
- 2 X 8"
- 2 X 4"
- 4 articulații T
Aranjați conductele din PVC într-o structură asemănătoare scării și introduceți-le în îmbinările în T. Puteți utiliza etanșantul din PVC pentru a face îmbinările și mai puternice.
Motoarele de curent continuu cu transmisie sunt conectate cu șasiul țevii din PVC folosind cleme și apoi roțile sunt conectate cu motoarele cu șuruburi.
Pasul 4: Construirea ansamblului telemetru cu ultrasunete
Ansamblul ultrasunete este construit folosind un senzor ultrasonic HC-SR04 conectat cu un motor Micro Servo. Cablurile sunt pre-conectate cu senzorul cu ultrasunete înainte de a fi introduse în carcasa de plastic care este conectată la servomotor prin șuruburi.
Pasul 5: Scheme și conexiuni electrice
Vă rugăm să faceți conexiunile electrice conform schemei de circuite atașate.
Pasul 6: SSH și instalare CV deschis
Acum, trebuie să introducem SSH în raspberry pi pentru a instala software-ul necesar. Vom începe prin SSHing către Raspberry Pi. Asigurați-vă că Pi-ul dvs. este conectat la același router ca și computerul și că știți că adresa IP i-a fost atribuită de router. Acum, deschideți un prompt de comandă sau PUTTY dacă sunteți pe Windows și rulați următoarea comandă.
IP-ul dvs. Pi poate fi diferit, al meu este 192.168.1.6.
Acum, introduceți parola implicită - „zmeură”
Acum, că aveți SSH în Pi, să începem prin actualizarea cu această comandă.
sudo apt-get update && sudo apt-get upgrade
Să instalăm acum instrumentele necesare pentru dezvoltatori, sudo apt-get install build-essential cmake pkg-config
În continuare, trebuie să instalăm câteva pachete de imagini I / O care vor ajuta Pi-ul nostru să preia diferite formate de imagine de pe disc.
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
Acum, unele pachete pentru preluarea de videoclipuri, streaming live și optimizarea performanței OpenCV
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
De asemenea, trebuie să instalăm fișierele antet Python 2.7 și Python 3, astfel încât să putem compila OpenCV cu legături python
sudo apt-get install python2.7-dev python3-dev
Descărcarea codului sursă OpenCV
cd ~
wget -O opencv.zip
dezarhivați opencv.zip
Descărcarea depozitului opencv_contrib
wget -O opencv_contrib.zip
dezarhivați opencv_contrib.zip
De asemenea, se recomandă utilizarea unui mediu virtual pentru instalarea OpenCV.
sudo pip instala virtualenv virtualenvwrapper
sudo rm -rf ~ /.cache / pip
Acum, că virtualenv și virtualenvwrapper au fost instalate, trebuie să ne actualizăm profilul ~ /.pentru a include următoarele linii în partea de jos
export WORKON_HOME = $ HOME /.virtualenvs export VIRTUALENVWRAPPER_PYTHON = / usr / bin / python3 source /usr/local/bin/virtualenvwrapper.sh
Creați-vă mediul virtual python
mkvirtualenv cv -p python2
comutați la mediul virtual creat
sursa ~ /.profil
workon cv
Instalarea NumPy
pip instalează numpy
Compilați și instalați 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
În cele din urmă compilați OpenCV
face -j4
După ce această comandă termină de rulat. Tot ce trebuie să faceți este să îl instalați.
sudo face config
sudo ldconfig
Pasul 7: Rularea codului Python pentru Rover
Creați un fișier Python numit tracker.py și adăugați următorul cod.
sudo nano tracker.py
cod:-
Programul #ASAR
#Acest program urmărește o minge roșie și instruiește un zmeură pi să o urmeze. 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) #Left Motor Forward IO.output (22, 0) IO.output (13, 1) #Right Motor Forward IO.output (15, 0) def bac (): IO.output (21, 0) #Left Motor backback IO.output (22, 1) IO.output (13, 0) #Right Motor backward IO.output (15, 1) def ryt (): IO.output (21, 0) # Ieșire IO motor stânga înapoi (22, 1) Ieșire IO (13, 1) # Ieșire IO motor dreapta înainte (15, 0) def lft (): IO.output (21, 1) # IO motor stânga înainte.output (22, 0) IO.output (13, 0) #Right Motor back IO.output (15, 1) def stp (): IO.output (21, 0) #Left Stop motor IO.output (22, 0) IO.output (13, 0) #Right Motor stop IO.output (15, 0) ############################### ####################################################### ###################### def main (): capWebcam = cv2. VideoCapture (0) # declara un Obiect VideoCapture și asociat camerei web, 0 => utilizați prima cameră web # arată rezoluția originală 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) # modificarea rezoluției la 320x240 pentru procesare mai rapidă capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # arată rezoluția actualizată print "updated resolution =" + str (capWebcam.get (cv2. CAP_PROP_FR)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) dacă capWebcam.isOpened () == False: # verificați dacă obiectul VideoCapture a fost asociat cu camera web imprimă cu succes "eroare: capWebcam nu a fost accesat cu succes / n / n" # dacă nu, tipăriți mesajul de eroare pentru a elimina sistemul os.system ("pauză") # pauză până când utilizatorul apasă o tastă, astfel încât utilizatorul să poată vedea mesajul de eroare return # și funcția de ieșire (care iese din program) # se termină dacă în timp ce cv2.waitKey (1)! = 27 și capWebcam.isOpened (): # până când se apasă tasta Esc sau se pierde conexiunea webcam blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # citește următorul cadru dacă nu blnFrameReadSuccessfully sau imgOriginal este None: # dacă cadrul nu a fost citit cu succes tipărește "error: frame not read from webcam / n" # print error message to std out os.system („pauză”) # pauză până când utilizatorul apasă o tastă pentru ca utilizatorul să poată vedea mesajul de eroare întrerupere # ieșire în timp ce bucla (care iese din program) # sfârșit dacă 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) # umple cercuri variabile cu toate cercurile din imaginea procesată dacă cercurile nu este Niciuna: # această linie este necesară pentru a împiedica blocarea programului pe următoarea linie dacă nu s-au găsit cercuri IO.output (7, 1) pentru cercul din cercuri [0]: # pentru fiecare cerc x, y, raza = cerc # spargeți x, y și raza tipăriți "poziția mingii x =" + str (x) + ", y =" + str (y) + ", raza =" + str (raza) # tipăriți poziția și raza mingei obRadius = int (raza) xAxis = int (x) if obRadius> 0 & obRadius100 & xAxis180: print ("Moving Right") ryt () elif xAxis <100: print ("Moving Left") lft () else: stp () else: stp () cv2.circle (imgOriginal, (x, y), 3, (0, 255, 0), -1) # desenează un cerc verde mic în centrul obiectului detectat cv2.circle (imgOriginal, (x, y), raza, (0, 0, 255), 3) # desenează cerc roșu în jurul obiectului detectat # sfârșit pentru # sfârșit dacă altfel: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # creează ferestre, utilizați WINDOW_AUTOSIZE pentru o dimensiune fixă a ferestrei cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # sau utilizați WINDOW_NORMAL pentru a permite redimensionarea ferestrei cv2.imshow ("imgOriginal", imgOri ginal) # show windows cv2.imshow ("imgThresh", imgThresh) # end while cv2.destroyAllWindows () # remove windows from memory return ####################### ###################################################### ############################# if _name_ == "_main_": main ()
Acum, nu mai rămâne decât să rulați programul
python tracker.py
Felicitări! rover-ul tău auto-pilot este gata! Partea de navigare bazată pe senzorul cu ultrasunete va fi finalizată în curând și voi actualiza acest lucru instructiv.
Mulțumesc pentru lectură!
Recomandat:
Senzor de viziune MU Micro: bit - Urmărirea obiectelor: 7 pași
Micro: bit MU Vision Sensor - Object Tracking: Deci, în acest instructable vom începe programarea Smart Car pe care o construim în acest instructable și că am instalat un senzor de viziune MU în acest instructable. Vom programa micro: bit cu o urmărire simplă a obiectelor, așa că
Urmărirea obiectelor Opencv: 3 pași
Urmărirea obiectelor Opencv: detectarea obiectelor în mișcare este o tehnică utilizată în viziunea computerizată și procesarea imaginilor. Mai multe cadre consecutive dintr-un videoclip sunt comparate prin diferite metode pentru a determina dacă este detectat vreun obiect în mișcare. Detectarea obiectelor în mișcare a fost folosită pentru
Senzor de viziune micro: bit MU - Urmărirea obiectelor: 6 pași
Senzor de viziune MU Micro: bit - Obiecte de urmărire: Acesta este al patrulea ghid al senzorului de viziune MU pentru micro: biți. Aici voi trece prin modul de urmărire a obiectelor cu micro: bit și să scriu coordonatele pe un ecran OLED. În celelalte ghiduri am trecut prin modul de conectare a micro: bit la
Urmărirea obiectelor bazate pe detectarea culorii: 10 pași
Urmărirea obiectelor bazate pe detectarea culorilor: Povestea Am făcut acest proiect pentru a învăța procesarea imaginilor folosind Raspberry PI și CV deschis. Pentru a face acest proiect mai interesant, am folosit două servomotoare SG90 și am montat camera pe acesta. Un motor folosit pentru a se deplasa orizontal și al doilea motor folosit pentru a se deplasa vertical
Urmărirea obiectelor - Controlul montării camerei: 4 pași
Urmărirea obiectelor - Controlul montării camerei: Bună ziua tuturor, în acest instructabil vă voi arăta progresele realizate pentru proiectul meu de urmărire a obiectelor. Aici puteți găsi instructabilul anterior: https://www.instructables.com/id/Object-Tracking/ și aici puteți găsi liste de redare YouTube cu toate t