Turinys:

„Raspberry Pi“- autonominis „Mars Rover“su „OpenCV“objektų stebėjimu: 7 žingsniai (su nuotraukomis)
„Raspberry Pi“- autonominis „Mars Rover“su „OpenCV“objektų stebėjimu: 7 žingsniai (su nuotraukomis)

Video: „Raspberry Pi“- autonominis „Mars Rover“su „OpenCV“objektų stebėjimu: 7 žingsniai (su nuotraukomis)

Video: „Raspberry Pi“- autonominis „Mars Rover“su „OpenCV“objektų stebėjimu: 7 žingsniai (su nuotraukomis)
Video: Raspberry Pi Pico для робототехники 2024, Lapkritis
Anonim
„Raspberry Pi“- autonominis „Mars Rover“su „OpenCV“objektų sekimu
„Raspberry Pi“- autonominis „Mars Rover“su „OpenCV“objektų sekimu

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

Image
Image
Reikalinga medžiaga ir programinė įranga
Reikalinga medžiaga ir programinė įranga

Š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

Reikalinga medžiaga ir programinė įranga
Reikalinga medžiaga ir programinė įranga
Reikalinga medžiaga ir programinė įranga
Reikalinga medžiaga ir programinė įranga

Reikalingos medžiagos

  1. Raspberry Pi (bet koks, bet nulis)
  2. Raspberry PI kamera arba internetinė kamera
  3. L293D variklio vairuotojo IC
  4. Robotų ratai (7x4 cm) X 4
  5. Pavarų nuolatinės srovės varikliai (150 aps./min.) X 4
  6. PVC vamzdžiai važiuoklei

Reikalinga programinė įranga

  1. Glaistas, skirtas SSH ing the Pi
  2. Atidarykite CV, kad atpažintumėte objektą

3 žingsnis: „Rover“važiuoklės kūrimas

„Rover“važiuoklės kūrimas
„Rover“važiuoklės kūrimas
„Rover“važiuoklės kūrimas
„Rover“važiuoklės kūrimas
„Rover“važiuoklės kūrimas
„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į

Ultragarsinio nuotolio ieškiklio surinkimas
Ultragarsinio nuotolio ieškiklio surinkimas

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

Schemos ir elektros jungtys
Schemos ir elektros jungtys
Schemos ir elektros jungtys
Schemos ir elektros jungtys

Elektros jungtis atlikite pagal pridedamą schemą.

6 veiksmas: SSH ir atidarykite CV diegimą

SSH ir atviro CV diegimas
SSH ir atviro CV diegimas

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ą.

ssh [email protected]

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ą

Image
Image

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: