Table des matières:

Raspberry Pi - Mars Rover autonome avec suivi d'objets OpenCV : 7 étapes (avec photos)
Raspberry Pi - Mars Rover autonome avec suivi d'objets OpenCV : 7 étapes (avec photos)

Vidéo: Raspberry Pi - Mars Rover autonome avec suivi d'objets OpenCV : 7 étapes (avec photos)

Vidéo: Raspberry Pi - Mars Rover autonome avec suivi d'objets OpenCV : 7 étapes (avec photos)
Vidéo: Vision industrielle + IA : Tout se met en place ! 2024, Novembre
Anonim
Raspberry Pi - Mars Rover autonome avec suivi d'objets OpenCV
Raspberry Pi - Mars Rover autonome avec suivi d'objets OpenCV

Alimenté par un Raspberry Pi 3, reconnaissance d'objet Open CV, capteurs à ultrasons et motoréducteurs à courant continu. Ce rover peut suivre n'importe quel objet pour lequel il est entraîné et se déplacer sur n'importe quel terrain.

Étape 1: Présentation

Image
Image
Matériaux et logiciels requis
Matériaux et logiciels requis

Dans ce Instructables, nous allons construire un Mars Rover autonome qui peut reconnaître des objets et les suivre à l'aide du logiciel Open CV fonctionnant sur un Raspberry Pi 3 avec une option pour utiliser un périphérique webcam ou la caméra Raspberry Pi d'origine. Il est également équipé d'un capteur à ultrasons monté sur un servo pour suivre son chemin dans des environnements sombres où la caméra ne fonctionnerait pas. Les signaux reçus de Pi sont envoyés au circuit intégré de commande de moteur (L293D) qui entraîne 4 moteurs à courant continu de 150 tr/min montés sur un corps construit avec des tuyaux en PVC.

Étape 2: Matériel et logiciel requis

Matériaux et logiciels requis
Matériaux et logiciels requis
Matériaux et logiciels requis
Matériaux et logiciels requis

Matériaux nécessaires

  1. Raspberry Pi (Tout sauf zéro)
  2. Caméra Raspberry PI ou webcam
  3. Circuit intégré de pilote de moteur L293D
  4. Roues Robot (7x4cm) X 4
  5. Motoréducteurs à courant continu (150 tr/min) X 4
  6. Tuyaux PVC pour châssis

Logiciel requis

  1. Putty pour SSH ing le Pi
  2. CV ouvert pour la reconnaissance d'objets

Étape 3: Construire le châssis du Rover

Construire le châssis du Rover
Construire le châssis du Rover
Construire le châssis du Rover
Construire le châssis du Rover
Construire le châssis du Rover
Construire le châssis du Rover

Pour construire ce châssis en PVC, vous aurez besoin

  • 2X8"
  • 2X4"
  • 4 joints en T

Disposez les tuyaux en PVC dans une structure en forme d'échelle et insérez-les dans les joints en T. Vous pouvez utiliser le mastic PVC pour rendre les joints encore plus solides.

Les motoréducteurs à courant continu sont connectés au châssis de tuyaux en PVC à l'aide de pinces, puis les roues sont connectées aux moteurs à l'aide de vis.

Étape 4: Assemblage du télémètre à ultrasons

Assemblage de télémètre à ultrasons de construction
Assemblage de télémètre à ultrasons de construction

L'ensemble télémètre à ultrasons est construit à l'aide d'un capteur à ultrasons HC-SR04 connecté à un micro servomoteur. Les câbles sont pré-connectés avec le capteur à ultrasons avant d'être placés dans le boîtier en plastique qui est connecté au servomoteur via des vis.

Étape 5: Schémas et connexions électriques

Schémas et connexions électriques
Schémas et connexions électriques
Schémas et connexions électriques
Schémas et connexions électriques

Veuillez effectuer les connexions électriques selon le schéma de circuit ci-joint.

Étape 6: Installation de SSH et d'Open CV

Installation SSH et Open CV
Installation SSH et Open CV

Maintenant, nous devons nous connecter en SSH à notre raspberry pi afin d'installer le logiciel requis. Nous allons commencer par SSH sur notre Raspberry Pi. Assurez-vous que votre Pi est connecté au même routeur que votre PC et que vous connaissez l'adresse IP qui lui est attribuée par votre routeur. Maintenant, ouvrez une invite de commande ou PUTTY si vous êtes sous Windows et exécutez la commande suivante.

ssh [email protected]

L'adresse IP de votre Pi peut être différente, la mienne est 192.168.1.6.

Maintenant, entrez votre mot de passe par défaut - "framboise"

Maintenant que vous avez SSH dans votre Pi, commençons par mettre à jour avec cette commande.

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

Installons maintenant les outils de développement requis, sudo apt-get install build-essential cmake pkg-config

Ensuite, nous devons installer des packages d'E/S d'image qui aideront notre Pi à récupérer divers formats d'image à partir du disque.

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

Maintenant, quelques packages pour récupérer des vidéos, diffuser en direct et optimiser les performances 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

Nous devons également installer les fichiers d'en-tête Python 2.7 et Python 3 afin de pouvoir compiler OpenCV avec des liaisons python

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

Téléchargement du code source OpenCV

disque ~

wget -O opencv.zip

décompressez opencv.zip

Téléchargement du référentiel opencv_contrib

wget -O opencv_contrib.zip

décompressez opencv_contrib.zip

Il est également recommandé d'utiliser un environnement virtuel pour installer OpenCV.

sudo pip installer virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

Maintenant que virtualenv et virtualenvwrapper ont été installés, nous devons mettre à jour notre ~/.profile pour inclure les lignes suivantes en bas

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

Créez votre environnement virtuel python

mkvirtualenv cv -p python2

basculer vers l'environnement virtuel créé

source ~/.profil

travailler sur cv

Installation de NumPy

pip installer numpy

Compiler et installer OpenCV

cd ~/opencv-3.3.0/

construction mkdir

construction de cd

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 BUILD_EXAMPLES=ON..

Enfin compiler OpenCV

faire -j4

Une fois l'exécution de cette commande terminée. Tout ce que vous avez à faire est de l'installer.

sudo make config

sudo ldconfig

Étape 7: Exécuter le code Python pour Rover

Image
Image

Créez un fichier Python appelé tracker.py et ajoutez-y le code suivant.

sudo nano tracker.py

code:-

#Programme ASAR

#Ce programme suit une balle rouge et demande à un Raspberry Pi de la suivre. 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 Moteur arrière IO.output(22, 1) IO.output(13, 0)#Right Moteur arrière IO.output(15, 1) def ryt(): IO.output(21, 0) #Moteur gauche IO.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 Moteur arrière IO.output(15, 1) def stp(): IO.output(21, 0)#Left Motor stop IO.output(22, 0) IO.output(13, 0)#Droite Arrêt du moteur IO.output(15, 0) ############################ ##################################################### #################### def main(): capWebcam = cv2. VideoCapture(0) # déclarer un Objet VideoCapture et associé à la webcam, 0 => utiliser la 1ère webcam # afficher la résolution d'origine print "default resolution = " + 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) # changer la résolution en 320x240 pour un traitement plus rapide capWebcam.set(cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # afficher la résolution mise à jour print "résolution mise à jour = " + str(capWebcam.get(cv2. CAP_PROP_FRAME_WIDTH)) + "x" + str(capWebcam.get(cv2. CAP_PROP_FRAME_HEIGHT)) if capWebcam.isOpened() == False: # vérifier si l'objet VideoCapture a été associé avec succès à la webcam imprimer "erreur: capWebcam non accédé avec succès\n\n" # sinon, affiche le message d'erreur sur std out os.system("pause") # pause jusqu'à ce que l'utilisateur appuie sur une touche afin que l'utilisateur puisse voir le message d'erreur retourner # et quitter la fonction (qui quitte le programme) # end if while cv2.waitKey(1) != 27 et capWebcam.isOpened(): # jusqu'à ce que la touche Échap soit enfoncée ou que la connexion à la webcam soit perdue blnFrameReadSuccessf ully, imgOriginal = capWebcam.read() # lire l'image suivante sinon blnFrameReadSuccessfully ou imgOriginal est None: # si l'image n'a pas été lue avec succès, imprimer "erreur: image non lue depuis la webcam\n" # afficher le message d'erreur sur std out os.system ("pause") # pause jusqu'à ce que l'utilisateur appuie sur une touche pour que l'utilisateur puisse voir le message d'erreur break # exit while loop (qui quitte le programme) # end 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. 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) # remplir les cercles variables avec tous les cercles de l'image traitée si cercles n'est pas Aucun: # cette ligne est nécessaire pour empêcher le programme de planter sur la ligne suivante si aucun cercle n'a été trouvé IO.output(7, 1) pour le cercle dans les cercles[0]: # pour chaque cercle x, y, rayon = cercle # éclater x, y et rayon imprimer "position de la balle x = " + str(x) + ", y = " + str(y) + ", rayon = " + str(radius) # afficher la position et le rayon de la balle 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) # dessine un petit cercle vert au centre de l'objet détecté cv2.circle(imgOriginal, (x, y), rayon, (0, 0, 255), 3) # dessine un cercle rouge autour de l'objet détecté # end for # end if else: IO.output(7, 0) cv2.namedWindow("imgOriginal", cv2. WINDOW_AUTOSIZE) # crée des fenêtres, utilisez WINDOW_AUTOSIZE pour une taille de fenêtre fixe cv2.namedWindow("imgThresh", cv2. WINDOW_AUTOSIZE) # ou utilisez WINDOW_NORMAL pour autoriser le redimensionnement de la fenêtre cv2.imshow("imgOriginal", imgOri ginal) # show windows cv2.imshow("imgThresh", imgThresh) # end while cv2.destroyAllWindows() # supprime les fenêtres de la mémoire return ##################### ##################################################### ############################# if _name_ == "_main_": main()

Maintenant, il ne reste plus qu'à exécuter le programme

python tracker.py

Félicitations! votre rover autonome est prêt ! La partie de navigation basée sur le capteur à ultrasons sera bientôt terminée et je mettrai à jour cette instructable.

Merci d'avoir lu!

Conseillé: