INHOUDSOPGAWE:

Raspberry Pi - Outonome Mars Rover Met OpenCV -voorwerpopsporing: 7 stappe (met foto's)
Raspberry Pi - Outonome Mars Rover Met OpenCV -voorwerpopsporing: 7 stappe (met foto's)

Video: Raspberry Pi - Outonome Mars Rover Met OpenCV -voorwerpopsporing: 7 stappe (met foto's)

Video: Raspberry Pi - Outonome Mars Rover Met OpenCV -voorwerpopsporing: 7 stappe (met foto's)
Video: OpenBot: Turning Smartphones into Robots | Embodied AI Lecture Series at AI2 2024, Julie
Anonim
Raspberry Pi - Outonome Mars Rover met OpenCV -voorwerpopsporing
Raspberry Pi - Outonome Mars Rover met OpenCV -voorwerpopsporing

Aangedryf deur 'n Raspberry Pi 3, Open CV -objekherkenning, Ultrasoniese sensors en gemotoriseerde DC -motors. Hierdie rover kan enige voorwerp waarvoor hy opgelei is, opspoor en op enige terrein beweeg.

Stap 1: Inleiding

Image
Image
Materiaal en sagteware benodig
Materiaal en sagteware benodig

In hierdie instruksies gaan ons 'n outonome Mars Rover bou wat voorwerpe kan herken en opspoor met behulp van die Open CV -sagteware wat op 'n Raspberry Pi 3 gebruik word, met 'n opsie om 'n webcam -toestel of die oorspronklike framboospi -kamera te gebruik. Dit is ook toegerus met 'n ultraklank -sensor wat op 'n servo gemonteer is om in donker omgewings op te spoor waar die kamera nie werk nie. Seine wat van Pi ontvang word, word gestuur na die motorbestuurder IC (L293D), wat 4 x 150 rpm DC -motors aandryf wat gemonteer is op 'n bak met PVC -pype.

Stap 2: materiaal en sagteware benodig

Materiaal en sagteware benodig
Materiaal en sagteware benodig
Materiaal en sagteware benodig
Materiaal en sagteware benodig

Materiaal benodig

  1. Framboos Pi (enige maar nul)
  2. Framboos PI -kamera of 'n webkamera
  3. L293D motorbestuurder IC
  4. Robotwiele (7x4cm) X 4
  5. Geskikte DC -motors (150 omw / min) X 4
  6. PVC pype vir onderstel

Sagteware benodig

  1. Putty vir SSH ing the Pi
  2. Maak CV oop vir objekherkenning

Stap 3: Bou die Rover -onderstel

Bou van die Rover -onderstel
Bou van die Rover -onderstel
Bou van die Rover -onderstel
Bou van die Rover -onderstel
Bou van die Rover -onderstel
Bou van die Rover -onderstel

U benodig hierdie PVC -onderstel

  • 2 x 8"
  • 2 X 4"
  • 4 T-gewrigte

Plaas die PVC-pype in 'n leeragtige struktuur en plaas dit in T-verbindings. U kan die PVC -seëlaar gebruik om die voeë nog sterker te maak.

Die gemotoriseerde DC -motors word met klemme verbind met die PVC -pyponderstel, en dan word wiele met skroewe met die motors verbind.

Stap 4: Bou van ultrasoniese afstandsmeter -samestelling

Bou van ultrasoniese afstandsmeter -samestelling
Bou van ultrasoniese afstandsmeter -samestelling

Die ultrasoniese afstandsmeter-samestelling is gebou met behulp van 'n HC-SR04 Ultrasoniese sensor wat met 'n Micro Servo-motor verbind is. Kabels word vooraf met die ultrasoniese sensor gekoppel voordat hulle in die plastiekkas geplaas word wat via skroewe aan die servomotor gekoppel is.

Stap 5: Skema's en elektriese verbindings

Skematiese en elektriese verbindings
Skematiese en elektriese verbindings
Skematiese en elektriese verbindings
Skematiese en elektriese verbindings

Maak die elektriese aansluitings volgens die skets wat hierby aangeheg is.

Stap 6: SSH en Open CV -installasie

SSH en Open CV installasie
SSH en Open CV installasie

Nou moet ons in ons framboos -pi inskakel om die nodige sagteware te installeer. Ons begin met SSHing na ons Raspberry Pi. Maak seker dat u Pi aan dieselfde router as u rekenaar gekoppel is en dat u weet dat dit die IP -adres is wat deur u router toegeken is. Maak nou 'n opdragprompt of PUTTY oop as u Windows gebruik en voer die volgende opdrag uit.

ssh [email protected]

Die IP van u Pi kan anders wees; myne is 192.168.1.6.

Voer u standaard wagwoord in - "framboos"

Noudat u SSH in u Pi gehad het, laat ons begin met die opdatering met hierdie opdrag.

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

Laat ons nou die vereiste ontwikkelaarhulpmiddels installeer, sudo apt-get install build-essential cmake pkg-config

Vervolgens moet ons 'n paar beeld -I/O -pakkette installeer wat ons Pi sal help om verskillende beeldformate van die skyf af te haal.

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

Nou 'n paar pakkette om video, live streaming en optimalisering van OpenCV -prestasie te gaan haal

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

sudo apt-get installeer libxvidcore-dev libx264-dev

sudo apt-get install libgtk2.0-dev libgtk-3-dev

sudo apt-get install libatlas-base-dev gfortran

Ons moet ook Python 2.7 en Python 3 koptekst lêers installeer sodat ons OpenCV kan saamstel met python bindings

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

Laai tans OpenCV -bronkode af

cd ~

wget -O opencv.zip

pak opencv.zip uit

Laai die opencv_contrib -bewaarplek af

wget -O opencv_contrib.zip

pak opencv_contrib.zip uit

Dit word ook aanbeveel om 'n virtuele omgewing te gebruik vir die installering van OpenCV.

sudo pip installeer virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

Noudat die virtualenv en virtualenvwrapper geïnstalleer is, moet ons ons ~/.profiel opdateer om die volgende reëls onderaan te bevat

uitvoer WORKON_HOME = $ HOME/.virtualenvs uitvoer VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 bron /usr/local/bin/virtualenvwrapper.sh

Skep u virtuele python -omgewing

mkvirtualenv cv -p python2

skakel oor na die geskepte virtuele omgewing

bron ~/.profiel

werk cv

Installeer NumPy

pip installeer numpy

Stel OpenCV op en installeer dit

cd ~/opencv-3.3.0/

mkdir bou

cd bou

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 ON -DPLES..

Stel uiteindelik OpenCV saam

maak -j4

Nadat hierdie opdrag uitgevoer is. Al wat u hoef te doen is om dit te installeer.

sudo maak config

sudo ldconfig

Stap 7: Gebruik die Python -kode vir Rover

Image
Image

Skep 'n Python -lêer met die naam tracker.py en voeg die volgende kode daarby.

sudo nano tracker.py

kode:-

#ASAR -program

#Hierdie program volg 'n rooi bal en gee 'n framboos pi opdrag om dit te volg. invoer sys sys.path.append ('/usr/local/lib/python2.7/site-packages') import cv2 import numpy as np import os import RPi. GPIO as 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)#Links Motor agteruit IO.uitgang (22, 1) IO.uitgang (13, 0)#Regs motor agteruit IO.uitgang (15, 1) def ryt (): IO.output (21, 0) #Links Motor agteruit IO.uitgang (22, 1) IO.output (13, 1)#Regs motor vorentoe IO.output (15, 0) def lft (): IO.output (21, 1)#Left Motor forward IO.output (22, 0) IO.output (13, 0) #Right Motor backward IO.output (15, 1) def stp (): IO.output (21, 0)#Left Motor stop IO.output (22, 0) IO.output (13, 0)#Regter Motor stop IO.output (15, 0) ############################## #################################################### ####################### def main (): capWebcam = cv2. VideoCapture (0)#verklaar 'n VideoCapture -voorwerp en assosieer met die webkamera, 0 => gebruik die eerste webkamera # wys oorspronklike resolusie druk "standaardresolusie =" + 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) # verander resolusie na 320x240 vir vinniger verwerking van capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # wys opgedateerde resolusie druk "updated resolution =" + str (capWebcam.get (cv2. CAP_PRO_PRO_PRO_PRO_PRO_PRO)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) as capWebcam.isOpened () == Onwaar: # kyk of VideoCapture -voorwerp aan die webkamera suksesvol gedruk is "fout": capWebcam is nie suksesvol benader nie / n / n " # indien nie, druk 'n foutboodskap uit om os.system uit te skakel ("pouse"))! = 27 en capWebcam.isOpened (): # totdat die Esc -toets ingedruk word of die webcamverbinding verbreek word blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # lees volgende raam as nie blnFrameReadSuccessfully of imgOriginal is Geen: # as raam nie suksesvol gelees nie druk "fout: raam nie gelees van webcam nie \" "drukfoutboodskap om OS.system uit te skakel ("pouse") # pouse totdat die gebruiker op 'n sleutel druk, sodat die gebruiker die foutboodskap kan sien breek # uitgang terwyl lus (wat die program verlaat) # einde as 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 (ng. 5, 5), np.uint8)) imgThresh = cv2.erode (imgThresh, np.ones ((5, 5), np.uint8)) intRows, intColumns = imgThresh.shape sirkels = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # vul veranderlike sirkels met alle sirkels in die verwerkte prent as sirkels is nie Geen: # hierdie reël is nodig om te voorkom dat die program op die volgende reël vasval as daar nie sirkels gevind word nie IO.uitvoer (7, 1) vir sirkel in sirkels [0]: # vir elke sirkel x, y, radius = sirkel # breek x, y en radius uit druk "balposisie x =" + str (x) + ", y =" + str (y) + ", radius =" + str (radius) # druk balposisie en radius obRadius = int (radius) xAxis = int (x) if 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) # teken 'n klein groen sirkel in die middel van die bespeurde voorwerp cv2.circle (imgOriginal, (x, y), radius, (0, 0, 255), 3) # teken 'n rooi sirkel om die bespeurde voorwerp # einde vir # einde as anders: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # skep vensters, gebruik WINDOW_AUTOSIZE vir 'n vaste venstergrootte cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # of gebruik WINDOW_NORMAL om die grootte van vensters cv2.imshow ("imgOriginal", imgOri toe te laat ginal)#show windows cv2.imshow ("imgThresh", imgThresh)#end while cv2.destroyAllWindows ()#remove windows from memory return ###################### #################################################### ############################# if _name_ == "_main_": main ()

Al wat u hoef te doen is om die program uit te voer

python tracker.py

Geluk! jou selfbestuurde rover is gereed! Die navigasie -gedeelte op basis van die ultrasoniese sensor sal binnekort voltooi word, en ek sal hierdie instruksies opdateer.

Dankie vir die lees!

Aanbeveel: