Sadržaj:

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

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

Video: Raspberry Pi - Autonomni Mars Rover s OpenCV praćenjem objekata: 7 koraka (sa slikama)
Video: 10 самых АТМОСФЕРНЫХ мест Дагестана. БОЛЬШОЙ ВЫПУСК #Дагестан #ПутешествиеПоДагестану 2024, Studeni
Anonim
Raspberry Pi - Autonomni Mars Rover s OpenCV praćenjem objekata
Raspberry Pi - Autonomni Mars Rover s 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 svaki objekt za koji je osposobljen i kretati se po bilo kojem terenu.

Korak 1: Uvod

Image
Image
Potrebni materijali i softver
Potrebni materijali i softver

U ovom Instructables -u napravit ćemo autonomni Mars Rover koji može prepoznati objekte i pratiti ih pomoću Open CV softvera koji radi na Raspberry Pi 3 s mogućnošću korištenja web kamere ili originalne maline pi kamere. Također je opremljen 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 sklopu motora IC (L293D) koji pokreće 4 x 150 o / min istosmjerna motora montirana na kućištu izrađ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 (sve osim nule)
  2. Raspberry PI kamera ili web kamera
  3. IC upravljačkog programa 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 životopis za prepoznavanje objekata

Korak 3: Izgradnja šasije Rovera

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 strukturu poput ljestava i umetnite ih u T-spojeve. Za dodatno učvršćivanje spojeva možete upotrijebiti PVC brtvilo.

Zupčasti istosmjerni motori spojeni su s kućištem PVC cijevi pomoću stezaljki, a zatim su kotači spojeni 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 spojeni 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 spojevi
Sheme i električni spojevi

Molimo da električne priključke izvedete prema priloženoj shemi strujnog kruga.

Korak 6: Instalacija SSH -a i otvorenog životopisa

SSH i Open CV instalacija
SSH i Open CV instalacija

Sada, moramo instalirati SSH u naš maline pi kako bismo instalirali potrebni softver. Počet ćemo SSHingom do naše Raspberry Pi. Provjerite je li vaš Pi spojen na isti usmjerivač kao i vaše računalo i znate da je to IP adresa koju mu je usmjerivač dodijelio. Sada otvorite naredbeni redak ili PUTTY ako ste u sustavu Windows i pokrenite sljedeću naredbu.

ssh [email protected]

IP vašeg Pi 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 slikovno -izlazne pakete koji će pomoći našem Pi da dohvati različite formate slika s diska.

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

Sada, neki paketi za dohvaćanje videa, streaming 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 datoteke zaglavlja Python 2.7 i Python 3 kako bismo mogli kompajlirati OpenCV s python vezama

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

Preuzimanje OpenCV izvornog koda

cd ~

wget -O opencv.zip

raspakirajte opencv.zip

Preuzimanje repozitorija opencv_contrib

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 instalirati 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 retke pri dnu

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

Napravite svoje python virtualno okruženje

mkvirtualenv cv -p python2

prebacite se na stvoreno virtualno okruženje

izvor ~/.profil

workon cv

Instaliranje programa NumPy

pip install numpy

Kompilirajte i instalirajte OpenCV

cd ~/opencv-3.3.0/

mkdir graditi

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/BDP -3.3.0

Konačno sastavite OpenCV

napraviti -j4

Nakon što se ova naredba završi. Sve što trebate učiniti je instalirati ga.

sudo napravite konfiguraciju

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

kodirati:-

#ASAR program

#Ovaj program prati crvenu kuglu i upućuje malinu 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)#IO. Izlaz IO.desno Motor (15, 1) def ryt (): IO.izlaz (21, 0) #Ile.motor nazad IO.izlaz (22, 1) IO.izlaz (13, 1)#IO izlaz desnog motora naprijed (15, 0) def lft (): IO.izlaz (21, 1) #Ile izlaz motora naprijed IO.izlaz (22, 0) IO.izlaz (13, 0)#Desni motor unatrag IO.izlaz (15, 1) def stp (): IO.izlaz (21, 0)#Lijevo zaustavljanje motora IO.izlaz (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 izvornu razlučivost ispis "zadana razlučivost =" + 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 razlučivost 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 (cvPCP))) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) ako je capWebcam.isOpened () == False: # provjerite je li objekt VideoCapture povezan s web kamerom uspješno ispisuje "pogreška: capWebcam nije uspješno pristupljeno / n / n" # ako ne, ispišite poruku o pogreš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 prekine veza s web kamerom blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # pročitajte sljedeći okvir ako nije blnFrameReadSuccessfully ili imgOriginal nije Ništa: # ako okvir nije bio uspješno pročitan ispis "greška: okvir nije pročitan s web kamere / n" # poruka o pogrešci ispisa za std van os.system ("pause") # pause dok korisnik ne pritisne tipku kako bi korisnik mogao vidjeti poruku o pogrešci break # exit while loop (koji izlazi iz programa) # end if imgHSV = cv2.cvtColor (imgOriginal, cv2. COLOR_BGR2HSV) imgThreshLow = cv2.inRange (imgHSV, np. matrica ([0, 135, 135]), np.masa ([18, 255, 255])) imgThreshHigh = cv2.inRange (imgHSV, np.masa ([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: # ovaj redak je neophodan da se program ne bi srušio u sljedećem retku ako nisu pronađeni krugovi IO.output (7, 1) za krug u krugovima [0]: # za svaki krug x, y, radijus = krug # break out x, y, and radius ispis "položaj kugle x =" + str (x) + ", y =" + str (y) + ", radius =" + str (radijus) # položaj loptice 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 # end za # end 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 biste omogućili 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

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

Hvala na čitanju!

Preporučeni: