Sadržaj:
- Korak 1: Uvod
- Korak 2: Potrebni materijali i softver
- Korak 3: Izrada Rover šasije
- Korak 4: Izrada sklopa ultrazvučnog daljinomera
- Korak 5: Sheme i električne veze
- Korak 6: Instalacija SSH -a i otvorenog životopisa
- Korak 7: Pokretanje Python koda za Rover
Video: Raspberry Pi - Autonomni Mars Rover sa OpenCV praćenjem objekata: 7 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:05
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
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
- Raspberry Pi (bilo koje osim nule)
- Raspberry PI kamera ili web kamera
- IC upravljački program motora L293D
- Robotski kotači (7x4 cm) X 4
- Zupčasti istosmjerni motori (150 o / min) X 4
- PVC cijevi za šasiju
Potreban softver
- Git za SSH ing Pi
- Otvorite CV za prepoznavanje objekata
Korak 3: Izrada Rover šasije
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
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
Izvedite električne priključke prema priloženom dijagramu kola.
Korak 6: Instalacija SSH -a i otvorenog životopisa
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.
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
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:
Pokretni motor s praćenjem oka: 8 koraka
Pokretni motor s praćenjem očiju: Trenutno su senzori za praćenje očiju češći u različitim područjima, ali su komercijalno poznatiji po interaktivnim igrama. Ovaj vodič ne pretendira na izradu senzora jer je vrlo složen i zbog sve češće upotrebe
Invalidska kolica s kontrolnim džojstikom i praćenjem prepreka: 3 koraka (sa slikama)
Invalidska kolica s kontrolom džojstika uz pomoć praćenja prepreka: Kako bi se osobama s tjelesnim invaliditetom olakšala sigurna vožnja, koristi se ultrazvučni senzor za praćenje prepreka prisutnih na putu. Na osnovu kretanja džojstika, motori će upravljati invalidskim kolicima u sva četiri smjera i brzinom na svakom
Opencv praćenje objekata: 3 koraka
Opencv praćenje objekata: Otkrivanje pokretnih objekata tehnika je koja se koristi u računarskom vidu i obradi slike. Više uzastopnih kadrova iz videozapisa uspoređuju se različitim metodama kako bi se utvrdilo je li otkriven neki pokretni objekt. Otkrivanje pokretnih objekata korišteno je za bežičnu vezu
Otkrivanje objekata W/ Dragonboard 410c ili 820c koristeći OpenCV i Tensorflow .: 4 koraka
Object Detection W/ Dragonboard 410c ili 820c koristeći OpenCV i Tensorflow .: Ove upute opisuju kako instalirati OpenCV, Tensorflow i okvire strojnog učenja za Python 3.5 za pokretanje aplikacije Object Detection
Robot za prosjačenje s praćenjem lica i kontrolom pomoću Xbox kontrolera - Arduino: 9 koraka (sa slikama)
Robot za prosjačenje s praćenjem lica i kontrolom od Xbox Controllera - Arduino: Napravit ćemo robota za prosjačenje. Ovaj robot će pokušati iritirati ili privući pažnju prolaznih ljudi. On će otkriti njihova lica i pokušati pucati laserima u njih. Ako robotu date novčić, pjevat će pjesmu i plesati. Robotu će trebati