Përmbajtje:
- Hapi 1: Hyrje
- Hapi 2: Materialet dhe Softueri i kërkuar
- Hapi 3: Ndërtimi i Shasisë Rover
- Hapi 4: Ndërtimi i Asamblesë tejzanor të Rangefinder
- Hapi 5: Skemat dhe Lidhjet Elektrike
- Hapi 6: SSH dhe Instalimi i CV -së së Hapur
- Hapi 7: Drejtimi i Kodit Python për Rover
Video: Raspberry Pi - Mars Rover Autonome me Ndjekje Objekti OpenCV: 7 hapa (me fotografi)
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:16
Mundësuar nga një Raspberry Pi 3, njohje e hapur e objekteve CV, sensorë tejzanor dhe motorë të përshtatur DC. Ky rover mund të gjurmojë çdo objekt për të cilin është stërvitur dhe të lëvizë në çdo terren.
Hapi 1: Hyrje
Në këtë Instructables, ne do të ndërtojmë një Mars Rover Autonome i cili mund të njohë objektet dhe t'i gjurmojë ato duke përdorur softuerin Open CV që funksionon në një Raspberry Pi 3 me një mundësi për të përdorur një pajisje kamera në internet ose kamerën origjinale të mjedrës pi. Shtë gjithashtu i pajisur me një sensor tejzanor të montuar në një servo për të gjetur rrugën e tij në mjedise të errëta ku kamera nuk do të funksiononte. Sinjalet e marra nga Pi i dërgohen shoferit motorik IC (L293D) i cili drejton 4 x 150 RPM motorë DC të montuar në një trup të ndërtuar me tuba PVC.
Hapi 2: Materialet dhe Softueri i kërkuar
Materialet e kërkuara
- Raspberry Pi (çdo gjë por zero)
- Kamera Raspberry PI ose një kamerë në internet
- IC shoferi i motorit L293D
- Rrotat Robot (7x4cm) X 4
- Motorët e ingranazhit DC (150RPM) X 4
- Tuba PVC për shasi
Kërkohet softuer
- Stuko për SSH ing Pi
- Hapni CV për njohjen e objektit
Hapi 3: Ndërtimi i Shasisë Rover
Për të ndërtuar këtë shasi PVC, do t'ju duhet
- 2 X 8"
- 2 X 4"
- 4 T-nyje
Vendosni tubat PVC në një strukturë të ngjashme me shkallët dhe futini në nyjet T. Ju mund të përdorni ngjitës PVC për t'i bërë nyjet edhe më të forta.
Motorët e ingranazhuar DC lidhen me shasinë e tubave PVC duke përdorur kapëset dhe më pas rrotat lidhen me motorët duke përdorur vida.
Hapi 4: Ndërtimi i Asamblesë tejzanor të Rangefinder
Kuvendi tejzanor i gjetjes së diapazonit është ndërtuar duke përdorur një sensor tejzanor HC-SR04 të lidhur me një motor Micro Servo. Kabllot janë të lidhura paraprakisht me sensorin tejzanor para se të futen në kutinë plastike e cila është e lidhur me servo motorin përmes vidhave.
Hapi 5: Skemat dhe Lidhjet Elektrike
Ju lutemi bëni lidhjet elektrike sipas diagramit të bashkangjitur.
Hapi 6: SSH dhe Instalimi i CV -së së Hapur
Tani, ne duhet të SSH në mjedrën tonë pi në mënyrë që të instalojmë programin e kërkuar. Ne do të fillojmë me SSHing në Raspberry Pi tonë. Sigurohuni që Pi juaj është i lidhur me të njëjtin ruter me kompjuterin tuaj dhe e dini se është adresa IP e caktuar nga ruteri juaj. Tani, hapni një komandë të shpejtë ose PUTTY nëse jeni në Windows dhe ekzekutoni komandën e mëposhtme.
IP -ja juaj Pi mund të jetë e ndryshme, e imja është 192.168.1.6.
Tani, futni fjalëkalimin tuaj të paracaktuar - "mjedër"
Tani, që keni SSH'd në Pi tuaj, Le të fillojmë duke azhurnuar me këtë komandë.
sudo apt-merrni përditësim && sudo apt-merrni përmirësim
Le të instalojmë mjetet e kërkuara të zhvilluesit tani, sudo apt-get install build-thelbësore cmake pkg-config
Tjetra, ne duhet të instalojmë disa paketa I/O të imazhit që do të ndihmojnë Pi -në tonë të marrë formate të ndryshme të imazhit nga disku.
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
Tani, disa pako për marrjen e videos, transmetimin e drejtpërdrejtë dhe optimizimin e performancës 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
Ne gjithashtu duhet të instalojmë skedarët e kokës Python 2.7 dhe Python 3 në mënyrë që të mund të përpilojmë OpenCV me lidhje python
sudo apt-get install python2.7-dev python3-dev
Shkarkimi i kodit burimor OpenCV
cd
wget -O opencv.zip
zbërtheni opencv.zip
Shkarkimi i depozitës opencv_contrib
wget -O opencv_contrib.zip
zbërtheni opencv_contrib.zip
Rekomandohet gjithashtu të përdorni një mjedis virtual për instalimin e OpenCV.
sudo pip instaloni virtualenv virtualenvwrapper
sudo rm -rf ~/.cache/pip
Tani, që virtualenv dhe virtualenvwrapper janë instaluar, ne duhet të azhurnojmë profilin tonë./. Për të përfshirë rreshtat e mëposhtëm në fund
eksport WORKON_HOME = $ HOME/.virtualenvs eksport VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh
Krijoni mjedisin tuaj virtual python
mkvirtualenv cv -p python2
kaloni në mjedisin virtual të krijuar
burimi ~/.profili
workon cv
Instalimi i NumPy
pip instaloni numpy
Përpiloni dhe instaloni OpenCV
cd ~/opencv-3.3.0/
mkdir ndertoj
cd ndërtuar
cmake -D CMAKE_BUILD_TYPE = LIROJI / -D CMAKE_INSTALL_PREFIX =/usr/local / -D INSTALL_PYTHON_EXAMPLES = ON / -D OPENCV_EXTRA_MODULES_PATH = ~/opencv_CAMILES_3
Më në fund përpiloni OpenCV
bëj -j4
Pasi kjo komandë të përfundojë drejtimin. E tëra çfarë ju duhet të bëni është ta instaloni.
sudo make config
sudo ldconfig
Hapi 7: Drejtimi i Kodit Python për Rover
Krijoni një skedar Python të quajtur tracker.py dhe shtoni kodin e mëposhtëm në të.
sudo nano tracker.py
kodi:-
Programi #ASAR
Ky program gjurmon një top të kuq dhe udhëzon një pi mjedër ta ndjekë atë. import sys sys.path.append ('/usr/local/lib/python2.7/site-packages') import cv2 import numpy si np import os import RPi. GPIO si 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.putput (15, 0) def bac (): IO.putput (21, 0)#Motor i majtë prapa IO. Dalje (22, 1) IO.putput (13, 0)#Motor i djathtë prapa IO. Dalje (15, 1) def ryt (): IO.putput (21, 0) #Motor i majtë IO prapa. Dalje (22, 1) IO.output (13, 1)#Motor i drejtë përpara IO. Dalje (15, 0) def lft (): IO.putput (21, 1)#Motor i majtë përpara IO. dalje (22, 0) IO. dalje (13, 0)#Motor i djathtë i prapambetur IO. dalje (15, 1) def stp (): IO.putput (21, 0)#Ndalesa e motorit të majtë IO. dalje (22, 0) IO.putput (13, 0) #Djathtas ndalesa e motorit IO.output (15, 0) ############################### #################################################### ##################### def kryesore (): capWebcam = cv2. VideoCapture (0)#deklaro një VideoCapture objekt dhe shoqëro me kamerën në internet, 0 => përdor kamerën e parë # shfaq rezolucionin origjinal print "rezolucioni i parazgjedhur =" + 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) # ndrysho rezolucionin në 320x240 për përpunimin më të shpejtë capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # shfaq rezolucion të azhurnuar të printuar "rezolucion i përditësuar =" + str (capWebCAM_RAP_AME)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) nëse capWebcam.isOpened () == E gabuar: # kontrolloni nëse objekti VideoCapture ishte i lidhur me printimin me sukses të kamerës "gabim: capWebcam nuk u arrit me sukses / n / n" # nëse jo, printoni mesazhin e gabimit në std out os.system ("pauzë") # pauzë derisa përdoruesi të shtypë një çelës në mënyrë që përdoruesi të shohë mesazhin e gabimit të kthyer # dhe të dalë nga funksioni (i cili del nga programi) # përfundim nëse gjatë cv2.waitKey (1)! = 27 dhe capWebcam.isOpened (): # derisa të shtypet tasti Esc ose të humbasë lidhjen e kamerës në internet blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # lexo kornizën tjetër nëse jo blnFrameReadSuccessfully ose imgOriginal është Asnjë: # nëse korniza nuk është lexuar me sukses printo "error: frame not read from webcam / n" # print mesazh gabimi në std out os.system (pauzë), np.array ([0, 135, 135]), np.array ([18, 255, 255])) imgThreshHigh = cv2.inRange (imgHSV, np.array ([165, 135, 135]), np. grup ([179, 255, 255])) imgThresh = cv2.add (imgThreshLow, imgThreshHigh) imgThresh = cv2. GaussianBlur (imgThresh, (3, 3), 2) imgThresh = cv2.dilate (imgThresh, np.ones (5,5 HOUGH_GRADIENT, 5, hyrje / 4) # mbush qarqe të ndryshueshme me të gjitha rrathët në imazhin e përpunuar nëse qarqet nuk është Asnjë: # kjo linjë është e nevojshme që programi të mos rrëzohet në rreshtin tjetër nëse nuk gjenden qarqe IO. dalja (7, 1) për rrethin në qarqe [0]: # për çdo rreth x, y, rreze = rreth # shpërthejnë x, y dhe rreze të shtypura "pozicioni i topit x =" + str (x) + ", y =" + str (y) + ", rrezja =" + str (rreze) # pozicioni i topit të printuar dhe rrezja obRadius = int (rrezja) xAxis = int (x) nëse obRadius> 0 & obRadius100 & xAxis180: print ("Lëviz djathtas") ryt () elif xAxis <100: print ("Moving Left") lft () else: stp () else: stp () cv2.circle (imgOriginal, (x, y), 3, (0, 255, 0), -1) # vizatoni një rreth të vogël të gjelbër në qendër të objektit të zbuluar cv2.circle (imgOriginal, (x, y), rrezja, (0, 0, 255), 3) # vizatoni rreth të kuq rreth objektit të zbuluar # fund për # fund nëse përndryshe: IO.putput (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # krijoni dritare, përdorni WINDOW_AUTOSIZE për një madhësi fikse të dritares cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # ose përdorni WINDOW_NORMAL për të lejuar ndryshimin e madhësisë së dritares cv2.imshow ("imgOriginal", imgOri ginal)#shfaq dritaret cv2.imshow ("imgThresh", imgThresh)#fund ndërsa cv2.destroyAllWindows ()#hiq dritaret nga kujtesa të kthehen ###################### #################################################### ############################# nëse _name_ == "_main_": kryesore ()
Tani, gjithçka që mbetet për të bërë është drejtimi i programit
gjurmuesi i python.py
Urime! roveri juaj vetë-drejtues është gati! Pjesa e navigimit bazuar në sensorin tejzanor do të përfundojë së shpejti dhe unë do ta azhurnoj këtë të udhëzueshme.
Faleminderit per leximin!
Recommended:
Fustan Viktorian me një qafë autonome të rregullueshme: 8 hapa (me fotografi)
Fustan Viktorian i Ballit me një Qafë Autonome të Rregullueshme: Ky është një projekt që kam bërë për Topin Viktorian të Dimrit në Krakov. Një fustan i zgjuar i topit i cili rregullon madhësinë e dekolteve të tij bazuar në afërsinë e një zotërinjsh që qëndrojnë para tij
Dron dorëzimi autonome me krahë fiks (i printuar në 3D): 7 hapa (me fotografi)
Drone Autonome me Dorëzim me Krahë Fiks (e Shtypur 3D): Teknologjia e droneve ka evoluar shumë siç është shumë më e arritshme për ne se më parë. Sot ne mund të ndërtojmë një dron shumë lehtë dhe mund të jemi autonome dhe mund të kontrollohemi nga kudo në botëDronology Technology mund të ndryshojë jetën tonë të përditshme. Dorëzimi
Makinë me sensorë objekti: 6 hapa
Makinë me Sensorë të Objekteve: Videoja në krye Hyrje: Gjithmonë ekziston një problem që njerëzit nuk e dinë se ku i vendosin gjërat ose nuk e dinë nëse objekti është në vendin e duhur, dhe njerëzit gjithmonë harrojnë të marrin sendin dhe harrojnë vendosjen atë në vendin e tyre përkatës. Pra, bindja ime
DIY Dashuri interesante Zemra Ndjekje Efekti LED Dritat: 8 hapa (me fotografi)
DIY Dashuri interesante Zemra Ndjekje Efekti LED Dritat: Kjo strukturë mbulon mënyrën se si të bëni magji të mahnitshme duke ndezur dritat LED për dashnorin, babanë, nënën, shokët e klasës dhe miqtë e mirë. Kjo është mjaft e lehtë për tu ndërtuar për sa kohë që keni durim. Unë rekomandoj që të keni një përvojë bashkimi nëse ndërtoni
Makinë autonome që mban korsi duke përdorur Raspberry Pi dhe OpenCV: 7 hapa (me fotografi)
Makinë Autonome e Mbajtjes së Korsisë duke Përdorur Raspberry Pi dhe OpenCV: Në këtë udhëzues, një robot autonom për ruajtjen e korsisë do të zbatohet dhe do të kalojë nëpër hapat e mëposhtëm: Grumbullimi i Pjesëve Instalimi i parakushteve të softuerit Montimi i pajisjeve Testi i parë Zbulimi i linjave të korsisë dhe shfaqja e udhëzuesit