Sisällysluettelo:

Raspberry Pi - Autonomous Mars Rover with OpenCV Object Tracking: 7 askelta (kuvilla)
Raspberry Pi - Autonomous Mars Rover with OpenCV Object Tracking: 7 askelta (kuvilla)

Video: Raspberry Pi - Autonomous Mars Rover with OpenCV Object Tracking: 7 askelta (kuvilla)

Video: Raspberry Pi - Autonomous Mars Rover with OpenCV Object Tracking: 7 askelta (kuvilla)
Video: Raspberry Pi 2 B: Obstacle Avoidance Robot OpenCV 2024, Marraskuu
Anonim
Raspberry Pi - Autonomous Mars Rover with OpenCV Object Tracking
Raspberry Pi - Autonomous Mars Rover with OpenCV Object Tracking

Powered by Raspberry Pi 3, Open CV -objektin tunnistus, ultraääni -anturit ja vaihdemoottorit. Tämä rover voi seurata mitä tahansa koulutettua kohdetta ja liikkua missä tahansa maastossa.

Vaihe 1: Johdanto

Image
Image
Tarvittavat materiaalit ja ohjelmistot
Tarvittavat materiaalit ja ohjelmistot

Tässä ohjekirjassa aiomme rakentaa autonomisen Mars Roverin, joka voi tunnistaa esineitä ja seurata niitä käyttämällä Raspberry Pi 3: n käynnissä olevaa Open CV -ohjelmistoa sekä mahdollisuuden käyttää verkkokameralaitetta tai alkuperäistä vadelmapi -kameraa. Se on myös varustettu ultraääni -anturilla, joka on asennettu servoon seuratakseen tiensä pimeässä ympäristössä, jossa kamera ei toimi. Pi: ltä saadut signaalit lähetetään moottorin ohjaimelle IC (L293D), joka käyttää 4 x 150 rpm DC -moottoria, jotka on asennettu PVC -putkilla rakennettuun runkoon.

Vaihe 2: Tarvittavat materiaalit ja ohjelmistot

Tarvittavat materiaalit ja ohjelmistot
Tarvittavat materiaalit ja ohjelmistot
Tarvittavat materiaalit ja ohjelmistot
Tarvittavat materiaalit ja ohjelmistot

Tarvittavat materiaalit

  1. Raspberry Pi (mikä tahansa paitsi nolla)
  2. Vadelma PI -kamera tai verkkokamera
  3. L293D -moottorin ohjaimen IC
  4. Robottipyörät (7x4cm) X 4
  5. Vaihdemoottorit (150 kierrosta / min) X 4
  6. PVC -putket runkoon

Ohjelmisto vaaditaan

  1. Kitti SS: n liittämiseen Pi: hen
  2. Avaa CV kohteen tunnistamista varten

Vaihe 3: Rover -alustan rakentaminen

Rover -alustan rakentaminen
Rover -alustan rakentaminen
Rover -alustan rakentaminen
Rover -alustan rakentaminen
Rover -alustan rakentaminen
Rover -alustan rakentaminen

Tämän PVC -kotelon rakentamiseen tarvitset

  • 2 X 8"
  • 2 X 4"
  • 4 T-nivelet

Järjestä PVC-putket tikkaiden kaltaiseen rakenteeseen ja aseta T-liitoksiin. Voit käyttää PVC -tiivistysainetta saumojen vahvistamiseen.

Vaihteelliset tasavirtamoottorit kytketään PVC -putkikoteloon puristimilla ja pyörät moottoriin ruuveilla.

Vaihe 4: Rakenna ultraääni -etäisyysmittari

Ultraääni -etäisyysmittarin rakentaminen
Ultraääni -etäisyysmittarin rakentaminen

Ultraääni-etäisyysmittari on rakennettu käyttämällä HC-SR04-ultraääni-anturia, joka on liitetty Micro Servo -moottoriin. Kaapelit on yhdistetty ultraäänianturiin ennen muovikoteloon asettamista, joka on liitetty servomoottoriin ruuveilla.

Vaihe 5: Kaaviot ja sähköliitännät

