Obsah:

Raspberry Pi - autonomní Mars Rover se sledováním objektů OpenCV: 7 kroků (s obrázky)
Raspberry Pi - autonomní Mars Rover se sledováním objektů OpenCV: 7 kroků (s obrázky)

Video: Raspberry Pi - autonomní Mars Rover se sledováním objektů OpenCV: 7 kroků (s obrázky)

Video: Raspberry Pi - autonomní Mars Rover se sledováním objektů OpenCV: 7 kroků (s obrázky)
Video: Mini Mars Rover visits the Raspberry Pi pop-up store 2024, Listopad
Anonim
Raspberry Pi - autonomní Mars Rover se sledováním objektů OpenCV
Raspberry Pi - autonomní Mars Rover se sledováním objektů OpenCV

Poháněno Raspberry Pi 3, rozpoznáváním otevřeného CV objektu, ultrazvukovými senzory a stejnosměrnými motory s převodovkou. Tento rover může sledovat jakýkoli objekt, pro který je vycvičen, a pohybovat se v jakémkoli terénu.

Krok 1: Úvod

Image
Image
Potřebný materiál a software
Potřebný materiál a software

V tomto Instructables postavíme Autonomous Mars Rover, který dokáže rozpoznávat objekty a sledovat je pomocí softwaru Open CV běžícího na Raspberry Pi 3 s možností použít zařízení s webovou kamerou nebo původní malinovou pi kamerou. Je také vybaven ultrazvukovým senzorem namontovaným na servu, který sleduje jeho cestu v tmavých prostředích, kde by kamera nefungovala. Signály přijaté od Pi jsou odesílány do IC ovladače motoru (L293D), který pohání 4 x 150 RPM stejnosměrné motory namontované na těle postaveném z PVC trubek.

Krok 2: Potřebné materiály a software

Potřebný materiál a software
Potřebný materiál a software
Potřebný materiál a software
Potřebný materiál a software

Požadovaný materiál

  1. Raspberry Pi (jakákoli, ale nulová)
  2. Raspberry PI Camera nebo webová kamera
  3. IC ovladače motoru L293D
  4. Kola robota (7 x 4 cm) X 4
  5. Převodové stejnosměrné motory (150 ot / min) X 4
  6. PVC trubky pro podvozky

Je vyžadován software

  1. Tmel pro SSH ing. Pi
  2. Otevřete CV pro rozpoznávání objektů

Krok 3: Sestavení podvozku Rover

Stavba podvozku Rover
Stavba podvozku Rover
Stavba podvozku Rover
Stavba podvozku Rover
Stavba podvozku Rover
Stavba podvozku Rover

K vybudování tohoto podvozku z PVC budete potřebovat

  • 2 x 8"
  • 2 x 4"
  • 4 T-spoje

Uspořádejte PVC trubky do žebříkové struktury a vložte je do T-spojů. Můžete použít PVC tmel, aby byly spoje ještě silnější.

Převodové stejnosměrné motory jsou spojeny se šasi z trubek z PVC pomocí svorek a poté jsou kola spojena s motory pomocí šroubů.

Krok 4: Sestavení sestavy ultrazvukového dálkoměru

Budování sestavy ultrazvukového dálkoměru
Budování sestavy ultrazvukového dálkoměru

Sestava ultrazvukového dálkoměru je vyrobena pomocí ultrazvukového senzoru HC-SR04 spojeného s mikro servomotorem. Kabely jsou předem spojeny s ultrazvukovým senzorem před vložením do plastového pouzdra, které je připojeno k servomotoru pomocí šroubů.

Krok 5: Schémata a elektrická připojení

Schémata a elektrická připojení
Schémata a elektrická připojení
Schémata a elektrická připojení
Schémata a elektrická připojení

Proveďte elektrická připojení podle připojeného schématu zapojení.

Krok 6: Instalace SSH a otevřeného CV

Instalace SSH a otevřeného CV
Instalace SSH a otevřeného CV

Nyní potřebujeme SSH do našeho Raspberry Pi, abychom nainstalovali požadovaný software. Začneme SSHingem k našemu Raspberry Pi. Ujistěte se, že je váš Pi připojen ke stejnému routeru jako váš počítač a víte, že je mu IP adresa přiřazena vaším routerem. Nyní otevřete příkazový řádek nebo PUTTY, pokud používáte Windows, a spusťte následující příkaz.

ssh [email protected]

IP vašeho Pi se může lišit, moje je 192.168.1.6.

Nyní zadejte své výchozí heslo - „malina“

Nyní, když máte SSH'd do vašeho Pi, začněme aktualizací pomocí tohoto příkazu.

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

Pojďme nyní nainstalovat požadované nástroje pro vývojáře, sudo apt-get install build-essential cmake pkg-config

Dále musíme nainstalovat nějaké I/O balíčky obrázků, které našemu Pi pomohou načíst z disku různé formáty obrázků.

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

Nyní některé balíčky pro načítání videa, živé streamování a optimalizaci výkonu 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

Musíme také nainstalovat hlavičkové soubory Pythonu 2.7 a Pythonu 3, abychom mohli kompilovat OpenCV s vazbami pythonu

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

Stahování zdrojového kódu OpenCV

cd ~

wget -O opencv.zip

rozbalit opencv.zip

Stahování úložiště opencv_contrib

wget -O opencv_contrib.zip

rozbalte soubor opencv_contrib.zip

Pro instalaci OpenCV se také doporučuje použít virtuální prostředí.

sudo pip install virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

Nyní, když byl nainstalován virtualenv a virtualenvwrapper, musíme aktualizovat náš ~/.profile tak, aby ve spodní části obsahoval následující řádky

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

Vytvořte si své virtuální prostředí pythonu

mkvirtualenv cv -p python2

přepněte do vytvořeného virtuálního prostředí

zdroj ~/.profile

workon cv

Instalace NumPy

pip install numpy

Kompilace a instalace OpenCV

cd ~/opencv-3.3.0/

mkdir build

cd stavět

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/moduly / -D

Nakonec zkompilujte OpenCV

udělat -j4

Poté, co se tento příkaz dokončí. Vše, co musíte udělat, je nainstalovat.

sudo make config

sudo ldconfig

Krok 7: Spuštění kódu Pythonu pro Rover

Image
Image

Vytvořte soubor Pythonu s názvem tracker.py a přidejte do něj následující kód.

sudo nano tracker.py

kód:-

Program #ASAR

#Tento program sleduje červenou kouli a přikazuje malinové pi, aby ji následovala. import 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) #Left Motor zpět IO.output (22, 1) IO.output (13, 0) #Right Motor dozadu IO.output (15, 1) def ryt (): IO.output (21, 0) #Levý motor zpět IO.výstup (22, 1) IO.výstup (13, 1) #Pravý motor vpřed IO.výstup (15, 0) def lft (): IO.výstup (21, 1)#Levý motor vpřed IO.output (22, 0) IO.output (13, 0) #Right Motor zpět IO.output (15, 1) def stp (): IO.output (21, 0) #Left Motor stop IO.output (22, 0) IO.output (13, 0) #Right Motor stop IO.output (15, 0) ############################### ############################################################################# ######################## def main (): capWebcam = cv2. VideoCapture (0)#declare a Objekt VideoCapture a přidružení k webové kameře, 0 => použijte 1. webovou kameru # zobrazit původní rozlišení tisk "výchozí rozlišení =" + 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) # změna rozlišení na 320x240 pro rychlejší zpracování capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # zobrazit aktualizované rozlišení tisk "aktualizované rozlišení =" + str (capWebcam.get (cv2. CAP_WPRO_)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) if capWebcam.isOpened () == False: # check if VideoCapture object was associated to webcam successful print "error: capWebcam not accessed successful / n / n" # pokud ne, vytiskněte chybovou zprávu pro std out os.system („pauza“) # pauza, dokud uživatel nestiskne klávesu, aby uživatel viděl chybovou zprávu return # a ukončovací funkce (která ukončí program) # end if while cv2.waitKey (1)! = 27 a capWebcam.isOpened (): #, dokud není stisknuto tlačítko Esc nebo není ztraceno připojení k webové kameře blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # číst další snímek, pokud ne blnFrameReadSuccessfully nebo imgOriginal is None: # if frame was not read successful print "error: frame not read from webcam / n" # print error message to std out os.system ("pauza") # pauza, dokud uživatel nestiskne klávesu, aby uživatel viděl chybové hlášení přerušení # ukončení při smyčce (která ukončí program) # konec 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. pole ([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) # vyplní proměnné kruhy všemi kruhy na zpracovaném obrázku, pokud kruhy is not None: # tento řádek je nezbytný, aby program nezlomil na dalším řádku, pokud nebyly nalezeny žádné kruhy IO.výstup (7, 1) pro kruh v kruzích [0]: # pro každý kruh x, y, radius = kruh # vylomte x, y a poloměr tisk "pozice koule x =" + str (x) + ", y =" + str (y) + ", poloměr =" + str (poloměr) # poloha a poloměr tiskové koule 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) # nakreslete malý zelený kruh ve středu detekovaného objektu cv2.circle (imgOriginal, (x, y), poloměr, (0, 0, 255), 3) # nakreslete červený kruh kolem detekovaného objektu # konec pro # konec if else: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # vytvořit okna, použijte WINDOW_AUTOSIZE pro pevnou velikost okna cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # nebo pomocí WINDOW_NORMAL povolte změnu velikosti okna cv2.imshow ("imgOriginal", imgOri ginal)#show windows cv2.imshow ("imgThresh", imgThresh)#end while cv2.destroyAllWindows ()#remove windows from memory return ######################### ############################################################################ ################################ if _name_ == "_main_": main ()

Nyní zbývá jen spustit program

python tracker.py

Gratuluji! váš samořiditelný rover je připraven! Navigační část založená na ultrazvukovém senzoru bude brzy dokončena a tento návod aktualizuji.

Děkuji za přečtení!

Doporučuje: