Talaan ng mga Nilalaman:

Raspberry Pi - Autonomous Mars Rover Na May Pagsubaybay sa Bagay na OpenCV: 7 Mga Hakbang (na may Mga Larawan)
Raspberry Pi - Autonomous Mars Rover Na May Pagsubaybay sa Bagay na OpenCV: 7 Mga Hakbang (na may Mga Larawan)

Video: Raspberry Pi - Autonomous Mars Rover Na May Pagsubaybay sa Bagay na OpenCV: 7 Mga Hakbang (na may Mga Larawan)

Video: Raspberry Pi - Autonomous Mars Rover Na May Pagsubaybay sa Bagay na OpenCV: 7 Mga Hakbang (na may Mga Larawan)
Video: I Built a Mini Mars Rover 2024, Nobyembre
Anonim
Raspberry Pi - Autonomous Mars Rover Na May Pagsubaybay sa Bagay na OpenCV
Raspberry Pi - Autonomous Mars Rover Na May Pagsubaybay sa Bagay na OpenCV

Pinapagana ng isang Raspberry Pi 3, Buksan ang pagkilala ng object ng CV, mga sensor ng Ultrasonic at nakatuon na DC motor. Maaaring subaybayan ng rover ang anumang bagay na sinanay nito at lumipat sa anumang lupain.

Hakbang 1: Panimula

Image
Image
Kinakailangan ang Mga Materyales at Software
Kinakailangan ang Mga Materyales at Software

Sa Mga Instructable na ito, magtatayo kami ng isang Autonomous Mars Rover na maaaring makilala ang mga bagay at subaybayan ang mga ito gamit ang Open CV software na tumatakbo sa isang Raspberry Pi 3 na may pagpipilian na gumamit ng isang webcam device o ang orihinal na raspberry pi camera. Nilagyan din ito ng isang sensor ng Ultrasonic na naka-mount sa isang servo upang subaybayan ang paraan sa madilim na mga kapaligiran kung saan hindi gagana ang camera. Ang mga signal na natanggap mula sa Pi ay ipinapadala sa driver ng motor na IC (L293D) na hinihimok ang 4 x 150RPM DC na mga motor na naka-mount sa isang katawan na itinayo sa mga pipa ng PVC.

Hakbang 2: Kinakailangan ang Mga Materyales at Software

Kinakailangan ang Mga Materyales at Software
Kinakailangan ang Mga Materyales at Software
Kinakailangan ang Mga Materyales at Software
Kinakailangan ang Mga Materyales at Software

Mga Materyal na Kinakailangan

  1. Raspberry Pi (Anuman ngunit zero)
  2. Raspberry PI Camera o isang webcam
  3. L293D motor driver IC
  4. Robot Wheels (7x4cm) X 4
  5. Geared DC Motors (150RPM) X 4
  6. Mga pipa ng PVC para sa chassis

Kinakailangan ang software

  1. Masilya para sa SSH na nasa Pi
  2. Buksan ang CV para sa pagkilala ng bagay

Hakbang 3: Pagbuo ng Rover Chassis

Pagbuo ng Rover Chassis
Pagbuo ng Rover Chassis
Pagbuo ng Rover Chassis
Pagbuo ng Rover Chassis
Pagbuo ng Rover Chassis
Pagbuo ng Rover Chassis

Upang maitayo ang PVC chassis na ito, kakailanganin mo

  • 2 X 8"
  • 2 X 4"
  • 4 na T-Pagsasama

Ayusin ang mga pipa ng PVC sa isang hagdan tulad ng istraktura at ipasok sa mga T-joint. Maaari mong gamitin ang sealant ng PVC upang gawing mas malakas ang mga kasukasuan.

Ang naka-gear na DC motors ay konektado sa mga chassis ng tubo ng PVC gamit ang mga clamp at pagkatapos ang mga gulong ay konektado sa mga motor na gumagamit ng mga turnilyo.

Hakbang 4: Pagbuo ng Ultrasonic Rangefinder Assembly

Pagbuo ng Assembly ng Ultrasonic Rangefinder
Pagbuo ng Assembly ng Ultrasonic Rangefinder

Ang pagpupulong ng tagahanap ng saklaw ng ultrasonic ay binuo gamit ang isang HC-SR04 Ultrasonikong sensor na konektado sa isang Micro Servo motor. Ang mga kable ay paunang konektado sa ultrasonic sensor bago ilagay sa plastic case na konektado sa servo motor sa pamamagitan ng mga turnilyo.

Hakbang 5: Mga Koneksyon sa Skematika at Elektrikal

Mga Koneksyon sa Skematika at Elektrikal
Mga Koneksyon sa Skematika at Elektrikal
Mga Koneksyon sa Skematika at Elektrikal
Mga Koneksyon sa Skematika at Elektrikal

Mangyaring gawin ang mga koneksyon sa kuryente ayon sa nakakabit na diagram ng circuit.

Hakbang 6: Pag-install ng SSH at Buksan ang CV

SSH at Buksan ang Pag-install ng CV
SSH at Buksan ang Pag-install ng CV

Ngayon, kailangan naming SSH sa aming raspberry pi upang mai-install ang kinakailangang software. Magsisimula kami sa pamamagitan ng SSHing sa aming Raspberry Pi. Tiyaking nakakonekta ang iyong Pi sa parehong router tulad ng iyong PC at alam mo na ang IP address na itinalaga dito ng iyong router. Ngayon, buksan ang isang prompt ng utos o PUTTY kung nasa Windows ka at patakbuhin ang sumusunod na utos.

ssh [email protected]

Ang IP ng iyong Pi ay maaaring magkakaiba, ang akin ay 192.168.1.6.

Ngayon, ipasok ang iyong default na password - "raspberry"

Ngayon, na mayroon kang SSH sa iyong Pi, Magsimula tayo sa pamamagitan ng pag-update gamit ang utos na ito.

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

I-install na natin ang mga kinakailangang tool ng developer ngayon, sudo apt-get install build-essential cmake pkg-config

Susunod, kailangan naming mag-install ng ilang mga pakete ng I / O ng imahe na makakatulong sa aming Pi na kumuha ng iba't ibang mga format ng imahe mula sa disk.

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

Ngayon, ilang mga pakete para sa pagkuha ng video, live streaming at pag-optimize sa pagganap ng OpenCV

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

Kailangan din naming mag-install ng mga file ng header ng Python 2.7 at Python 3 upang maaari naming maiipon ang OpenCV gamit ang mga bind ng python

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

Pagda-download ng source code ng OpenCV

cd ~

wget -O opencv.zip

i-unzip ang opencv.zip

Pag-download ng opencv_contrib repository

wget -O opencv_contrib.zip

i-unzip ang opencv_contrib.zip

Inirerekumenda rin na gumamit ng isang virtual na kapaligiran para sa pag-install ng OpenCV.

sudo pip install virtualenv virtualenvwrapper

sudo rm -rf ~ /.cache / pip

Ngayon, na-install na ang virtualenv at virtualenvwrapper, kailangan naming i-update ang aming ~ /.profile upang isama ang mga sumusunod na linya sa ibaba

i-export ang WORKON_HOME = $ HOME /.virtualenvs export VIRTUALENVWRAPPER_PYTHON = / usr / bin / python3 source /usr/local/bin/virtualenvwrapper.sh

Lumikha ng iyong python virtual na kapaligiran

mkvirtualenv cv -p python2

lumipat sa nilikha na virtual na kapaligiran

mapagkukunan ~ /.profile

workon cv

Pag-install ng NumPy

pip install na numpy

Magtipon at Mag-install ng OpenCV

cd ~ / opencv-3.3.0 /

mkdir build

pagbuo ng cd

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 / modules / -D BUILD_..

Sa wakas ay ipunin ang OpenCV

gumawa -j4

Matapos ang utos na ito matapos ang pagtakbo. Ang kailangan mo lang gawin ay i-install ito.

sudo gumawa ng config

sudo ldconfig

Hakbang 7: Pagpapatakbo ng Python Code para sa Rover

Image
Image

Lumikha ng isang file ng Python na tinatawag na tracker.py at idagdag ang sumusunod na code dito.

sudo nano tracker.py

code: -

#ASAR Program

# Ang program na ito ay sumusubaybay sa isang pulang bola at nagtuturo sa isang raspberry pi na sundin ito. import sys sys.path.append ('/ usr / local / lib / python2.7 / site-packages') import cv2 import numpy bilang np import os import RPi. GPIO bilang 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) #Kaliwang Motor pabalik ng IO.output (22, 1) IO.output (13, 0) #Right Motor pabalik na IO.output (15, 1) def ryt (): IO.output (21, 0) #Kaliwang Motor pabalik ng IO.output (22, 1) IO.output (13, 1) #Tapat na Motor pasulong IO.output (15, 0) def lft (): IO.output (21, 1) #Kaliwang Motor pasulong IO.output (22, 0) IO.output (13, 0) #Right Motor paatras IO.output (15, 1) def stp (): IO.output (21, 0) #Kaliwang Motor ihinto ang IO.output (22, 0) IO.output (13, 0) #Tapat na Paghinto ng Motor sa IO.output (15, 0) ---------------- ###Oooooooooooooooo #### Object ng VideoCapture at iugnay sa webcam, 0 => gamitin ang 1st webcam # ipakita ang orihinal na resolusyon na naka-print "default resolution =" + 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) # baguhin ang resolusyon sa 320x240 para sa mas mabilis na pagproseso ng capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # ipakita ang na-update na resolusyon na naka-print "na-update na resolusyon =" + str (capWebcam.get (cv2. CAP_PROP_FRAME_WID) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) kung capWebcam.isOpened () == Mali: # suriin kung ang object ng VideoCapture ay naiugnay sa webcam na matagumpay na na-print ang "error: capWebcam ay hindi matagumpay na na-access / n / n" # kung hindi, i-print ang mensahe ng error upang maalis ang os.system ("pause") # pause hanggang sa pindutin ng isang gumagamit ang isang susi upang makita ng gumagamit ang error message return # at exit function (na lalabas sa programa) # magtatapos kung habang cv2.waitKey (1)! = 27 at capWebcam.isOpened (): # hanggang sa mapindot ang Esc key o mawala ang koneksyon sa webcam blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # basahin ang susunod na frame kung hindi blnFrameReadSuccessfully o imgOriginal ay Wala: # kung ang frame ay hindi nabasang matagumpay na na-print "error: hindi nabasa ang frame mula sa webcam / n" # mensahe ng error sa pag-print upang maiwasang os.system ("pause") # pause hanggang sa pipindutin ng isang gumagamit ang isang susi upang makita ng gumagamit ang error message break # exit habang loop (na lalabas sa programa) # end if 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. array ([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) # punan ang mga variable na bilog sa lahat ng mga bilog sa naprosesong imahe kung mga lupon ay hindi Wala: # ang linya na ito ay kinakailangan upang mapanatili ang programa mula sa pag-crash sa susunod na linya kung walang mga lupon na natagpuan IO.output (7, 1) para sa bilog sa mga bilog [0]: # para sa bawat bilog x, y, radius = bilog # putulin ang x, y, at radius print na "posisyon ng bola x =" + str (x) + ", y =" + str (y) + ", radius =" + str (radius) # posisyon ng pag-print ng bola at radius obRadius = int (radius) xAxis = int (x) kung 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) # gumuhit ng maliit na berdeng bilog sa gitna ng napansin na object cv2.circle (imgOriginal, (x, y), radius, (0, 0, 255), 3) # gumuhit ng pulang bilog sa paligid ng napansin na bagay # pagtatapos para sa # pagtatapos kung iba pa: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # lumikha ng mga bintana, gamitin ang WINDOW_AUTOSIZE para sa isang nakapirming laki ng window cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # o gamitin ang WINDOW_NORMAL upang payagan ang pag-resize ng window ng cv2.imshow ("imgOriginal", imgOri ginal) # show windows cv2.imshow ("imgThresh", imgThresh) # end habang cv2.destroyAllWindows () # alisin ang mga bintana mula sa pagbabalik ng memorya ###umdal ###Oooooooooooooooo ####

Ngayon, ang natitira lamang na gawin ay patakbuhin ang programa

sawa tracker.py

Congrats! ang iyong self-pagmamaneho rover ay handa na! Ang bahagi ng nabigasyon na batay sa Ultrasonik sensor ay makukumpleto sa lalong madaling panahon at ia-update ko ito sa itinuturo.

Salamat sa pagbabasa!

Inirerekumendang: