Sadržaj:

Raspberry Pi - Autonomni Mars Rover sa OpenCV praćenjem objekata: 7 koraka (sa slikama)
Raspberry Pi - Autonomni Mars Rover sa OpenCV praćenjem objekata: 7 koraka (sa slikama)

Video: Raspberry Pi - Autonomni Mars Rover sa OpenCV praćenjem objekata: 7 koraka (sa slikama)

Video: Raspberry Pi - Autonomni Mars Rover sa OpenCV praćenjem objekata: 7 koraka (sa slikama)
Video: 10 самых АТМОСФЕРНЫХ мест Дагестана. БОЛЬШОЙ ВЫПУСК #Дагестан #ПутешествиеПоДагестану 2024, Novembar
Anonim
Raspberry Pi - Autonomni Mars Rover sa OpenCV praćenjem objekata
Raspberry Pi - Autonomni Mars Rover sa OpenCV praćenjem objekata

Pokreće ga Raspberry Pi 3, Open CV prepoznavanje objekata, ultrazvučni senzori i istosmjerni motori. Ovaj rover može pratiti bilo koji objekt za koji je obučen i kretati se po bilo kojem terenu.

Korak 1: Uvod

Image
Image
Potrebni materijali i softver
Potrebni materijali i softver

U ovom Instructables -u izgradit ćemo autonomni Mars Rover koji može prepoznati objekte i pratiti ih pomoću Open CV softvera koji radi na Raspberry Pi 3 s opcijom korištenja web kamere ili originalne maline pi kamere. Opremljen je i ultrazvučnim senzorom montiranim na servo za praćenje puta u mračnim okruženjima gdje kamera ne bi radila. Signali primljeni od Pi šalju se upravljačkom programu motora IC (L293D) koji pokreće 4 x 150 o / min istosmjerna motora montirana na kućištu izgrađenom od PVC cijevi.

Korak 2: Potrebni materijali i softver

Potrebni materijali i softver
Potrebni materijali i softver
Potrebni materijali i softver
Potrebni materijali i softver

Potrebni materijali

  1. Raspberry Pi (bilo koje osim nule)
  2. Raspberry PI kamera ili web kamera
  3. IC upravljački program motora L293D
  4. Robotski kotači (7x4 cm) X 4
  5. Zupčasti istosmjerni motori (150 o / min) X 4
  6. PVC cijevi za šasiju

Potreban softver

  1. Git za SSH ing Pi
  2. Otvorite CV za prepoznavanje objekata

Korak 3: Izrada Rover šasije

Izrada šasije Rovera
Izrada šasije Rovera
Izrada šasije Rovera
Izrada šasije Rovera
Izrada šasije Rovera
Izrada šasije Rovera

Za izradu ove PVC šasije trebat će vam

  • 2 X 8"
  • 2 X 4"
  • 4 T-spoja

Postavite PVC cijevi u ljestvičastu strukturu i umetnite ih u T-spojeve. Da biste fuge učinili još čvršćim, možete upotrijebiti PVC brtvilo.

Jednosmjerni motori sa zupčanikom povezani su s kućištem PVC cijevi pomoću stezaljki, a zatim su kotači povezani s motorima pomoću vijaka.

Korak 4: Izrada sklopa ultrazvučnog daljinomera

Zgrada ultrazvučnog daljinomera
Zgrada ultrazvučnog daljinomera

Sklop ultrazvučnog daljinomera izgrađen je pomoću HC-SR04 ultrazvučnog senzora spojenog s mikro servo motorom. Kablovi su prethodno povezani s ultrazvučnim senzorom prije stavljanja u plastično kućište koje je vijcima spojeno na servo motor.

Korak 5: Sheme i električne veze

Sheme i električni priključci
Sheme i električni priključci
Sheme i električni priključci
Sheme i električni priključci

Izvedite električne priključke prema priloženom dijagramu kola.

Korak 6: Instalacija SSH -a i otvorenog životopisa

SSH i Open CV instalacija
SSH i Open CV instalacija

Sada nam je potrebno da SSH ubacimo u svoj maline pi da bismo instalirali potreban softver. Počet ćemo SSHingom do našeg Raspberry Pi. Uvjerite se da je vaš Pi povezan s istim usmjerivačem kao i vaš računar i da znate da je IP adresa koju mu je usmjerivač dodijelio. Sada otvorite naredbeni redak ili PUTTY ako koristite Windows i pokrenite sljedeću naredbu.

ssh [email protected]

IP vašeg Pi -ja može biti drugačiji, moj je 192.168.1.6.

Sada unesite svoju zadanu lozinku - "malina"

Sada, kada imate SSH'd u svom Pi, Počnimo s ažuriranjem s ovom naredbom.

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

Instalirajmo sada potrebne alate za programere, sudo apt-get install build-essential cmake pkg-config

Zatim moramo instalirati neke I/O pakete slika koji će pomoći našem Pi -u da dohvati različite formate slika sa diska.

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

Sada, neki paketi za dohvaćanje videa, prijenos uživo i optimizaciju performansi OpenCV -a

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

Također moramo instalirati Python 2.7 i Python 3 datoteke zaglavlja kako bismo mogli kompajlirati OpenCV sa python vezama

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

Preuzimanje OpenCV izvornog koda

cd ~

wget -O opencv.zip

raspakirajte opencv.zip

Preuzimanje opencv_contrib spremišta

wget -O opencv_contrib.zip

raspakirajte opencv_contrib.zip

Također se preporučuje korištenje virtualnog okruženja za instaliranje OpenCV -a.

sudo pip install virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

Sada, kada su instalirani virtualenv i virtualenvwrapper, moramo ažurirati naš ~/.profile tako da uključi sljedeće redove pri dnu

izvoz WORKON_HOME = $ HOME/.virtualenvs izvoz VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 izvor /usr/local/bin/virtualenvwrapper.sh

Kreirajte svoje python virtualno okruženje

mkvirtualenv cv -p python2

prebacite se na stvoreno virtualno okruženje

source ~/.profile

workon cv

Instaliranje programa NumPy

pip install numpy

Prevedite i instalirajte OpenCV

cd ~/opencv-3.3.0/

mkdir build

cd build

cmake -D CMAKE_BUILD_TYPE = OSLOBAĐANJE / -D CMAKE_INSTALL_PREFIX =/usr/lokalno / -D INSTALL_PYTHON_EXAMPLES = UKLJUČENO / -D OPENCV_EXTRA_MODULES_PATH = ~/opencv_contrib_3. PL

Konačno kompajlirajte OpenCV

make -j4

Nakon što se ova naredba završi. Sve što trebate je instalirati.

sudo make config

sudo ldconfig

Korak 7: Pokretanje Python koda za Rover

Image
Image

Napravite Python datoteku pod nazivom tracker.py i dodajte joj sljedeći kod.

sudo nano tracker.py

šifra:-

#ASAR Program

#Ovaj program prati crvenu kuglu i upućuje malinovo pi da je slijedi. import sys sys.path.append ('/usr/local/lib/python2.7/site-packages') uvoz cv2 uvoz numpy kao np uvoz os uvoz RPi. GPIO kao 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) #Ile.motor IO.output (22, 0) IO.output (13, 1) #Right Motor Forward IO.output (15, 0) def bac (): IO.output (21, 0) #Ile.motor IO. Izlaz (22, 1) IO. Izlaz (13, 0) #Inter. IO. Izlaz. Izlaz. Imo.desno (15, 1) def ryt (): IO.output (21, 0) #IO. Izlaz levo prema nazad (22, 1) IO.izlaz (13, 1)#IO izlaz desno prema naprijed (15, 0) def lft (): IO.izlaz (21, 1)#IO motor prema naprijed IO.output (22, 0) IO.output (13, 0) #Right Motor IO.output (15, 1) def stp (): IO.output (21, 0) #Levo zaustavljanje motora IO.output (22, 0) IO.output (13, 0) #Right stop motora IO.output (15, 0) ########################## ################################################# ###################### def main (): capWebcam = cv2. VideoCapture (0)#deklarirajte VideoCapture objekt i pridružite web kameri, 0 => koristite prvu web kameru # prikaži originalnu rezoluciju ispis "zadana rezolucija =" + 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) # promijenite rezoluciju na 320x240 za bržu obradu capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # prikaži ispis ažurirane rezolucije "ažurirana rezolucija =" + str (capWebcam.get (cvPCPR)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT))) ako je capWebcam.isOpened () == Netačno: # provjerite je li objekt VideoCapture povezan s web kamerom uspješno ispisuje "greška: capWeb kameri nije uspješno pristupljeno / n / n" # ako nije, ispišite poruku o grešci za std out os.system ("pause") # pause dok korisnik ne pritisne tipku kako bi korisnik mogao vidjeti poruku o grešci return # i izlaznu funkciju (koja izlazi iz programa) # end if while cv2.waitKey (1)! = 27 i capWebcam.isOpened (): # dok se ne pritisne tipka Esc ili dok se ne izgubi veza s web kamerom blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # pročitajte sljedeći okvir ako nije blnFrameReadSuccessfully ili imgOriginal je None: # ako okvir nije uspješno pročitan ispis "greška: okvir nije pročitan s web kamere / n" # poruka o grešci ispisa za ispisivanje os.system ("pause") # pause dok korisnik ne pritisne tipku kako bi korisnik mogao vidjeti poruku o grešci break # exit while loop (koji izlazi iz programa) # end ako 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. niz ([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 krugovi = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # ispunite promjenjive krugove svim krugovima na obrađenoj slici ako krugovi nije Nijedan: # ova linija je potrebna kako bi se spriječilo rušenje programa u sljedećoj liniji ako nisu pronađeni krugovi IO.output (7, 1) za krug u krugovima [0]: # za svaki krug x, y, radijus = krug # probiti x, y i radijus ispisati "položaj kugle x =" + str (x) + ", y =" + str (y) + ", radijus =" + str (radijus) # položaj kugle za ispis i radijus obRadius = int (radijus) xAxis = int (x) ako je 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) # nacrtajte mali zeleni krug u centru otkrivenog objekta cv2.circle (imgOriginal, (x, y), radijus, (0, 0, 255), 3) # nacrtajte crveni krug oko otkrivenog objekta # kraj za # kraj ako je drugačije: IO.output (7, 0) cv2. namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # kreirajte prozore, upotrijebite WINDOW_AUTOSIZE za fiksnu veličinu prozora cv2. namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # ili upotrijebite WINDOW_NORMAL da dozvolite promjenu veličine prozora cv2.imshow ("imgOriginal", imgOri ginal)#show windows cv2.imshow ("imgThresh", imgThresh)#end while cv2.destroyAllWindows ()#remove windows from memory return #################### ################################################# ############################ if _name_ == "_main_": main ()

Sada je preostalo samo pokrenuti program

python tracker.py

Čestitam! vaš samovozeći rover je spreman! Navigacijski dio temeljen na ultrazvučnom senzoru bit će uskoro dovršen i ažurirat ću ovo uputstvo.

Hvala na čitanju!

Preporučuje se: