Talaan ng mga Nilalaman:
- Hakbang 1: Panimula
- Hakbang 2: Kinakailangan ang Mga Materyales at Software
- Hakbang 3: Pagbuo ng Rover Chassis
- Hakbang 4: Pagbuo ng Ultrasonic Rangefinder Assembly
- Hakbang 5: Mga Koneksyon sa Skematika at Elektrikal
- Hakbang 6: Pag-install ng SSH at Buksan ang CV
- Hakbang 7: Pagpapatakbo ng Python Code para sa Rover
Video: Raspberry Pi - Autonomous Mars Rover Na May Pagsubaybay sa Bagay na OpenCV: 7 Mga Hakbang (na may Mga Larawan)
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:11
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
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
Mga Materyal na Kinakailangan
- Raspberry Pi (Anuman ngunit zero)
- Raspberry PI Camera o isang webcam
- L293D motor driver IC
- Robot Wheels (7x4cm) X 4
- Geared DC Motors (150RPM) X 4
- Mga pipa ng PVC para sa chassis
Kinakailangan ang software
- Masilya para sa SSH na nasa Pi
- Buksan ang CV para sa pagkilala ng bagay
Hakbang 3: 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
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
Mangyaring gawin ang mga koneksyon sa kuryente ayon sa nakakabit na diagram ng circuit.
Hakbang 6: Pag-install ng SSH at Buksan ang 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.
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
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:
ATtiny85 Nasusuot na Pagsubaybay ng Aktibidad na Pagsubaybay ng Aktibidad at Programming ATtiny85 Sa Arduino Uno: 4 na Hakbang (na may Mga Larawan)
ATtiny85 Nasusuot na Pagsubaybay ng Aktibidad na Pagsubaybay sa Aktibidad at Programming ATtiny85 Sa Arduino Uno: Paano gagawin ang relo ng pagsusuot ng aktibidad na maaaring panoorin? Ito ay isang naisusuot na gadget na dinisenyo upang mag-vibrate kapag nakita nito ang pagwawalang-kilos. Ginugugol mo ba ang karamihan ng iyong oras sa computer na tulad ko? Nakaupo ka ba nang maraming oras nang hindi namamalayan? Pagkatapos ang aparatong ito ay f
Pagsubaybay sa Opencv na Bagay: 3 Mga Hakbang
Pagsubaybay sa Opencv Object: Ang paglipat ng pagtuklas ng bagay ay isang pamamaraan na ginamit sa paningin ng computer at pagproseso ng imahe. Ang maramihang magkakasunod na mga frame mula sa isang video ay inihambing ng iba't ibang mga pamamaraan upang matukoy kung ang anumang gumagalaw na bagay ay napansin. Ang paggalaw ng mga bagay na nakita ay ginamit para sa wi
Gumawa ng Bulag na Makilala ang Mga Bagay sa pamamagitan ng pagpindot sa Mga Bagay sa Kanila Paggamit ng MakeyMakey: 3 Mga Hakbang
Gawing Makilala ang mga Bulag sa Mga bagay sa pamamagitan ng pagpindot sa Mga Bagay sa Kanila Paggamit ng MakeyMakey: pagpapakilalaLayunin ng proyektong ito na gawing madali ang buhay ng bulag sa pamamagitan ng pagkilala sa mga bagay sa kanilang paligid sa pamamagitan ng pakiramdam ng ugnayan. Kami at ang aking anak na si Mustafa naisip namin ang tungkol sa paghahanap ng isang tool upang matulungan sila at sa panahon na ginagamit namin ang MakeyMakey hardware t
Pagsubaybay sa Bagay ng Camera Slider Sa Paikot na Axis. 3D Naka-print at Itinayo sa RoboClaw DC Motor Controller at Arduino: 5 Hakbang (na may Mga Larawan)
Pagsubaybay sa Bagay ng Camera Slider Sa Paikot na Axis. 3D Naka-print at Itinayo sa RoboClaw DC Motor Controller at Arduino: Ang proyektong ito ay naging isa sa aking mga paboritong proyekto mula nang pagsamahin ko ang aking interes sa paggawa ng video sa DIY. Palagi kong tiningnan at nais na tularan ang mga cinematic shot na iyon sa mga pelikula kung saan ang camera ay gumagalaw sa isang screen habang sinasabing upang subaybayan ang
Paano Makakuha ng Mga Kanta o Iba Pang Bagay-bagay sa isang DVD Bilang isang MP3: 4 Mga Hakbang
Paano Kumuha ng Mga Kanta o Iba Pang Bagay-bagay sa isang DVD Bilang isang MP3: Kung mayroon kang isang DualDisc na may mga kanta dito na nais mong pakinggan sa isang Ipod, o isang normal na DVD na marahil isang track ng komentaryo na nais mong pakinggan isang Ipod, basahin ang natitirang bahagi nito upang magawa iyon. Mga item na kailangan-Computer, kamay, utak, DVD, Ipod