Taula de continguts:

Raspberry Pi: autònom Mars Rover amb seguiment d'objectes OpenCV: 7 passos (amb imatges)
Raspberry Pi: autònom Mars Rover amb seguiment d'objectes OpenCV: 7 passos (amb imatges)

Vídeo: Raspberry Pi: autònom Mars Rover amb seguiment d'objectes OpenCV: 7 passos (amb imatges)

Vídeo: Raspberry Pi: autònom Mars Rover amb seguiment d'objectes OpenCV: 7 passos (amb imatges)
Vídeo: I Built a Mini Mars Rover 2024, Desembre
Anonim
Raspberry Pi: autònom Mars Rover amb seguiment d'objectes OpenCV
Raspberry Pi: autònom Mars Rover amb seguiment d'objectes OpenCV

Alimentat per un Raspberry Pi 3, reconeixement d'objectes CV obert, sensors d'ultrasons i motors de corrent continu. Aquest rover pot rastrejar qualsevol objecte per al qual està entrenat i moure’s en qualsevol terreny.

Pas 1: Introducció

Image
Image
Es requereixen materials i programari
Es requereixen materials i programari

En aquest manual d’instruccions, crearem un Mars Rover autònom que pugui reconèixer objectes i fer-ne un seguiment mitjançant el programari Open CV que s’executa en un Raspberry Pi 3 amb l’opció d’utilitzar un dispositiu de càmera web o la càmera original de raspberry pi. També està equipat amb un sensor d’ultrasons muntat en un servo per rastrejar-lo en entorns foscos on la càmera no funcionaria. Les senyals rebudes de Pi s’envien al controlador IC del motor (L293D) que acciona motors de corrent continu de 4 x 150 RPM muntats en un cos construït amb tubs de PVC.

Pas 2: materials i programari necessaris

Es requereixen materials i programari
Es requereixen materials i programari
Es requereixen materials i programari
Es requereixen materials i programari

Materials necessaris

  1. Raspberry Pi (qualsevol excepte zero)
  2. Càmera Raspberry PI o càmera web
  3. IC controlador de motor L293D
  4. Rodes de robots (7x4cm) X 4
  5. Motors de corrent continu engranats (150 rpm) X 4
  6. Tubs de PVC per a xassís

Es requereix programari

  1. Massilla per SSH ing el Pi
  2. Obre el CV per al reconeixement d'objectes

Pas 3: construir el xassís del Rover

Construint el xassís Rover
Construint el xassís Rover
Construint el xassís Rover
Construint el xassís Rover
Construint el xassís Rover
Construint el xassís Rover

Per construir aquest xassís de PVC, necessitareu

  • 2 X 8"
  • 2 X 4"
  • 4 juntes en T

Col·loqueu els tubs de PVC en una estructura semblant a una escala i introduïu-los a les juntes en T. Podeu utilitzar el segellador de PVC per fer les juntes encara més fortes.

Els motors de corrent continu engranats es connecten amb el xassís de la canonada de PVC mitjançant pinces i després les rodes es connecten amb els motors mitjançant cargols.

Pas 4: Construir un conjunt de telemetre ultrasònic

Muntatge de telemetre ultrasònic de construcció
Muntatge de telemetre ultrasònic de construcció

El conjunt del telemetre ultrasònic es construeix mitjançant un sensor ultrasònic HC-SR04 connectat amb un motor micro servo. Els cables es connecten prèviament amb el sensor d'ultrasons abans de posar-los a la caixa de plàstic que es connecta al servomotor mitjançant cargols.

Pas 5: Esquemes i connexions elèctriques

Esquemes i connexions elèctriques
Esquemes i connexions elèctriques
Esquemes i connexions elèctriques
Esquemes i connexions elèctriques

Feu les connexions elèctriques segons el diagrama del circuit adjunt.

Pas 6: instal·lació SSH i Open CV

Instal·lació SSH i Open CV
Instal·lació SSH i Open CV

Ara, hem d’incorporar SSH al nostre raspberry pi per instal·lar el programari requerit. Començarem per SSHing al nostre Raspberry Pi. Assegureu-vos que el Pi estigui connectat al mateix encaminador que el vostre PC i que sàpiga que és l’adreça IP que l’assignava. Ara, obriu un indicador d’ordres o PUTTY si esteu a Windows i executeu l’ordre següent.

ssh [email protected]

La vostra IP de Pi pot ser diferent, la meva és 192.168.1.6.

Ara, introduïu la vostra contrasenya predeterminada: "raspberry"

Ara, que teniu SSH al vostre Pi, comencem per actualitzar amb aquesta ordre.

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

Instal·larem ara les eines necessàries per a desenvolupadors, sudo apt-get install build-essential cmake pkg-config

A continuació, hem d’instal·lar alguns paquets d’E / S d’imatges que ajudin el nostre Pi a obtenir diversos formats d’imatges del disc.

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

Ara, alguns paquets per obtenir vídeo, transmissions en directe i optimitzar el rendiment d'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

També hem d’instal·lar fitxers de capçalera Python 2.7 i Python 3 per poder compilar OpenCV amb enllaços python

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

S'està baixant el codi font d'OpenCV

cd ~

wget -O opencv.zip

descomprimir opencv.zip

S'està baixant el repositori opencv_contrib

wget -O opencv_contrib.zip

descomprimir opencv_contrib.zip

També es recomana utilitzar un entorn virtual per instal·lar OpenCV.

sudo pip instal·lar virtualenv virtualenvwrapper

sudo rm -rf ~ /.cache / pip

Ara, que s'ha instal·lat virtualenv i virtualenvwrapper, hem d'actualitzar el nostre perfil ~ /. Per incloure les línies següents a la part inferior

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

Creeu el vostre entorn virtual Python

mkvirtualenv cv -p python2

canvieu a l'entorn virtual creat

font ~ /.perfil

workon cv

Instal·lació de NumPy

pip instal·lar numpy

Compileu i instal·leu OpenCV

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 = ON / -D OPENCV_EXTRA_MODULES_PATH = ~ / opencv_contrib-3.3.0 / modules / -D

Finalment compileu OpenCV

fer -j4

Després que aquesta ordre acabi d'executar-se. Tot el que heu de fer és instal·lar-lo.

sudo make config

sudo ldconfig

Pas 7: Execució del codi Python per a Rover

Image
Image

Creeu un fitxer Python anomenat tracker.py i afegiu-hi el codi següent.

sudo nano tracker.py

codi: -

Programa #ASAR

#Aquest programa fa un seguiment d’una bola vermella i indica a un gerd pi que la segueixi. 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 backward IO.output (22, 1) IO.output (13, 0) #Right Motor backward IO.output (15, 1) def ryt (): IO.output (21, 0) #Left Motor IO.ward outward output (22, 1) IO.output (13, 1) #Right Motor forward 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) #Right Motor stop IO.output (15, 0) ############################### ####################################################### ###################### def main (): capWebcam = cv2. VideoCapture (0) # declare a Objecte VideoCapture i associat a càmera web, 0 => utilitza la primera càmera web # mostra la resolució original imprimeix "resolució predeterminada =" + 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) # canvi de resolució a 320x240 per a un processament més ràpid capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # mostra resolució actualitzada print "updated resolution =" + str (capWebcam.get (cv2. CAP_PIDP_FR)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) si capWebcam.isOpened () == False: # comproveu si l'objecte VideoCapture s'ha associat a la càmera web imprimeix correctament "error: capWebcam no s'ha accedit correctament / n / n" # si no, imprimeix el missatge d'error per sortir del sistema os.system ("pausa") # pausa fins que l'usuari prem una tecla perquè l'usuari pugui veure el missatge d'error tornar # i sortir de la funció (que surt del programa) # acabar si mentre que cv2.waitKey (1)! = 27 i capWebcam.isOpened (): # fins que es prem la tecla Esc o es perd la connexió de la càmera web blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # llegeix el fotograma següent si no és blnFrameReadSuccessfully o imgOriginal no és None: # si el fotograma no s'ha llegit amb èxit imprimeix "error: no s'ha llegit el fotograma des de la càmera web / n" # imprimeix el missatge d'error a la versió os.system ("pausa") # pausa fins que l'usuari prem una tecla perquè l'usuari pugui veure el missatge d'error interromput # exit while loop (que surt del programa) # final si 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 circles = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # ompliu cercles variables amb tots els cercles de la imatge processada si hi ha cercles no és Cap: # aquesta línia és necessària per evitar que el programa caigui en la següent línia si no s'han trobat cercles IO.output (7, 1) per al cercle en cercles [0]: # per a cada cercle x, y, radi = cercle # trencar x, y i radi imprimir "posició de la bola x =" + str (x) + ", y =" + str (y) + ", radi =" + str (radi) # imprimir posició i radi de la bola obRadius = int (radi) 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) # dibuixar un petit cercle verd al centre de l'objecte detectat cv2.circle (imgOriginal, (x, y), radi, (0, 0, 255), 3) # dibuixa un cercle vermell al voltant de l'objecte detectat # final per a # final si més: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # crear finestres, utilitzeu WINDOW_AUTOSIZE per a una mida de finestra fixa cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # o utilitzeu WINDOW_NORMAL per permetre redimensionar la finestra cv2.imshow ("imgOriginal", imgOri ginal) # show windows cv2.imshow ("imgThresh", imgThresh) # end while cv2.destroyAllWindows () # remove windows from memory return ####################### ####################################################### ############################# si _name_ == "_main_": main ()

Ara, només queda executar el programa

python tracker.py

Felicitats! el vostre rover autònom ja està a punt. La part de navegació basada en el sensor d’ultrasons es completarà aviat i actualitzaré aquesta instrucció.

Gràcies per llegir!

Recomanat: