Sadržaj:
- Korak 1: Uvod
- Korak 2: Potrebni materijali i softver
- Korak 3: Izgradnja šasije Rovera
- 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 s OpenCV praćenjem objekata: 7 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:34
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
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
- Raspberry Pi (sve osim nule)
- Raspberry PI kamera ili web kamera
- IC upravljačkog programa 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 životopis za prepoznavanje objekata
Korak 3: Izgradnja š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
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
Molimo da električne priključke izvedete prema priloženoj shemi strujnog kruga.
Korak 6: Instalacija SSH -a i otvorenog životopisa
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.
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
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:
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 upravljačkom palicom i praćenjem prepreka: 3 koraka (sa slikama)
Invalidska kolica s upravljačkom palicom 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 temelju kretanja upravljačke palice motori će upravljati invalidskim kolicima u bilo koja četiri smjera i brzinom na svakom
Praćenje objekata Opencv: 3 koraka
Opencv praćenje objekata: Otkrivanje pomičnih objekata tehnika je koja se koristi u računalnom vidu i obradi slike. Više uzastopnih kadrova iz videozapisa uspoređuje se različitim metodama kako bi se utvrdilo je li otkriven neki pokretni objekt. Otkrivanje pokretnih objekata korišteno je za Wi
Otkrivanje objekata W/ Dragonboard 410c ili 820c pomoću OpenCV -a i Tensorflow .: 4 koraka
Object Detection W/ Dragonboard 410c ili 820c pomoću OpenCV -a i Tensorflow -a .: 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 putem 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 će robot pokušati iritirati ili privući pažnju prolaznih ljudi. On će otkriti njihova lica i pokušati ih ispaliti laserom. Ako robotu date novčić, pjevat će pjesmu i plesati. Robotu će trebati