Turinys:
- 1 žingsnis: Įvadas
- 2 veiksmas: reikalingos medžiagos ir programinė įranga
- 3 žingsnis: „Rover“važiuoklės kūrimas
- 4 žingsnis: sukurkite ultragarsinį nuotolio ieškiklį
- 5 žingsnis: schemos ir elektros jungtys
- 6 veiksmas: SSH ir atidarykite CV diegimą
- 7 veiksmas: paleiskite „Rover“„Python“kodą
Video: „Raspberry Pi“- autonominis „Mars Rover“su „OpenCV“objektų stebėjimu: 7 žingsniai (su nuotraukomis)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:45
Maitinamas „Raspberry Pi 3“, „Open CV“objektų atpažinimu, ultragarso jutikliais ir pavarų srovės varikliais. Šis roveris gali sekti bet kokį objektą, kuriam jis yra apmokytas, ir judėti bet kokioje vietovėje.
1 žingsnis: Įvadas
Šioje instrukcijoje mes ketiname sukurti autonominį „Mars Rover“, kuris gali atpažinti objektus ir juos sekti naudodamas „Open CV“programinę įrangą, veikiančią „Raspberry Pi 3“, su galimybe naudoti internetinės kameros įrenginį arba originalią „Raspberry pi“kamerą. Jame taip pat sumontuotas ultragarsinis jutiklis, sumontuotas ant servo, kad būtų galima sekti kelią tamsoje, kur fotoaparatas neveiks. Signalai, gauti iš Pi, siunčiami į variklio tvarkyklę IC (L293D), kuri varo 4 x 150 aps / min nuolatinės srovės variklius, sumontuotus ant korpuso, pagaminto iš PVC vamzdžių.
2 veiksmas: reikalingos medžiagos ir programinė įranga
Reikalingos medžiagos
- Raspberry Pi (bet koks, bet nulis)
- Raspberry PI kamera arba internetinė kamera
- L293D variklio vairuotojo IC
- Robotų ratai (7x4 cm) X 4
- Pavarų nuolatinės srovės varikliai (150 aps./min.) X 4
- PVC vamzdžiai važiuoklei
Reikalinga programinė įranga
- Glaistas, skirtas SSH ing the Pi
- Atidarykite CV, kad atpažintumėte objektą
3 žingsnis: „Rover“važiuoklės kūrimas
Norėdami sukurti šią PVC važiuoklę, jums reikės
- 2 X 8"
- 2 X 4"
- 4 T-sąnariai
Išdėstykite PVC vamzdžius į kopėčias primenančią konstrukciją ir įstatykite į T jungtis. Norėdami sustiprinti jungtis, galite naudoti PVC sandariklį.
Pavarų dėžės nuolatinės srovės varikliai sujungiami su PVC vamzdžių važiuokle, naudojant spaustukus, o tada ratai varžtais prijungiami prie variklių.
4 žingsnis: sukurkite ultragarsinį nuotolio ieškiklį
Ultragarsinis diapazono ieškiklis yra sukurtas naudojant ultragarsinį jutiklį HC-SR04, prijungtą prie „Micro Servo“variklio. Kabeliai yra iš anksto prijungti prie ultragarso jutiklio prieš dedant į plastikinį korpusą, kuris varžtais yra prijungtas prie servo variklio.
5 žingsnis: schemos ir elektros jungtys
Elektros jungtis atlikite pagal pridedamą schemą.
6 veiksmas: SSH ir atidarykite CV diegimą
Dabar, norėdami įdiegti reikiamą programinę įrangą, turime prisijungti prie „Raspberry pi“. Pradėsime nuo SSHing prie mūsų Raspberry Pi. Įsitikinkite, kad jūsų „Pi“yra prijungtas prie to paties maršrutizatoriaus, kaip ir jūsų kompiuteris, ir žinote, kad jo IP adresas yra priskirtas jūsų maršrutizatoriaus. Dabar atidarykite komandų eilutę arba PUTTY, jei naudojate „Windows“, ir paleiskite šią komandą.
Jūsų „Pi“IP gali būti kitoks, mano - 192.168.1.6.
Dabar įveskite numatytąjį slaptažodį - „avietė“
Dabar, kai į „Pi“įtraukėte SSH, pradėkime atnaujindami šią komandą.
sudo apt-get update && sudo apt-get upgrade
Įdiekime reikiamus kūrėjo įrankius dabar, sudo apt-get install build-essential cmake pkg-config
Toliau turime įdiegti kai kuriuos vaizdo įvesties/išvesties paketus, kurie padės mūsų „Pi“iš disko gauti įvairius vaizdo formatus.
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
Dabar kai kurie paketai, skirti vaizdo įrašams gauti, tiesioginiam srautiniam perdavimui ir „OpenCV“našumo optimizavimui
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
Taip pat turime įdiegti „Python 2.7“ir „Python 3“antraštės failus, kad galėtume surinkti „OpenCV“su „python“įrišimais
sudo apt-get install python2.7-dev python3-dev
Atsisiunčiamas OpenCV šaltinio kodas
cd ~
wget -O opencv.zip
išpakuokite opencv.zip
Atsisiunčiama „opencv_contrib“saugykla
wget -O opencv_contrib.zip
išpakuokite opencv_contrib.zip
Taip pat rekomenduojama naudoti virtualią aplinką diegiant „OpenCV“.
sudo pip įdiegti virtualenv virtualenvwrapper
sudo rm -rf ~/.cache/pip
Dabar, kai buvo įdiegta „virtualenv“ir „virtualenvwrapper“, turime atnaujinti savo ~/.profilą, kad apačioje būtų šios eilutės
eksportuoti WORKON_HOME = $ HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh
Sukurkite savo „python“virtualią aplinką
mkvirtualenv cv -p python2
pereiti prie sukurtos virtualios aplinkos
šaltinis ~/.profile
workon cv
„NumPy“diegimas
pip install numpy
Kompiliuokite ir įdiekite „OpenCV“
cd ~/opencv-3.3.0/
mkdir statyti
cd kūrimas
cmake -D CMAKE_BUILD_TYPE = IŠLEISTI / -D CMAKE_INSTALL_PREFIX =/usr/local / -D INSTALL_PYTHON_EXAMPLES = ON/-D OPENCV_EXTRA_MODULES_PATH = ~/opencv_contrib -3.3.0/modules..
Galiausiai sudarykite „OpenCV“
padaryti -j4
Kai ši komanda baigia veikti. Viskas, ką jums reikia padaryti, tai įdiegti.
sudo padaryti konfigūraciją
sudo ldconfig
7 veiksmas: paleiskite „Rover“„Python“kodą
Sukurkite „Python“failą tracker.py ir pridėkite prie jo šį kodą.
sudo nano tracker.py
kodas:-
#ASAR programa
#Ši programa seka raudoną rutulį ir nurodo aviečių pi jį sekti. importuoti sys sys.path.append ('/usr/local/lib/python2.7/site-package') importuoti cv2 import numpy kaip np import os importuoti RPi. GPIO kaip 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.putput (21, 1) #Left Motor Forward IO.putput (22, 0) IO.putput (13, 1) #Light Motor Forward IO.putput (15, 0) def bac (): IO.putput (21, 0)#Kairysis variklis atgal IO. Išėjimas (22, 1) IO. Išėjimas (13, 0)#Dešinysis variklis atgal IO. Išėjimas (15, 1) def ryt (): IO. #Kairysis variklis atgal IO. Išėjimas (22, 1) IO. Išėjimas (13, 1)#Dešinysis variklis į priekį IO. Išėjimas (15, 0) def lft (): IO. Išėjimas (21, 1). išvestis (22, 0) IO. išvestis (13, 0) 0) IO. Išėjimas (13, 0)#Teisingas variklio sustabdymas IO. Išėjimas (15, 0) ################## ############################################### #################### def main (): capWebcam = cv2. VideoCapture (0)#deklaruoja a „VideoCapture“objektas ir susiejimas su kamera) capWebcam.set (cv2. CAP_PROP_FRAME_WIDTH, 320.0) # pakeiskite skiriamąją gebą į 320x240, kad greičiau apdorotumėte capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # rodyti atnaujintą skiriamąją gebą "atnaujinta rezoliucija =" + str (capWebcam.get (cv2. CAP_PRW_FR)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)), jei capWebcam.isOpened () == Netiesa: # patikrinkite, ar „VideoCapture“objektas buvo susietas su žiniatinklio kamera sėkmingai klaida: „capWebcam“nepavyko pasiekti / n / n " # jei ne, atspausdinkite klaidos pranešimą std out os.system ("pauzė") # pauzė, kol vartotojas paspaus klavišą, kad vartotojas galėtų pamatyti klaidos pranešimo grįžimo # ir išėjimo funkciją (kuri išeina iš programos) # pabaiga, jei tuo metu cv2.waitKey (1)! = 27 ir capWebcam.isOpened (): #, kol paspaudžiamas klavišas Esc arba nutrūksta internetinės kameros ryšys blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # skaityti kitą kadrą, jei ne blnFrameReadSuccess or imgOriginal is None: # jei rėmas nebuvo sėkmingai perskaitytas spausdinti "error: frame is not read from webcam / n" # print error message to std out os.system ("pauzė") # pauzė, kol vartotojas paspaudžia klavišą, kad vartotojas galėtų pamatyti klaidos pranešimą break # exit, kai kilpa (kuri išeina iš programos) # end, jei 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. masyvas ([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) # užpildykite kintamus apskritimus visais apskritimais apdorotame vaizde, jei apskritimai nėra Nėra: # ši eilutė yra būtina, kad programa nesugestų kitoje eilutėje, jei ratų nerasta. išskaidyti x, y ir spindulio spausdinimą "rutulio padėtis x =" + str (x) + ", y =" + str (y) + ", spindulys =" + str (spindulys) # spausdinimo rutulio padėtis ir spindulys obRadius = int (spindulys) xAxis = int (x) jei obRadius> 0 & obRadius100 & xAxis180: print ("Judėjimas į dešinę") ryt () elif xAxis <100: print ("Judėjimas į kairę") lft () else: stp () else: stp () cv2.circle (imgOriginal, (x, y), 3, (0, 255, 0), -1) # nubrėžkite mažą žalią apskritimą aptikto objekto centre cv2.circle (imgOriginal, (x, y), spindulys, (0, 0, 255), 3) # nubrėžkite raudoną apskritimą aplink aptiktą objektą # pabaiga # pabaiga, jei kitaip: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # sukurti langus, naudokite WINDOW_AUTOSIZE fiksuoto lango dydžiui cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # arba naudokite WINDOW_NORMAL, kad leistumėte keisti lango dydį cv2.imshow ("imgOriginal", imgOri ginal)#show windows cv2.imshow ("imgThresh", imgThresh)#end while cv2.destroyAllWindows ()#pašalinti langus iš atminties grąžinti #################### ############################################### ############################# jei _name_ == "_main_": main ()
Dabar belieka paleisti programą
python tracker.py
Sveikinimai! jūsų savarankiškai vairuojantis roveris yra paruoštas! Netrukus bus baigta ultragarso jutikliu pagrįsta navigacijos dalis ir aš atnaujinsiu šią instrukciją.
Ačiū, kad skaitote!
Rekomenduojamas:
„IoT Weather Station“su LOJ stebėjimu: 6 žingsniai
Daiktų interneto meteorologinė stotis su LOJ stebėjimu: šioje instrukcijoje parodysiu, kaip sukurti daiktų interneto (daiktų interneto) orų stotį stebint lakiuosius organinius junginius (LOJ). Šiam projektui sukūriau „pasidaryk pats“(pasidaryk pats) rinkinį. Techninė ir programinė įranga yra atvirojo kodo
„Opencv“objektų stebėjimas: 3 žingsniai
„Opencv“objektų sekimas: judančių objektų aptikimas yra technika, naudojama kompiuterinėje vizijoje ir vaizdo apdorojime. Keli iš eilės vaizdo įrašo kadrai palyginami įvairiais metodais, siekiant nustatyti, ar aptinkamas judantis objektas. Judančių objektų aptikimas buvo naudojamas
Savarankiškas „Arduino 3.3V W“/ išorinis 8 MHz laikrodis programuojamas iš „Arduino Uno“per ICSP / ISP (su serijiniu stebėjimu!): 4 žingsniai
Savarankiškas „Arduino 3.3V W / External 8 MHz“laikrodis programuojamas iš „Arduino Uno“per ICSP / ISP (su serijiniu stebėjimu!): Tikslai: Sukurkite atskirą „Arduino“, kuris veikia 3,3 V maitinimo šaltiniu iš 8 MHz išorinio laikrodžio. Norėdami jį užprogramuoti per ISP (taip pat žinomą kaip ICSP, nuoseklusis programavimas grandinėje) iš „Arduino Uno“(veikia 5 V įtampa) Norėdami redaguoti įkrovos įkėlimo failą ir įrašyti
Ištaisykite sugedusią jungiklio plokštę į išmanųjį jutiklinį jungiklį su temperatūros stebėjimu: 4 žingsniai
Ištaisykite sugedusią jungiklio plokštę į išmanųjį jutiklinį jungiklį su temperatūros stebėjimu: žinau, kad visi susidūrėte su šia problema bent vieną kartą savo gyvenime, jungiklio plokštė buvo sugedusi nuolat naudojant. Dauguma mechaninio jungiklio sugenda dėl jo įjungimo ir išjungimo daug laiko arba jungiklio viduje esanti spyruoklė pasislenka, arba
Elgetaujantis robotas su veido stebėjimu ir valdymu, naudojant „Xbox“valdiklį - „Arduino“: 9 žingsniai (su nuotraukomis)
Elgetaujantis robotas su veido stebėjimu ir valdymu, kurį atliko „Xbox“valdiklis - Arduino: Mes padarysime elgetaujantį robotą. Šis robotas bandys erzinti ar atkreipti praeinančių žmonių dėmesį. Jis aptiks jų veidus ir bandys šaudyti į juos lazeriais. Jei padovanosite robotui monetą, jis dainuos dainą ir šoks. Robotui reikės