Kaaviot ja sähköliitännät
Kaaviot ja sähköliitännät
Kaaviot ja sähköliitännät
Kaaviot ja sähköliitännät

Tee sähköliitännät oheisen kytkentäkaavion mukaisesti.

Vaihe 6: SSH- ja avoimen CV -asennus

SSH ja avoin CV -asennus
SSH ja avoin CV -asennus

Nyt meidän on SSH osaksi vadelmapiämme, jotta tarvittava ohjelmisto voidaan asentaa. Aloitamme SSHingillä Raspberry Pi: lle. Varmista, että Pi on kytketty samaan reitittimeen kuin tietokoneesi ja tiedät, että se on reitittimen sille määrittämä IP -osoite. Avaa nyt komentokehote tai PUTTY, jos käytät Windowsia, ja suorita seuraava komento.

ssh [email protected]

Pi: n IP -osoite voi olla erilainen, minun on 192.168.1.6.

Kirjoita nyt oletussalasanasi - "vadelma"

Nyt kun sinulla on SSH'd Pi -laitteeseesi, aloitetaan päivittämällä tällä komennolla.

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

Asennetaan tarvittavat kehittäjätyökalut nyt, sudo apt-get install build-essential cmake pkg-config

Seuraavaksi meidän on asennettava joitain kuvan I/O -paketteja, jotka auttavat Pi: tämme hakemaan erilaisia kuvamuotoja levyltä.

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

Nyt joitakin paketteja videon hakemiseen, suoratoistoon ja OpenCV -suorituskyvyn optimointiin

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

Meidän on myös asennettava Python 2.7- ja Python 3 -otsikkotiedostot, jotta voimme kääntää OpenCV: n python -sidoksilla

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

Ladataan OpenCV -lähdekoodia

cd ~

wget -O opencv.zip

purkaa opencv.zip

Ladataan opencv_contrib -arkistoa

wget -O opencv_contrib.zip

purkaa opencv_contrib.zip

On myös suositeltavaa käyttää virtuaalista ympäristöä OpenCV: n asentamiseen.

sudo pip asenna virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

Nyt kun virtualenv ja virtualenvwrapper on asennettu, meidän on päivitettävä ~/.profiilimme sisältämään seuraavat rivit alareunaan

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

Luo python -virtuaalinen ympäristö

mkvirtualenv cv -p python2

siirtyä luotuun virtuaaliseen ympäristöön

lähde ~/.profiili

workon cv

NumPyn asentaminen

pip asenna numpy

Käännä ja asenna OpenCV

cd ~/opencv-3.3.0/

mkdir rakentaa

cd rakentaa

cmake -D CMAKE_BUILD_TYPE = RELEASE / -D CMAKE_INSTALL_PREFIX =/usr/local / -D INSTALL_PYTHON_EXAMPLES = PÄÄLLÄ -D OPENCV_EXTRA_MODULES_PATH = ~/opencv_contrib -3.3.0/moduulit.. -D

Käännä lopuksi OpenCV

tee -j4

Tämän komennon suorittamisen jälkeen. Sinun tarvitsee vain asentaa se.

sudo make config

sudo ldconfig

Vaihe 7: Python -koodin suorittaminen Roverille

Image
Image

Luo Python -tiedosto nimeltä tracker.py ja lisää siihen seuraava koodi.

sudo nano tracker.py

koodi:-

#ASAR -ohjelma

#Tämä ohjelma seuraa punaista palloa ja neuvoo vadelmapiia seuraamaan sitä. tuonti sys sys.path.append ('/usr/local/lib/python2.7/site-package') tuonti cv2 tuonti numero np tuonti os tuonti RPi. GPIO 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)#Vasen moottori eteenpäin IO. Output (22, 0) IO. Output (13, 1)#Right Motor Forward IO. Output (15, 0) def bac (): IO. output (21, 0)#Vasen moottori taaksepäin IO -lähtö (22, 1) IO. -lähtö (13, 0)#Oikea moottori taaksepäin IO -lähtö (15, 1) def ryt (): IO -lähtö (21, 0) #Vasen moottori taaksepäin IO. Lähtö (22, 1) IO. Lähtö (13, 1)#Oikea moottori eteenpäin IO. Lähtö (15, 0) def lft (): IO. Lähtö (21, 1)#Vasen moottori eteenpäin IO. lähtö (22, 0) IO. lähtö (13, 0)#Oikea moottori taaksepäin IO. lähtö (15, 1) def stp (): IO. lähtö (21, 0)#Vasen moottorin pysäytys IO. lähtö (22, 0) IO. output (13, 0)#Oikea moottorin pysäytys IO. Output (15, 0) ############################ ################################################## #################### def main (): capWebcam = cv2. VideoCapture (0)#deklaroi VideoCapture -objekti ja yhdistäminen verkkokameraan, 0 => käytä ensimmäistä verkkokameraa # näytä alkuperäinen resoluutio tulosta "oletustarkkuus =" + 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) # muuta tarkkuudeksi 320x240 nopeampaa käsittelyä varten capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # näytä päivitetty resoluutio print "updated resolution =" + str (capWebcam.get (cv2. CAP_PRW_FR)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)), jos capWebcam.isOpened () == Väärä: # tarkista, onko VideoCapture -objekti liitetty verkkokameraan tulostus onnistui "-virhe: capWebcam -yhteyttä ei saatu onnistuneesti / n / n" # jos ei, tulosta virheilmoitus std out os.system -järjestelmään ("tauko") # tauko, kunnes käyttäjä painaa näppäintä, jotta käyttäjä voi nähdä virheilmoituksen return # ja exit -toiminnon (joka sulkee ohjelman) # päättyy, jos cv2.waitKey (1)! = 27 ja capWebcam.isOpened (): # kunnes Esc -näppäintä painetaan tai verkkoyhteys katkeaa blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # lue seuraava kehys, jos ei blnFrameReadSuccessfully or imgOriginal is None: # jos kehystä ei luettu onnistuneesti print "error: frame not read from webcam / n" # print error message to std out os.system ("tauko") # tauko, kunnes käyttäjä painaa näppäintä, jotta käyttäjä voi nähdä virheilmoituksen break # exit, kun silmukka (joka sulkee ohjelman) # end jos 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 ympyrät = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # täytä muuttuvat ympyrät kaikilla ympyröillä käsitellyssä kuvassa, jos ympyrät ei ole Ei mitään: # tämä rivi on välttämätön, jotta ohjelma ei kaatuisi seuraavalla rivillä, jos ympyröitä ei löydy. IO. lähtö (7, 1) ympyröille ympyröissä [0]: # jokaiselle ympyrälle x, y, säde = ympyrä # murtaa x, y ja säde tulosta "pallon sijainti x =" + str (x) + ", y =" + str (y) + ", säde =" + str (säde) # tulostuspallon sijainti ja säde obRadius = int (säde) xAxis = int (x) jos obRadius> 0 & obRadius100 & xAxis180: print ("Liikkuu oikealle") ryt () elif xAxis <100: print ("Moving Left") lft () else: stp () else: stp () cv2.circle (imgOriginal, (x, y), 3, (0, 255, 0), -1) # piirrä pieni vihreä ympyrä havaitun kohteen cv2.circle keskelle (imgOriginal, (x, y), säde, (0, 0, 255), 3) # piirrä punainen ympyrä havaitun objektin ympärille # loppu # päälle, jos muuten: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # luo ikkunat, käytä WINDOW_AUTOSIZE kiinteää ikkunakokoa cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # tai käytä WINDOW_NORMAL sallii ikkunan koon muuttamisen cv2.imshow ("imgOriginal", imgOri ginal)#näytä ikkunat cv2.imshow ("imgThresh", imgThresh)#loppu kun cv2.destroyAllWindows ()#poista ikkunat muistista palautus ##################### ################################################## ############################# jos _name_ == "_main_": main ()

Nyt on vain tehtävä ohjelma

python tracker.py

Onnittelut! itse ajava roverisi on valmis! Ultraäänianturiin perustuva navigointiosa valmistuu pian, ja päivitän tämän ohjeen.

Kiitos lukemisesta!

Suositeltava: