Taula de continguts:
- Pas 1: Introducció
- Pas 2: materials i programari necessaris
- Pas 3: construir el xassís del Rover
- Pas 4: Construir un conjunt de telemetre ultrasònic
- Pas 5: Esquemes i connexions elèctriques
- Pas 6: instal·lació SSH i Open CV
- Pas 7: Execució del codi Python per a Rover
Vídeo: Raspberry Pi: autònom Mars Rover amb seguiment d'objectes OpenCV: 7 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:12
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ó
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
Materials necessaris
- Raspberry Pi (qualsevol excepte zero)
- Càmera Raspberry PI o càmera web
- IC controlador de motor L293D
- Rodes de robots (7x4cm) X 4
- Motors de corrent continu engranats (150 rpm) X 4
- Tubs de PVC per a xassís
Es requereix programari
- Massilla per SSH ing el Pi
- Obre el CV per al reconeixement d'objectes
Pas 3: construir el xassís del 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
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
Feu les connexions elèctriques segons el diagrama del circuit adjunt.
Pas 6: 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.
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
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:
Programació orientada a objectes: Creació d’objectes Mètode / tècnica d’aprenentatge / ensenyament mitjançant l’aplicació de formes: 5 passos
Programació orientada a objectes: Creació d’objectes Mètode / tècnica d’aprenentatge / ensenyament mitjançant Shape Puncher: mètode d’aprenentatge / ensenyament per a estudiants que s’inicien en la programació orientada a objectes. Aquesta és una manera de permetre'ls visualitzar i veure el procés de creació d'objectes a partir de classes. Puny gran EkTools de 2 polzades; les formes sòlides són les millors. Tros de paper o c
Seguiment d'objectes Opencv: 3 passos
Seguiment d'objectes Opencv: la detecció d'objectes en moviment és una tècnica que s'utilitza en la visió per computador i el processament d'imatges. Diversos fotogrames consecutius d’un vídeo es comparen mitjançant diversos mètodes per determinar si es detecta algun objecte en moviment. La detecció d’objectes mòbils s’ha utilitzat per wi
Control lliscant de càmera de seguiment d'objectes amb eix de rotació. Imprès en 3D i construït al controlador de motor CC RoboClaw i Arduino: 5 passos (amb imatges)
Control lliscant de càmera de seguiment d'objectes amb eix de rotació. Imprès i construït en 3D amb el controlador de motor CC RoboClaw i Arduino: aquest projecte ha estat un dels meus projectes preferits des que vaig combinar el meu interès per fer vídeo amb el bricolatge. Sempre he mirat i volgut emular aquelles preses cinematogràfiques de pel·lícules en què una càmera es mou per una pantalla mentre es desplaça per fer un seguiment
Programació orientada a objectes: creació d'objectes Mètode / tècnica d'aprenentatge / ensenyament amb tisores: 5 passos
Programació orientada a objectes: Creació d'objectes Mètode / Tècnica d'aprenentatge / ensenyament amb tisores: Mètode d'aprenentatge / ensenyament per a estudiants que s'inicien en la programació orientada a objectes. Aquesta és una manera de permetre'ls visualitzar i veure el procés de creació d'objectes a partir de classes. Parts: 1. Tisores (ho farà qualsevol tipus). 2. Peça de paper o cartolina. 3. Marcador
Robot de seguiment d'objectes EBot8: 5 passos (amb imatges)
EBot8 Object Following Robot: Alguna vegada us heu preguntat per fabricar un robot que segueixi allà on vagi? Però, simplement, no es pot? Us presentem l'objecte següent robot! Aneu a aquest tutorial, m'agrada i voteu i potser també ho podreu fer