Kazalo:

Raspberry Pi - avtonomni Mars Rover s sledenjem objektom OpenCV: 7 korakov (s slikami)
Raspberry Pi - avtonomni Mars Rover s sledenjem objektom OpenCV: 7 korakov (s slikami)

Video: Raspberry Pi - avtonomni Mars Rover s sledenjem objektom OpenCV: 7 korakov (s slikami)

Video: Raspberry Pi - avtonomni Mars Rover s sledenjem objektom OpenCV: 7 korakov (s slikami)
Video: ZEITGEIST: MOVING FORWARD | OFFICIAL RELEASE | 2011 2024, November
Anonim
Raspberry Pi - avtonomni Mars Rover s sledenjem objektov OpenCV
Raspberry Pi - avtonomni Mars Rover s sledenjem objektov OpenCV

Poganjajo ga Raspberry Pi 3, odprto prepoznavanje objektov CV, ultrazvočni senzorji in motorji z enosmernim tokom. Ta rover lahko sledi vsakemu objektu, za katerega je usposobljen, in se premika po katerem koli terenu.

1. korak: Uvod

Image
Image
Potrebni materiali in programska oprema
Potrebni materiali in programska oprema

V tem navodilu bomo izdelali avtonomni Mars Rover, ki bo lahko prepoznal predmete in jim sledil s programsko opremo Open CV, ki se izvaja na Raspberry Pi 3 z možnostjo uporabe spletne kamere ali originalne kamere maline pi. Opremljen je tudi z ultrazvočnim senzorjem, nameščenim na servo, da sledi poti v temnih okoljih, kjer kamera ne bi delovala. Signali, prejeti od Pi, se pošljejo v gonilnik motorja IC (L293D), ki poganja 4 x 150 vrtljajev DC motorjev, nameščenih na ohišju, izdelanem iz PVC cevi.

2. korak: Potrebni materiali in programska oprema

Potrebni materiali in programska oprema
Potrebni materiali in programska oprema
Potrebni materiali in programska oprema
Potrebni materiali in programska oprema

Potrebni materiali

  1. Raspberry Pi (vse razen nič)
  2. Raspberry PI kamera ali spletna kamera
  3. IC gonilnika motorja L293D
  4. Robotska kolesa (7x4 cm) X 4
  5. Motorji z enosmernim tokom (150 vrt / min) X 4
  6. PVC cevi za podvozje

Potrebna programska oprema

  1. Kiti za SSH ing Pi
  2. Odprite življenjepis za prepoznavanje predmetov

3. korak: Izdelava podvozja Roverja

Izdelava podvozja Rover
Izdelava podvozja Rover
Izdelava podvozja Rover
Izdelava podvozja Rover
Izdelava podvozja Rover
Izdelava podvozja Rover

Za izdelavo tega PVC ohišja boste potrebovali

  • 2 x 8"
  • 2 x 4"
  • 4 T-spoji

PVC cevi razporedite v lestvesto strukturo in jih vstavite v T-spoje. Za povečanje trdnosti spojev lahko uporabite PVC tesnilo.

Motorji z enosmernim tokom so povezani z ohišjem PVC cevi s sponkami, nato pa so kolesa z motorji povezana z vijaki.

4. korak: Zgradite ultrazvočni daljinomer

Gradnja ultrazvočnega daljinomera
Gradnja ultrazvočnega daljinomera

Sklop ultrazvočnega daljinomera je izdelan z ultrazvočnim senzorjem HC-SR04, povezanim z motorjem Micro Servo. Kable predhodno povežemo z ultrazvočnim senzorjem, preden jih vstavimo v plastično ohišje, ki je z vijaki povezano s servo motorjem.

5. korak: Sheme in električne povezave

Sheme in električni priključki
Sheme in električni priključki
Sheme in električni priključki
Sheme in električni priključki

Električne priključke izvedite v skladu s priloženo shemo vezja.

6. korak: Namestitev SSH in odprtega življenjepisa

Namestitev SSH in odprtega življenjepisa
Namestitev SSH in odprtega življenjepisa

Zdaj moramo SSH vstaviti v naš malinov pi, da namestimo potrebno programsko opremo. Začeli bomo s SSHingom do našega Raspberry Pi. Prepričajte se, da je vaš Pi povezan z istim usmerjevalnikom kot vaš računalnik in da veste, da je naslov IP, ki mu ga dodeli usmerjevalnik. Zdaj odprite ukazni poziv ali PUTTY, če uporabljate Windows, in zaženite naslednji ukaz.

ssh [email protected]

IP vašega Pi je lahko drugačen, moj je 192.168.1.6.

Zdaj vnesite privzeto geslo - "malina"

Zdaj, ko imate v svojem Pi -ju SSH'd, začnimo s posodobitvijo s tem ukazom.

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

Namestimo zdaj potrebna orodja za razvijalce, sudo apt-get install build-bistvena cmake pkg-config

Nato moramo namestiti nekaj slikovnih V/I paketov, ki bodo našemu Pi pomagali pri pridobivanju različnih formatov slik z diska.

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

Zdaj nekaj paketov za pridobivanje videa, pretakanje v živo in optimizacijo delovanja 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

Prav tako moramo namestiti datoteke z glavo Python 2.7 in Python 3, da lahko sestavimo OpenCV z vezmi python

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

Prenos izvorne kode OpenCV

cd ~

wget -O opencv.zip

razpakiraj opencv.zip

Prenos skladišča opencv_contrib

wget -O opencv_contrib.zip

razpakirajte opencv_contrib.zip

Priporočljivo je tudi, da za namestitev OpenCV uporabite virtualno okolje.

sudo pip namestite virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

Zdaj, ko sta nameščena virtualenv in virtualenvwrapper, moramo posodobiti naš ~/.profile tako, da bo na dnu vključil naslednje vrstice

izvozi WORKON_HOME = $ HOME/.virtualenvs izvozi VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 vir /usr/local/bin/virtualenvwrapper.sh

Ustvarite svoje virtualno okolje python

mkvirtualenv cv -p python2

preklopite na ustvarjeno virtualno okolje

source ~/.profile

workon cv

Namestitev programa NumPy

pip install numpy

Prevedite in namestite 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/BPL

Končno prevedite OpenCV

naredi -j4

Ko se ta ukaz konča z izvajanjem. Vse kar morate storiti je, da ga namestite.

sudo naredi konfiguracijo

sudo ldconfig

7. korak: Zaženite kodo Python za Rover

Image
Image

Ustvarite datoteko Python, imenovano tracker.py, in ji dodajte naslednjo kodo.

sudo nano tracker.py

Koda:-

#ASAR Program

#Ta program sledi rdeči kroglici in naroči malinemu pi, naj ji sledi. import sys sys.path.append ('/usr/local/lib/python2.7/site-packages') uvoz cv2 uvoz numpy kot np uvoz os uvoz RPi. GPIO kot 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)#IO. LO motor naprej (22, 0) IO.output (13, 1)#IO. Inter. Interput (15, 0) def bac (): IO.output (21, 0) #Ile.motor IO. Izhod (22, 1) IO. Izhod (13, 0)#IO. Izhodni vhod IO. Desno (15, 1) def ryt (): IO.output (21, 0) #IO. Izhod levo nazaj (22, 1) IO.izhod (13, 1)#IO izhod desnega motorja naprej (15, 0) def lft (): IO.izhod (21, 1) #LO.output (22, 0) IO.output (13, 0) #Right Motor IO.out output (15, 1) def stp (): IO.output (21, 0) #Left Motor stop IO.output (22, 0) IO.output (13, 0) #Right stop motorja IO.output (15, 0) ######################### ################################################# ###################### def main (): capWebcam = cv2. VideoCapture (0)#razglasi Objekt VideoCapture in ga povežite s spletno kamero, 0 => uporabite prvo spletno kamero # pokaži izvirno ločljivost natisni "privzeta ločljivost =" + 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) # spremenite ločljivost na 320 x 240 za hitrejšo obdelavo) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)), če je capWebcam.isOpened () == False: # preverite, ali je bil objekt VideoCapture povezan s spletno kamero, je uspešno natisnjena "napaka: capWebcam ni dostopen / n / n" # če ne, natisnite sporočilo o napaki, da std out os.system ("premor") # premor, dokler uporabnik ne pritisne tipke, tako da lahko uporabnik vidi sporočilo o napaki return # in izhod iz funkcije (ki zapre program) # end if while cv2.waitKey (1)! = 27 in capWebcam.isOpened (): # dokler ne pritisnete tipke Esc ali prekinete povezavo s kamero blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # preberi naslednji okvir, če ne blnFrameReadSuccessfully ali imgOriginal je Brez: # če okvir ni bil uspešno prebran print "error: frame not read from webcam / n" # message error error to std out os.system ("premor") # premor, dokler uporabnik ne pritisne tipke, tako da lahko uporabnik vidi sporočilo o napaki prekinitev # exit medtem ko zanka (ki zapre program) # end, če je imgHSV = cv2.cvtColor (imgOriginal, cv2. COLOR_BGR2HSV) imgThreshLow = cv2.inRange (imgHSV, np.array ([0, 135, 135]), np.ray ([18, 255, 255])) imgThreshHigh = cv2.inRange (imgHSV, np.array ([165, 135, 135]), np. matrika ([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 krogi = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # zapolni spremenljive kroge z vsemi krogi na obdelani sliki, če krogi ni nič: # ta vrstica je potrebna, da se program ne zruši v naslednji vrstici, če ni bilo najdenih krogov IO.output (7, 1) za krog v krogih [0]: # za vsak krog x, y, polmer = krog # izbiti x, y in polmer natisni "položaj krogle x =" + str (x) + ", y =" + str (y) + ", polmer =" + str (polmer) # položaj krogle za tiskanje in polmer obRadius = int (polmer) xAxis = int (x), če je obRadius> 0 & obRadius100 & xAxis180: print ("Premikanje desno") ryt () elif xAxis <100: print ("Premikanje levo") lft () else: stp () else: stp () cv2.circle (imgOriginal, (x, y), 3, (0, 255, 0), -1) # narišite majhen zeleni krog v središče zaznanega predmeta cv2.circle (imgOriginal, (x, y), polmer, (0, 0, 255), 3) # narišite rdeč krog okoli zaznanega predmeta # konec za # konec, če drugače: IO.output (7, 0) cv2. namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # ustvari okna, uporabite WINDOW_AUTOSIZE za fiksno velikost okna cv2. namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # ali uporabite WINDOW_NORMAL, da omogočite spreminjanje velikosti okna cv2.imshow ("imgOriginal", imgOri ginal)#pokaži okna cv2.imshow ("imgThresh", imgThresh)#konec, medtem ko cv2.destroyAllWindows ()#odstrani okna iz pomnilnika return #################### ################################################# ############################ if _name_ == "_main_": main ()

Zdaj je ostalo le še zagnati program

python tracker.py

Čestitke! vaš samovozeči rover je pripravljen! Navigacijski del na osnovi ultrazvočnega senzorja bo kmalu dokončan in to navodilo bom posodobil.

Hvala za branje!

Priporočena: