Obsah:

Raspberry Pi - autonómny rover na Marse so sledovaním objektov OpenCV: 7 krokov (s obrázkami)
Raspberry Pi - autonómny rover na Marse so sledovaním objektov OpenCV: 7 krokov (s obrázkami)

Video: Raspberry Pi - autonómny rover na Marse so sledovaním objektov OpenCV: 7 krokov (s obrázkami)

Video: Raspberry Pi - autonómny rover na Marse so sledovaním objektov OpenCV: 7 krokov (s obrázkami)
Video: Autoimmune Autonomic Ganglionopathy: 2020 Update- Steven Vernino, MD, PhD 2024, Júl
Anonim
Raspberry Pi - autonómny rover na Marse so sledovaním objektov OpenCV
Raspberry Pi - autonómny rover na Marse so sledovaním objektov OpenCV

Poháňaný Raspberry Pi 3, rozpoznávaním otvorených predmetov CV, ultrazvukovými snímačmi a prevodovými jednosmernými motormi. Tento rover môže sledovať akýkoľvek predmet, na ktorý je vycvičený, a pohybovať sa v akomkoľvek teréne.

Krok 1: Úvod

Image
Image
Požadovaný materiál a softvér
Požadovaný materiál a softvér

V tomto návode postavíme autonómny Mars Rover, ktorý dokáže rozpoznávať objekty a sledovať ich pomocou softvéru Open CV, ktorý beží na Raspberry Pi 3 s možnosťou použiť zariadenie s webovou kamerou alebo pôvodnú kameru Raspberry Pi. Je tiež vybavený ultrazvukovým senzorom namontovaným na servo, ktorý sleduje jeho cestu v tmavom prostredí, kde by kamera nefungovala. Signály prijaté z Pi sú odoslané do IC vodiča (L293D), ktorý poháňa 4 x 150 ot./min. Jednosmerné motory namontované na telese postavenom z rúr z PVC.

Krok 2: Potrebný materiál a softvér

Požadovaný materiál a softvér
Požadovaný materiál a softvér
Požadovaný materiál a softvér
Požadovaný materiál a softvér

Požadovaný materiál

  1. Raspberry Pi (akékoľvek, ale nulové)
  2. Raspberry PI kamera alebo webová kamera
  3. IC ovládač motora L293D
  4. Kolesá robota (7 x 4 cm) X 4
  5. Prevodové jednosmerné motory (150 otáčok za minútu) X 4
  6. PVC rúrky pre podvozky

Vyžaduje sa softvér

  1. Tmel na SSH na pí
  2. Otvorený životopis na rozpoznávanie objektov

Krok 3: Zostavenie podvozku Rover

Stavba podvozku Rover
Stavba podvozku Rover
Stavba podvozku Rover
Stavba podvozku Rover
Stavba podvozku Rover
Stavba podvozku Rover

Na stavbu tohto podvozku z PVC budete potrebovať

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

Rúry z PVC usporiadajte do rebríkovej konštrukcie a vložte do spojov tvaru T. Na zaistenie ešte silnejších spojov môžete použiť tesniaci materiál z PVC.

Prevodové jednosmerné motory sú spojené so šasi z rúr z PVC pomocou svoriek a potom sú kolesá s motormi spojené pomocou skrutiek.

Krok 4: Budovanie zostavy ultrazvukového diaľkomera

Budova zostavy ultrazvukového diaľkomeru
Budova zostavy ultrazvukového diaľkomeru

Ultrazvuková zostava diaľkomera je postavená pomocou ultrazvukového senzora HC-SR04 spojeného s mikro servomotorom. Káble sú vopred prepojené s ultrazvukovým senzorom pred vložením do plastového puzdra, ktoré je pomocou skrutiek spojené so servomotorom.

Krok 5: Schémy a elektrické pripojenia

Schémy a elektrické pripojenia
Schémy a elektrické pripojenia
Schémy a elektrické pripojenia
Schémy a elektrické pripojenia

Vykonajte elektrické zapojenie podľa priloženej schémy zapojenia.

Krok 6: Inštalácia SSH a otvoreného CV

Inštalácia SSH a otvoreného CV
Inštalácia SSH a otvoreného CV

Teraz musíme do nášho Raspberry Pi nainštalovať SSH, aby sme nainštalovali požadovaný softvér. Začneme SSHingom k nášmu Raspberry Pi. Uistite sa, že je váš Pi pripojený k rovnakému smerovaču ako počítač a že poznáte IP adresu, ktorú mu priradil váš smerovač. Teraz otvorte príkazový riadok alebo PUTTY, ak používate Windows a spustite nasledujúci príkaz.

ssh [email protected]

IP vášho Pi môže byť odlišná, moja je 192.168.1.6.

Teraz zadajte predvolené heslo - „malina“

Teraz, keď ste do svojho Pi vložili SSH, začnime aktualizáciou týmto príkazom.

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

Nainštalujme teraz požadované nástroje pre vývojárov, sudo apt-get install build-essential cmake pkg-config

Ďalej musíme nainštalovať niektoré I/O balíky obrázkov, ktoré pomôžu nášmu Pi načítať z disku rôzne formáty obrázkov.

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

Teraz niekoľko balíkov na načítanie videa, živé vysielanie a optimalizáciu výkonu 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

Musíme tiež nainštalovať hlavičkové súbory Python 2.7 a Python 3, aby sme mohli kompilovať OpenCV s väzbami pythonu

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

Sťahovanie zdrojového kódu OpenCV

CD ~

wget -O opencv.zip

rozbaliť opencv.zip

Sťahovanie úložiska opencv_contrib

wget -O opencv_contrib.zip

rozbaliť opencv_contrib.zip

Odporúča sa tiež použiť virtuálne prostredie na inštaláciu OpenCV.

sudo pip install virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

Teraz, keď sú nainštalované virtualenv a virtualenvwrapper, musíme aktualizovať náš ~/.profile, aby v spodnej časti obsahoval nasledujúce riadky

export WORKON_HOME = $ HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh

Vytvorte si svoje virtuálne prostredie python

mkvirtualenv cv -p python2

prepnite do vytvoreného virtuálneho prostredia

zdroj ~/.profil

workon cv

Inštalácia NumPy

pip install numpy

Skompilovať a nainštalovať OpenCV

cd ~/opencv-3.3.0/

stavba mkdir

zostava cd

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

Nakoniec skompilovajte OpenCV

urobiť -j4

Po dokončení spustenia tohto príkazu. Všetko, čo musíte urobiť, je nainštalovať.

sudo make config

sudo ldconfig

Krok 7: Spustenie kódu Python pre Rover

Image
Image

Vytvorte súbor Pythonu s názvom tracker.py a pridajte doň nasledujúci kód.

sudo nano tracker.py

kód:-

Program #ASAR

#Tento program sleduje červenú guľu a prikazuje malinovému pi, aby ho nasledovalo. import sys sys.path.append ('/usr/local/lib/python2.7/site-packages') import cv2 import numpy ako 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 dozadu IO.output (22, 1) IO.output (13, 0) #Right Motor backward IO.output (15, 1) def ryt (): IO.output (21, 0) #Ľavý motor dozadu IO.výstup (22, 1) IO.výstup (13, 1)#pravý motor dopredu IO.výstup (15, 0) def lft (): IO.výstup (21, 1)#ľavý motor dopredu IO.output (22, 0) IO.output (13, 0) #Right Motor backward IO.output (15, 1) def stp (): IO.output (21, 0) #Left Motor stop IO.output (22, 0) IO.output (13, 0) #Right Motor stop IO.output (15, 0) ############################### ###################################################################### ####### ######################## def main (): capWebcam = cv2. VideoCapture (0)#declare a Objekt VideoCapture a priradenie k webovej kamere, 0 => použite 1. webovú kameru # ukáž pôvodné rozlíšenie tlač „predvolené rozlíšenie =“+ 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) # zmena rozlíšenia na 320x240 pre rýchlejšie spracovanie capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # show updated resolution print "updated Resolution =" + str (capWebcam.get (cv2. CAP_WPROP_FRAME)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) if capWebcam.isOpened () == False: # check if VideoCapture object was associated to webcam successfully print "error: capWebcam not accessed successful / n / n" # ak nie, vytlačte chybové hlásenie na výstup mimo os.system („pauza“) # pozastavte, kým používateľ nestlačí kláves, aby mohol vidieť chybové hlásenie návrat # a ukončenie funkcie (ktorá ukončí program) # koniec, ak cv2.waitKey (1)! = 27 a capWebcam.isOpened (): #, kým nestlačíte kláves Esc alebo kým sa nestratí spojenie s webovou kamerou blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # čítať nasledujúci rámec, ak nie blnFrameReadSuccessfully alebo imgOriginal is None: # if frame was not read successful print "error: frame not read from webcam / n" # print error message to std out os.system ("pauza") # pauza, kým používateľ nestlačí kláves, aby používateľ mohol vidieť prerušenie chybového hlásenia # exit while loop (which exits program) # end if 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. pole ([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 circle = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # kruhy vyplňte všetkými kruhmi na spracovanom obrázku, ak sú kruhy is not None: # tento riadok je potrebný na to, aby sa program nezlomil na nasledujúcom riadku, ak sa nenašli žiadne kruhy IO.výstup (7, 1) pre kruh v kruhoch [0]: # pre každý kruh x, y, polomer = kruh # vylomte x, y a polomer vytlačte "poloha gule x =" + str (x) + ", y =" + str (y) + ", polomer =" + str (polomer) # poloha a polomer tlačovej gule obRadius = int (radius) 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) # nakreslite malý zelený kruh v strede detegovaného objektu cv2.circle (imgOriginal, (x, y), polomer, (0, 0, 255), 3) # nakreslite červený kruh okolo detekovaného objektu # koniec pre # koniec, ak inak: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # vytvoriť okná, použite WINDOW_AUTOSIZE pre pevnú veľkosť okna cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # alebo pomocou WINDOW_NORMAL povoľte zmenu veľkosti okna cv2.imshow ("imgOriginal", imgOri ginal)#show windows cv2.imshow („imgThresh“, imgThresh)#end while cv2.destroyAllWindows ()#remove windows from memory return ########################## ######################################################################################################################################################################### ################################ if _name_ == "_main_": main ()

Teraz už stačí len spustiť program

python tracker.py

Gratulujem! váš samoriadiaci rover je pripravený! Navigačná časť založená na ultrazvukovom senzore bude čoskoro dokončená a tento návod aktualizujem.

Vďaka za prečítanie!

Odporúča: