Cuprins:

Raspberry Pi - Rover autonom Mars cu urmărirea obiectelor OpenCV: 7 pași (cu imagini)
Raspberry Pi - Rover autonom Mars cu urmărirea obiectelor OpenCV: 7 pași (cu imagini)

Video: Raspberry Pi - Rover autonom Mars cu urmărirea obiectelor OpenCV: 7 pași (cu imagini)

Video: Raspberry Pi - Rover autonom Mars cu urmărirea obiectelor OpenCV: 7 pași (cu imagini)
Video: Autonomous Mars Robot with Raspberry Pi, Arduino and Pi Camera 2024, Noiembrie
Anonim
Raspberry Pi - Rover autonom Mars cu urmărirea obiectelor OpenCV
Raspberry Pi - Rover autonom Mars cu urmărirea obiectelor OpenCV

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

Image
Image
Materiale și software necesare
Materiale și software necesare

Î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 și software necesare
Materiale și software necesare
Materiale și software necesare
Materiale și software necesare

Materiale necesare

  1. Raspberry Pi (Orice, dar zero)
  2. Cameră Raspberry PI sau o cameră web
  3. IC driver driver L293D
  4. Roți robot (7x4cm) X 4
  5. Motoare DC cu transmisie (150 rpm) X 4
  6. Țevi din PVC pentru șasiu

Este necesar software

  1. Chit pentru SSH ing Pi
  2. Deschideți CV pentru recunoașterea obiectelor

Pasul 3: Construirea șasiului Rover

Construirea șasiului Rover
Construirea șasiului Rover
Construirea șasiului Rover
Construirea șasiului Rover
Construirea șasiului Rover
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

Construirea ansamblului telemetru cu ultrasunete
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

Scheme și conexiuni electrice
Scheme și conexiuni electrice
Scheme și conexiuni electrice
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

Instalare SSH și Open CV
Instalare SSH și Open CV

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ă.

ssh [email protected]

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

Image
Image

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: