Table des matières:
- Étape 1: Présentation
- Étape 2: Matériel et logiciel requis
- Étape 3: Construire le châssis du Rover
- Étape 4: Assemblage du télémètre à ultrasons
- Étape 5: Schémas et connexions électriques
- Étape 6: Installation de SSH et d'Open CV
- Étape 7: Exécuter le code Python pour Rover
Vidéo: Raspberry Pi - Mars Rover autonome avec suivi d'objets OpenCV : 7 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:06
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
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 nécessaires
- Raspberry Pi (Tout sauf zéro)
- Caméra Raspberry PI ou webcam
- Circuit intégré de pilote de moteur L293D
- Roues Robot (7x4cm) X 4
- Motoréducteurs à courant continu (150 tr/min) X 4
- Tuyaux PVC pour châssis
Logiciel requis
- Putty pour SSH ing le Pi
- CV ouvert pour la reconnaissance d'objets
Étape 3: 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
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
Veuillez effectuer les connexions électriques selon le schéma de circuit ci-joint.
Étape 6: Installation de SSH et d'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.
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
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é:
Capteur de vision Micro:bit MU - Suivi d'objets : 7 étapes
Micro: bit MU Vision Sensor - Object Tracking : Donc, dans cette instructable, nous allons commencer à programmer la voiture intelligente que nous construisons dans cette instructable et sur laquelle nous avons installé un capteur de vision MU dans cette instructable. Nous allons programmer le micro : peu avec un suivi d'objet simple, donc e
Suivi des objets Opencv : 3 étapes
Opencv Object Tracking : La détection d'objets en mouvement est une technique utilisée dans la vision par ordinateur et le traitement d'images. Plusieurs images consécutives d'une vidéo sont comparées par diverses méthodes pour déterminer si un objet en mouvement est détecté. La détection d'objets en mouvement a été utilisée pour wi
Capteur de vision Micro:bit MU - Suivi d'objets : 6 étapes
Capteur de vision Micro:bit MU - Objets de suivi : Ceci est mon quatrième guide sur le capteur de vision MU pour le micro:bit. Ici, je vais expliquer comment suivre des objets avec le micro:bit et écrire les coordonnées sur un écran OLED. J'ai expliqué dans mes autres guides comment connecter le micro:bit au
Voiture de maintien de voie autonome utilisant Raspberry Pi et OpenCV : 7 étapes (avec photos)
Voiture de maintien de voie autonome à l'aide de Raspberry Pi et OpenCV: Dans ces instructions, un robot de maintien de voie autonome sera implémenté et passera par les étapes suivantes: Rassemblement de pièces Installation des prérequis logiciels Assemblage du matériel Premier test Détection des lignes de voie et affichage du guide
WalabotEye - Suivi d'objets avec retour haptique : 11 étapes
WalabotEye - Suivi d'objets avec retour haptique : pour les malvoyants, utilisez-le pour mieux comprendre le monde qui vous entoure