Obsah:
- Krok 1: Úvod
- Krok 2: Potrebný materiál a softvér
- Krok 3: Zostavenie podvozku Rover
- Krok 4: Budovanie zostavy ultrazvukového diaľkomera
- Krok 5: Schémy a elektrické pripojenia
- Krok 6: Inštalácia SSH a otvoreného CV
- Krok 7: Spustenie kódu Python pre Rover
Video: Raspberry Pi - autonómny rover na Marse so sledovaním objektov OpenCV: 7 krokov (s obrázkami)
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:57
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
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
- Raspberry Pi (akékoľvek, ale nulové)
- Raspberry PI kamera alebo webová kamera
- IC ovládač motora L293D
- Kolesá robota (7 x 4 cm) X 4
- Prevodové jednosmerné motory (150 otáčok za minútu) X 4
- PVC rúrky pre podvozky
Vyžaduje sa softvér
- Tmel na SSH na pí
- Otvorený životopis na rozpoznávanie objektov
Krok 3: Zostavenie 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
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
Vykonajte elektrické zapojenie podľa priloženej schémy zapojenia.
Krok 6: 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.
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
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:
Sledovanie objektov Opencv: 3 kroky
Opencv sledovanie objektov: Detekcia pohybujúcich sa predmetov je technika používaná pri počítačovom videní a spracovaní obrazu. Viaceré po sebe idúce snímky z videa sa porovnávajú rôznymi metódami, aby sa určilo, či je detegovaný nejaký pohybujúci sa objekt. Detekcia pohybujúcich sa objektov bola použitá pre
Výber farieb Arduino RGB - vyberte farby z objektov skutočného života: 7 krokov (s obrázkami)
Výber farieb Arduino RGB - vyberajte farby zo skutočných predmetov: Jednoducho vyberte farby z fyzických objektov pomocou tohto výberu farieb RGB založeného na Arduino, čo vám umožní znovu vytvoriť farby, ktoré vidíte v objektoch v reálnom živote, na počítači alebo mobilnom telefóne. Jednoducho stlačte tlačidlo a naskenujte farbu objektu pomocou lacného TCS347
Halloween roboty so sledovaním tváre a detekciou úsmevu: 8 krokov (s obrázkami)
Sledovanie tváre a rozpoznávanie úsmevu Halloween roboti: Halloween sa blíži! Rozhodli sme sa postaviť niečo cool. Zoznámte sa s robotmi Ghosty a Skully. Môžu sledovať vašu tvár a vedia, že keď sa usmievate, smejete sa s vami! Tento projekt je ďalším príkladom použitia aplikácie iRobbie, ktorá prevádza iPhone na
Detekcia objektov pomocou Dragonboard 410c alebo 820c pomocou OpenCV a Tensorflow .: 4 kroky
Object Detection W/ Dragonboard 410c or 820c using OpenCV and Tensorflow .: This instructables popisuje how to install OpenCV, Tensorflow, and machine learning frameworks for Python 3.5 to run the Object Detection
Žobrajúci robot so sledovaním tváre a ovládaním pomocou ovládača Xbox - Arduino: 9 krokov (s obrázkami)
Žobrácky robot so sledovaním tváre a ovládaním pomocou ovládača Xbox - Arduino: Vyrobíme žobráckeho robota. Tento robot sa bude snažiť podráždiť alebo upútať pozornosť okoloidúcich ľudí. Rozpozná ich tváre a pokúsi sa na ne vystreliť lasery. Ak dáte robotovi mincu, bude spievať pieseň a tancovať. Robot bude potrebovať