Tartalomjegyzék:

Raspberry Pi - Autonóm Mars Rover OpenCV objektumkövetéssel: 7 lépés (képekkel)
Raspberry Pi - Autonóm Mars Rover OpenCV objektumkövetéssel: 7 lépés (képekkel)

Videó: Raspberry Pi - Autonóm Mars Rover OpenCV objektumkövetéssel: 7 lépés (képekkel)

Videó: Raspberry Pi - Autonóm Mars Rover OpenCV objektumkövetéssel: 7 lépés (képekkel)
Videó: Adeept MARS ROVER Raspberry Pi Smart Car Robot Kit PiCar-B is Coming Soon... 2024, November
Anonim
Raspberry Pi - Autonóm Mars Rover OpenCV objektumkövetéssel
Raspberry Pi - Autonóm Mars Rover OpenCV objektumkövetéssel

A Raspberry Pi 3, az Open CV objektumfelismerés, az ultrahangos érzékelők és a hajtóműves egyenáramú motorok hajtják. Ez a rover képes követni minden olyan tárgyat, amelyre kiképezték, és bármilyen terepen mozoghat.

1. lépés: Bevezetés

Image
Image
Szükséges anyagok és szoftverek
Szükséges anyagok és szoftverek

Ebben az utasításban egy Autonóm Mars Rover -t fogunk építeni, amely felismeri az objektumokat és nyomon követi őket a Raspberry Pi 3 -on futó Open CV szoftver segítségével, webkamera vagy eredeti málna pi kamera használatával. Fel van szerelve egy szervóra szerelt ultrahangos érzékelővel is, amely követi útját sötét környezetben, ahol a kamera nem működik. A Pi -től kapott jeleket a motorvezérlő IC (L293D) küldi, amely 4 x 150 RPM egyenáramú motort hajt meg, amelyek PVC csövekből épített testre vannak felszerelve.

2. lépés: Szükséges anyagok és szoftverek

Szükséges anyagok és szoftverek
Szükséges anyagok és szoftverek
Szükséges anyagok és szoftverek
Szükséges anyagok és szoftverek

Szükséges anyagok

  1. Raspberry Pi (bármilyen, de nulla)
  2. Málna PI kamera vagy webkamera
  3. L293D motorvezérlő IC
  4. Robot kerekek (7x4 cm) X 4
  5. Fogaskerék -egyenáramú motorok (150 fordulat / perc) X 4
  6. PVC csövek alvázhoz

Szoftver szükséges

  1. Gitt az SSH használatához a Pi
  2. Nyissa meg az önéletrajzot az objektumfelismeréshez

3. lépés: A Rover alváz építése

A Rover alváz építése
A Rover alváz építése
A Rover alváz építése
A Rover alváz építése
A Rover alváz építése
A Rover alváz építése

Ennek a PVC -háznak az elkészítéséhez szüksége lesz

  • 2 X 8"
  • 2 X 4"
  • 4 T-ízületek

Rendezze el a PVC csöveket egy létraszerű szerkezetbe, és illessze be a T-ízületekbe. Használhatja a PVC tömítőanyagot, hogy az ízületek még erősebbek legyenek.

A fogaskerekű egyenáramú motorokat bilincsekkel, a kerekeket pedig a motorokkal csavarokkal kell a PVC csővázhoz csatlakoztatni.

4. lépés: Az ultrahangos távolságmérő szerelvény építése

Ultrahangos távolságmérő szerelvény építése
Ultrahangos távolságmérő szerelvény építése

Az ultrahangos távolságmérő szerelvényt egy HC-SR04 ultrahangos érzékelőből építették, amely Micro Servo motorral van összekötve. A kábeleket előre össze kell kötni az ultrahangos érzékelővel, mielőtt behelyezik a műanyag tokba, amely csavarokkal csatlakozik a szervomotorhoz.

5. lépés: Vázlatok és elektromos csatlakozások

Vázlatok és elektromos csatlakozók
Vázlatok és elektromos csatlakozók
Vázlatok és elektromos csatlakozók
Vázlatok és elektromos csatlakozók

Kérjük, csatlakoztassa az elektromos csatlakozásokat a mellékelt kapcsolási rajz szerint.

6. lépés: SSH és nyílt CV telepítés

SSH és nyílt CV telepítés
SSH és nyílt CV telepítés

Most be kell kapcsolnunk a raspberry pi -t a szükséges szoftver telepítéséhez. Kezdjük az SSHinggel a Raspberry Pi -vel. Győződjön meg arról, hogy a Pi ugyanahhoz az útválasztóhoz van csatlakoztatva, mint a számítógép, és tudja, hogy az útválasztója hozzárendelte az IP -címet. Most nyisson meg egy parancssort vagy a PUTTY parancsot, ha Windows operációs rendszert használ, és futtassa a következő parancsot.

ssh [email protected]

A Pi IP -je eltérő lehet, az enyém 192.168.1.6.

Most írja be az alapértelmezett jelszót - "málna"

Most, hogy SSH van a Pi -ben, kezdjük a frissítéssel ezzel a paranccsal.

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

Telepítsük most a szükséges fejlesztői eszközöket, sudo apt-get install build-essential cmake pkg-config

Ezután telepítenünk kell néhány képi I/O csomagot, amelyek segítenek a Pi -nek a különböző képformátumok lekérésében a lemezről.

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

Most néhány csomag a videó letöltéséhez, az élő közvetítéshez és az OpenCV teljesítmény optimalizálásához

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

Telepítenünk kell a Python 2.7 és Python 3 fejlécfájlokat is, hogy le tudjuk fordítani az OpenCV -t python kötésekkel

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

OpenCV forráskód letöltése

cd ~

wget -O opencv.zip

bontsa ki az opencv.zip fájlt

Az opencv_contrib adattár letöltése

wget -O opencv_contrib.zip

bontsa ki az opencv_contrib.zip fájlt

Az OpenCV telepítéséhez ajánlott virtuális környezetet is használni.

sudo pip install virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

Most, hogy a virtualenv és a virtualenvwrapper telepítve van, frissítenünk kell a ~/.profilunkat, hogy a következő sorok szerepeljenek alul

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

Hozza létre a python virtuális környezetét

mkvirtualenv cv -p python2

váltás a létrehozott virtuális környezetre

forrás ~/.profile

workon cv

A NumPy telepítése

pip install numpy

Fordítsa le és telepítse az OpenCV -t

cd ~/opencv-3.3.0/

mkdir build

cd build

cmake -D CMAKE_BUILD_TYPE = RELEASE / -D CMAKE_INSTALL_PREFIX =/usr/local / -D INSTALL_PYTHON_EXAMPLES = BE / -D OPENCV_EXTRA_MODULES_PATH = ~/opencv_contrib -3.3.0/modules..

Végül fordítsa le az OpenCV -t

hogy -j4

Miután ez a parancs befejeződött. Mindössze annyit kell tennie, hogy telepíti.

sudo make config

sudo ldconfig

7. lépés: A Python kód futtatása a Rover számára

Image
Image

Hozzon létre egy tracker.py nevű Python -fájlt, és adja hozzá a következő kódot.

sudo nano tracker.py

kód:-

#ASAR program

#Ez a program nyomon követ egy piros golyót, és utasítja egy málna pi -t, hogy kövesse azt. import sys sys.path.append ('/usr/local/lib/python2.7/site-package') import cv2 import numpy mint np import os import RPi. GPIO mint 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)#Jobb Motor Forward IO.output (15, 0) def bac (): IO.output (21, 0)#Bal motor visszafelé IO kimenet (22, 1) IO. kimenet (13, 0)#Jobb motor visszafelé IO kimenet (15, 1) def ryt (): IO. kimenet (21, 0) #Bal motor visszafelé IO. Kimenet (22, 1) IO. Kimenet (13, 1)#Jobb motor előre IO. Kimenet (15, 0) def lft (): IO. Kimenet (21, 1)#Bal motor előre IO.output (22, 0) IO.output (13, 0) #Right Motor backward IO.putput (15, 1) def stp (): IO.output (21, 0) #Left Motor stop IO.output (22, 0) IO.output (13, 0)#Jobb motorleállás IO.output (15, 0) ########################### ################################################### ##################### def main (): capWebcam = cv2. VideoCapture (0)#deklarálja a VideoCapture objektum és társítása a webkamerához, 0 => 1. webkamera használata # eredeti felbontás nyomtatása "alapértelmezett felbontás =" + 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) # módosítsa a felbontást 320x240 -re a gyorsabb feldolgozás érdekében) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) if capWebcam.isOpened () == Hamis: # ellenőrizze, hogy a VideoCapture objektum sikeresen kapcsolódott -e a webkamerához "error: capWebcam nem sikerült elérni / n / n" # ha nem, akkor nyomtassa ki a hibaüzenetet a std out os.system számára ("szünet") # szüneteltesse, amíg a felhasználó le nem nyom egy gombot, így a felhasználó láthatja a visszatérési hibaüzenetet és a kilépési funkciót (amely kilép a programból) # vége, ha közben cv2.waitKey (1)! = 27 and cap ully, imgOriginal = capWebcam.read () # olvassa el a következő keretet, ha nem blnFrameReadSuccessfully or imgOriginal is None: # ha a keretet nem sikerült elolvasni nyomtatás "error: frame not read from webcam / n" # print error message to std out os.system ("szünet") # szüneteltetés, amíg a felhasználó le nem nyom egy gombot, hogy a felhasználó láthassa a hibaüzenet break # kilépését, miközben a ciklus (amely kilép a programból) # vége, ha 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. tömb ([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 körök = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # töltse ki a változó köröket a körökkel a feldolgozott képen, ha körök nem Nincs: # ez a sor szükséges ahhoz, hogy a program ne essen össze a következő sorban, ha nem találunk kört. kitörés x, y és sugár nyomtatás "golyó pozíció x =" + str (x) + ", y =" + str (y) + ", sugár =" + str (sugár) # nyomtatási golyó helyzete és sugara obRadius = int (sugár) xAxis = int (x) ha obRadius> 0 & obRadius100 & xAxis180: print ("Jobbra halad") ryt () elif xAxis <100: print ("Mozgó bal") lft () else: stp () else: stp () cv2.circle (imgOriginal, (x, y), 3, (0, 255, 0), -1) # kis zöld kört rajzol az észlelt objektum közepére cv2.circle (imgOriginal, (x, y), sugar, (0, 0, 255), 3) # rajzoljon piros kört az észlelt objektum köré # vége # végére, ha más: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # ablakok létrehozása, használja a WINDOW_AUTOSIZE parancsot a rögzített ablakmérethez cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # vagy a WINDOW_NORMAL használatával engedélyezze az ablak átméretezését cv2.imshow ("imgOriginal", imgOri ginal)#show windows cv2.imshow ("imgThresh", imgThresh)#end míg cv2.destroyAllWindows ()#ablakok eltávolítása a memóriából return ##################### ################################################### ############################# if _name_ == "_main_": main ()

Most már csak a program futtatása van hátra

python tracker.py

Gratula! az önvezető rover készen áll! Az ultrahangos érzékelőn alapuló navigációs rész hamarosan elkészül, és frissítem ezt az utasítást.

Köszönöm, hogy elolvasta!

Ajánlott: