Satura rādītājs:

Raspberry Pi - autonoms Mars Rover ar OpenCV objektu izsekošanu: 7 soļi (ar attēliem)
Raspberry Pi - autonoms Mars Rover ar OpenCV objektu izsekošanu: 7 soļi (ar attēliem)

Video: Raspberry Pi - autonoms Mars Rover ar OpenCV objektu izsekošanu: 7 soļi (ar attēliem)

Video: Raspberry Pi - autonoms Mars Rover ar OpenCV objektu izsekošanu: 7 soļi (ar attēliem)
Video: Raspberry Pi Pico для робототехники 2024, Novembris
Anonim
Raspberry Pi - autonoms Mars Rover ar OpenCV objektu izsekošanu
Raspberry Pi - autonoms Mars Rover ar OpenCV objektu izsekošanu

Darbojas ar Raspberry Pi 3, Open CV objektu atpazīšanu, ultraskaņas sensoriem un reduktoriem līdzstrāvas motoriem. Šis roveris var izsekot jebkuram objektam, kuram tas ir apmācīts, un pārvietoties pa jebkuru reljefu.

1. darbība. Ievads

Image
Image
Nepieciešami materiāli un programmatūra
Nepieciešami materiāli un programmatūra

Šajā instrukcijā mēs izveidosim autonomu Mars Rover, kas var atpazīt objektus un tos izsekot, izmantojot programmatūru Open CV, kas darbojas Raspberry Pi 3, ar iespēju izmantot tīmekļa kameras ierīci vai oriģinālo aveņu pi kameru. Tas ir aprīkots arī ar ultraskaņas sensoru, kas uzstādīts uz servo, lai izsekotu ceļu tumšā vidē, kur kamera nedarbotos. Signāli, kas saņemti no Pi, tiek nosūtīti motora vadītājam IC (L293D), kas vada 4 x 150 apgr./min līdzstrāvas motorus, kas uzstādīti uz korpusa, kas būvēts ar PVC caurulēm.

2. darbība. Nepieciešamie materiāli un programmatūra

Nepieciešami materiāli un programmatūra
Nepieciešami materiāli un programmatūra
Nepieciešami materiāli un programmatūra
Nepieciešami materiāli un programmatūra

Nepieciešamie materiāli

  1. Raspberry Pi (jebkurš, izņemot nulli)
  2. Aveņu PI kamera vai tīmekļa kamera
  3. L293D motora vadītāja IC
  4. Robota riteņi (7x4cm) X 4
  5. Pārnesumkārbas līdzstrāvas motori (150 apgriezieni minūtē) X 4
  6. PVC caurules šasijām

Nepieciešama programmatūra

  1. Tepe SSH ing the Pi
  2. Atveriet CV objektu atpazīšanai

3. darbība: Rover šasijas izveide

Rover šasijas izgatavošana
Rover šasijas izgatavošana
Rover šasijas izgatavošana
Rover šasijas izgatavošana
Rover šasijas izgatavošana
Rover šasijas izgatavošana

Lai izveidotu šo PVC šasiju, jums būs nepieciešams

  • 2 X 8"
  • 2 X 4"
  • 4 T-locītavas

Sakārtojiet PVC caurules kāpnēm līdzīgā konstrukcijā un ievietojiet T veida savienojumos. Jūs varat izmantot PVC hermētiķi, lai padarītu savienojumus vēl stiprākus.

Pārnesumkārbas līdzstrāvas motori ir savienoti ar PVC cauruļu šasiju, izmantojot skavas, un pēc tam riteņi tiek savienoti ar motoriem, izmantojot skrūves.

4. solis: izveidojiet ultraskaņas attāluma meklētāju

Ultraskaņas attāluma meklētāja komplekta veidošana
Ultraskaņas attāluma meklētāja komplekta veidošana

Ultraskaņas diapazona meklētāja komplekts ir veidots, izmantojot ultraskaņas sensoru HC-SR04, kas savienots ar Micro Servo motoru. Kabeļi ir iepriekš savienoti ar ultraskaņas sensoru pirms ievietošanas plastmasas korpusā, kas ar skrūvēm ir savienots ar servomotoru.

5. darbība: shēmas un elektriskie savienojumi

Shēmas un elektriskie savienojumi
Shēmas un elektriskie savienojumi
Shēmas un elektriskie savienojumi
Shēmas un elektriskie savienojumi

Lūdzu, veiciet elektriskos savienojumus saskaņā ar pievienoto shēmu.

6. darbība: SSH un atvērtā CV instalēšana

SSH un atvērtā CV instalēšana
SSH un atvērtā CV instalēšana

Tagad mums ir jāieslēdz SSH mūsu aveņu pi, lai instalētu nepieciešamo programmatūru. Mēs sāksim ar SSHing mūsu Raspberry Pi. Pārliecinieties, vai jūsu Pi ir savienots ar to pašu maršrutētāju kā jūsu dators, un vai jūs zināt, ka tā ir IP adrese, ko tam piešķīris maršrutētājs. Tagad, atverot komandu uzvedni vai PUTTY, ja izmantojat Windows, un palaidiet šādu komandu.

ssh [email protected]

Jūsu Pi IP var būt atšķirīgs, mans ir 192.168.1.6.

Tagad ievadiet noklusējuma paroli - "aveņu"

Tagad, kad jūsu Pi ir SSH'd, sāksim ar atjaunināšanu ar šo komandu.

sudo apt-get update && sudo apt-get upgrade

Instalēsim nepieciešamos izstrādātāja rīkus tūlīt, sudo apt-get install build-essential cmake pkg-config

Tālāk mums jāinstalē dažas attēlu I/O pakotnes, kas palīdzēs mūsu Pi izgūt dažādus attēla formātus no diska.

sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

Tagad dažas paketes video iegūšanai, tiešraidei un OpenCV veiktspējas optimizēšanai

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

Mums ir jāinstalē arī Python 2.7 un Python 3 galvenes faili, lai mēs varētu apkopot OpenCV ar python saistībām

sudo apt-get install python2.7-dev python3-dev

OpenCV avota koda lejupielāde

cd ~

wget -O opencv.zip

unzip opencv.zip

Lejupielādē opencv_contrib repozitoriju

wget -O opencv_contrib.zip

unzip opencv_contrib.zip

OpenCV instalēšanai ieteicams izmantot arī virtuālo vidi.

sudo pip instalēt virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

Tagad, kad ir instalēts virtualenv un virtualenvwrapper, mums ir jāatjaunina mūsu profils ~/., Lai apakšā iekļautu šādas rindas

eksportēt WORKON_HOME = $ HOME/.virtualenvs eksportēt VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh

Izveidojiet savu python virtuālo vidi

mkvirtualenv cv -p python2

pārslēgties uz izveidoto virtuālo vidi

avots ~/.profils

workon cv

NumPy instalēšana

pip instalēt numpy

Apkopojiet un instalējiet OpenCV

cd ~/opencv-3.3.0/

mkdir uzbūve

cd būve

cmake -D CMAKE_BUILD_TYPE = ATLAIST / -D CMAKE_INSTALL_PREFIX =/usr/local / -D INSTALL_PYTHON_EXAMPLES = ON / -D OPENCV_EXTRA_MODULES_PATH = ~/opencv_cribrib -3.3.0/modules..

Visbeidzot apkopojiet OpenCV

padarīt -j4

Pēc šīs komandas darbības pabeigšanas. Viss, kas jums jādara, ir to instalēt.

sudo veikt konfigurāciju

sudo ldconfig

7. darbība: Rover Python koda palaišana

Image
Image

Izveidojiet Python failu ar nosaukumu tracker.py un pievienojiet tam šādu kodu.

sudo nano tracker.py

kods:-

#ASAR programma

#Šī programma izseko sarkano bumbiņu un uzdod aveņu pi tam sekot. importēt sys sys.path.append ('/usr/local/lib/python2.7/site-paketes') importēt cv2 importēt numpy kā np importēt os importēt RPi. GPIO kā 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)#Kreisais motors atpakaļ IO. Izeja (22, 1) IO. Izeja (13, 0)#Pareizā motora atpakaļgaitas izeja (15, 1) def ryt (): IO. #Kreisais motors atpakaļ IO. Izeja (22, 1) IO. Izeja (13, 1)#Labā motora virzība uz priekšu IO. Izeja (15, 0) def lft (): IO. Izeja (21, 1)#Kreisā motora virzība uz priekšu IO. izeja (22, 0) IO. izeja (13, 0)#Pareizā motora atpakaļgaitas IO. izeja (15, 1) def stp (): IO. izeja (21, 0)#Kreisā motora apstāšanās IO. izeja (22, 0) IO. Izvade (13, 0)#Pareiza motora apstāšanās IO. Izeja (15, 0) ################### ################################################# #################### def main (): capWebcam = cv2. VideoCapture (0)#deklarēt a VideoCapture objekts un saistīts ar tīmekļa kameru, 0 => izmantot 1. tīmekļa kameru # rādīt oriģinālo izšķirtspēju drukāt "noklusējuma izšķirtspēja =" + 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) # mainīt izšķirtspēju uz 320x240, lai ātrāk apstrādātu capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # rādīt atjauninātu izšķirtspēju drukāt "atjaunināta izšķirtspēja =" + str (capWebcam.get (cv2. CAP_PROP_FR)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)), ja capWebcam.isOpened () == Nepareizi: # pārbaudiet, vai VideoCapture objekts ir saistīts ar tīmekļa kameru, lai izdrukātu "kļūda: capWebcam nav veiksmīgi piekļuvis / n / n" # ja nē, izdrukājiet kļūdas ziņojumu, lai std out os.system ("pauze") # pauze, līdz lietotājs nospiež taustiņu, lai lietotājs varētu redzēt kļūdas ziņojumu return # un iziešanas funkciju (kas iziet no programmas) # beidzas, ja, kamēr cv2.waitKey (1)! = 27 un capWebcam.isOpened (): # līdz tiek nospiests taustiņš Esc vai tiek zaudēts savienojums ar tīmekļa kameru blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # lasīt nākamo kadru, ja ne blnFrameReadSuccessfully vai imgOriginal ir None: # ja rāmis netika sekmīgi lasīts drukāt "error: frame not read from webcam / n" # drukas kļūdas ziņojums std out os.system ("pauze") # pauze, līdz lietotājs nospiež taustiņu, lai lietotājs varētu redzēt kļūdas ziņojumu break # exit, kamēr cilpa (kas iziet no programmas) # end, ja 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. masīvs ([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 apļi = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # aizpildiet mainīgos apļus ar visiem aplīšiem apstrādātajā attēlā, ja apļi nav Nav: # šī rinda ir nepieciešama, lai programma netiktu avarējusi nākamajā rindā, ja apļi netika atrasti izlauzties x, y un rādiusa druka "lodītes stāvoklis x =" + str (x) + ", y =" + str (y) + ", rādiuss =" + str (rādiuss) # drukas lodītes stāvoklis un rādiuss obRadius = int (rādiuss) xAxis = int (x), ja obRadius> 0 & obRadius100 & xAxis180: print ("Kustoties pa labi") ryt () elif xAxis <100: print ("Moving Left") lft () else: stp () else: stp () cv2.aplis (imgOriginal, (x, y), 3, (0, 255, 0), -1) # uzzīmējiet nelielu zaļu apli atklātā objekta cv2.circle centrā (imgOriginal, (x, y), rādiuss, (0, 0, 255), 3) # uzzīmējiet sarkanu apli ap konstatēto objektu # beigas # beigām, ja citādi: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # izveidot logus, izmantojiet WINDOW_AUTOSIZE fiksēta loga izmēram cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # vai izmantojiet WINDOW_NORMAL, lai atļautu loga lieluma maiņu cv2.imshow ("imgOriginal", imgOri ginal)#rādīt logus cv2.imshow ("imgThresh", imgThresh)#beigas, kamēr cv2.destroyAllWindows ()#noņemt logus no atmiņas atgriešanās ##################### ################################################# ############################# ja _name_ == "_main_": main ()

Tagad atliek tikai palaist programmu

python tracker.py

Apsveicu! jūsu pašbraucošais roveris ir gatavs! Drīz tiks pabeigta uz ultraskaņas sensoriem balstītā navigācijas daļa, un es atjaunināšu šo pamācību.

Paldies, ka izlasījāt!

Ieteicams: