Table des matières:

Robot de suivi de balle : 8 étapes
Robot de suivi de balle : 8 étapes

Vidéo: Robot de suivi de balle : 8 étapes

Vidéo: Robot de suivi de balle : 8 étapes
Vidéo: Star Wars BB-8 Droid v1 #1 | Ball Balancing Robot | James Bruton 2024, Novembre
Anonim
Robot de suivi de balle
Robot de suivi de balle
Robot de suivi de balle
Robot de suivi de balle
Robot de suivi de balle
Robot de suivi de balle

Donc, en cela, je vais expliquer comment faire un robot de suivi de balle qui est un robot qui identifiera une balle et la suivra. Il s'agit essentiellement d'une technique de surveillance automatisée qui peut être utilisée dans le monde moderne. Alors, laissez-nous simplement entrer et commencer à construire…

REMARQUE: Il s'agit de la tâche partielle soumise à l'Université Deakin, École d'informatique, SIT-210 Développement de systèmes embarqués

Fournitures

www.hackster.io/junejarohan/ball-tracking-robot-7a9865

Étape 1: Présentation

introduction
introduction

La surveillance d'aujourd'hui présente un inconvénient majeur qui est qu'elle repose sur l'implication des humains qui, comme nous le savons tous, peuvent être facilement distraits, il était donc de la plus haute importance de découvrir un système capable de surveiller les régions de manière autonome et continue. Et nous voulons également identifier les choses et les dangers odieux ou indésirables tout en prenant des décisions et en répondant en conséquence. Le suivi des objets avec l'utilisation de systèmes intelligents et d'ordinateurs est donc essentiel et crucial pour réaliser une surveillance automatisée.

Tout système de surveillance extérieure doit pouvoir suivre les objets en mouvement dans son champ de vision, classer ces objets et détecter certaines de leurs activités. J'ai développé une méthode pour suivre et classer ces objets dans des scénarios réalistes. Le suivi d'objet dans une seule caméra est effectué à l'aide d'une soustraction d'arrière-plan, suivie d'une correspondance de région. Cela prend en compte plusieurs indices, y compris les vitesses, les tailles et les distances des boîtes englobantes.

Étape 2: Matériaux et logiciels utilisés dans ce projet

Matériaux et logiciels utilisés dans ce projet
Matériaux et logiciels utilisés dans ce projet
Matériaux et logiciels utilisés dans ce projet
Matériaux et logiciels utilisés dans ce projet
Matériaux et logiciels utilisés dans ce projet
Matériaux et logiciels utilisés dans ce projet

Composants matériels utilisés:

  • Framboise Pi (x1)
  • Module caméra Raspberry Pi (x1)
  • Capteur à ultrasons (x3)
  • Pilotes de moteur SparkFun Dual H-Bridge L298 (x1)
  • Moteur à courant continu (x1)
  • Planche à pain (x1)
  • Fils de connexion

Logiciel utilisé:

OpenCV

Outils manuels:

Python

Étape 3: Que faire ?

Tout système de surveillance extérieure doit pouvoir suivre les objets en mouvement dans son champ de vision, classer ces objets et détecter certaines de leurs activités. J'ai développé une méthode pour suivre et classer ces objets dans des scénarios réalistes. Le suivi d'objet dans une seule caméra est effectué à l'aide d'une soustraction d'arrière-plan, suivie d'une correspondance de région. Cela prend en compte plusieurs indices, y compris les vitesses, les tailles et les distances des boîtes englobantes.

La chose cruciale lors de la détection d'images image par image était d'éviter toute chute d'image, car le bot peut alors entrer dans un état de limbes s'il ne remarque pas la direction du mouvement de la balle à cause des chutes d'image. Si la balle sort de la portée de la caméra, elle entrera dans ce que nous appelons un état de limbes, dans ce cas, le bot fait un virage à 360 degrés pour voir l'espace autour d'elle jusqu'à ce que la balle revienne dans le cadre de la caméra, puis commencez à vous déplacer dans sa direction.

Pour l'analyse de l'image, je prends chaque image et la masque ensuite avec la couleur nécessaire. Ensuite, je trouve tous les contours et je trouve le plus grand d'entre eux et je le délimite dans un rectangle. Et montrez le rectangle sur l'image principale et trouvez les coordonnées du centre du rectangle.

Enfin, le bot essaie d'amener les coordonnées de la balle au centre de son axe de coordonnées. C'est ainsi que fonctionne le robot. Cela peut être encore amélioré en utilisant un appareil IoT comme une particule de photons qui peut vous permettre d'être informé lorsqu'une chose est détectée et que le robot la suit ou lorsque le robot en a perdu la trace et revient maintenant à la base.

Pour le traitement des images, vous devez installer le logiciel OpenCV sur votre raspberry pi, ce qui était assez délicat pour moi.

Vous pouvez obtenir toutes les informations nécessaires pour installer OpenCV via ce lien: cliquez ici

Étape 4: Schémas

Image
Image
Schémas
Schémas
Schémas
Schémas

Ci-dessus, j'ai fourni les schémas de mon projet et avec lui le circuit imprimé (PCB).

Et voici quelques-unes des principales connexions que vous devez effectuer:

• Tout d'abord le module Raspberry Pi Camera est directement connecté au Raspberry Pi.

• Les capteurs à ultrasons VCC sont connectés à la borne commune de même qu'au GND (masse) et les deux ports restants du capteur à ultrasons sont connectés aux broches GPIO du Raspberry Pi.

• Les moteurs sont connectés à l'aide du pont en H.

• L'alimentation est fournie à l'aide de la batterie.

J'ai également ajouté la vidéo qui pourrait aider à comprendre le fonctionnement du capteur à ultrasons et son fonctionnement.

et vous pouvez également suivre ce lien si vous ne trouvez pas la vidéo ci-dessus.

Étape 5: Comment faire ?

J'ai fait ce projet représentant un robot de base qui peut suivre une balle. Le robot utilise une caméra pour traiter l'image en prenant des images et en suivant la balle. Pour suivre la balle, diverses caractéristiques telles que sa couleur, sa taille et sa forme sont utilisées.

Le Robot trouve une couleur codée en dur, puis recherche la balle de cette couleur et la suit. J'ai choisi Raspberry Pi comme micro-contrôleur dans ce projet car il nous permet d'utiliser son module caméra et donne une grande flexibilité dans le code car il utilise le langage python qui est très convivial et il nous permet également d'utiliser la bibliothèque OpenCV pour analyser les images.

Un pont en H a été utilisé pour changer le sens de rotation des moteurs ou pour les arrêter.

Pour l'analyse de l'image, je prends chaque image et la masque ensuite avec la couleur nécessaire. Ensuite, je trouve tous les contours et je trouve le plus grand d'entre eux et je le délimite dans un rectangle. Et montrez le rectangle sur l'image principale et trouvez les coordonnées du centre du rectangle.

Enfin, le bot essaie d'amener les coordonnées de la balle au centre de son axe de coordonnées. C'est ainsi que fonctionne le robot. Cela peut être encore amélioré en utilisant un appareil IoT comme une particule de photons qui peut vous permettre d'être informé lorsqu'une chose est détectée et que le robot la suit ou lorsque le robot en a perdu la trace et revient maintenant à la base. Et pour ce faire, nous utiliserons une plate-forme logicielle en ligne qui connecte les appareils et leur permet d'effectuer certaines actions sur des déclencheurs spécifiques, à savoir les déclencheurs IFTTT.

Étape 6: Pseudo-code

Pseudo-Code
Pseudo-Code

Voici le pseudo-code pour la partie détection utilisant OpenCV où l'on détecte une balle.

Étape 7: Coder

Code
Code
Code
Code
Code
Code
Code
Code

Ci-dessus se trouvent les extraits de code et ci-dessous la description détaillée du code.

# importer les packages nécessaires

NOUS IMPORTONS TOUS LES PAQUETS NÉCESSAIRES

de picamera.array importer PiRGBArray #Comme il y a un problème de résolution dans raspberry pi, ne sera pas en mesure de capturer des images par VideoCapture

depuis picamera importer PiCamera importer RPi. GPIO en tant que GPIO importer l'heure numpy en tant que np

MAINTENANT, NOUS CONFIGURONS LE MATÉRIEL ET ATTRIBUONS LES BROCHES CONNECTÉES SUR RASPBERRY PI

GPIO.setmode(GPIO. BOARD)

GPIO_TRIGGER1 = 29 #Capteur à ultrasons gauche

GPIO_ECHO1 = 31

GPIO_TRIGGER2 = 36 #Capteur à ultrasons avant

GPIO_ECHO2 = 37

GPIO_TRIGGER3 = 33 #Capteur à ultrasons droit

GPIO_ECHO3 = 35

MOTEUR1B=18 #Moteur Gauche

MOTEUR1E=22

MOTOR2B=21 #Moteur droit

MOTEUR2E=19

LED_PIN=13 #S'il trouve la balle, alors il allumera la led

# Définir les broches comme sortie et entrée

GPIO.setup(GPIO_TRIGGER1, GPIO. OUT) # Trigger GPIO.setup(GPIO_ECHO1, GPIO. IN) # Echo GPIO.setup(GPIO_TRIGGER2, GPIO. OUT) # Trigger GPIO.setup(GPIO_ECHO2, GPIO. IN) GPIO.setup(GPIO_TRIGGER3, GPIO. OUT) # Déclencher GPIO.setup(GPIO_ECHO3, GPIO. IN) GPIO.setup(LED_PIN, GPIO. OUT)

# Définir le déclencheur sur False (Low)

GPIO.output(GPIO_TRIGGER1, False) GPIO.output(GPIO_TRIGGER2, False) GPIO.output(GPIO_TRIGGER3, False)

CETTE FONCTION UTILISE TOUS LES CAPTEURS À ULTRASONS COLLECTER LA DISTANCE DES OBJETS AUTOUR DE NOTRE BOT

# Autoriser le module à s'installer

def sonar(GPIO_TRIGGER, GPIO_ECHO): start=0 stop=0 # Définir les broches comme sortie et entrée GPIO.setup(GPIO_TRIGGER, GPIO. OUT) # Trigger GPIO.setup(GPIO_ECHO, GPIO. IN) # Echo # Définir le déclencheur sur False (Faible) GPIO.output(GPIO_TRIGGER, False) # Permet au module de régler time.sleep(0.01) #while distance > 5: #Envoyer une impulsion de 10us pour déclencher GPIO.output(GPIO_TRIGGER, True) time.sleep(0.00001) GPIO. output(GPIO_TRIGGER, False) begin = time.time() tandis que GPIO.input(GPIO_ECHO)==0 et time.time()

FAIRE FONCTIONNER LES MOTEURS CC AVEC LE RASPBERRY PI

GPIO.setup(MOTOR1B, GPIO. OUT)

GPIO.setup(MOTOR1E, GPIO. OUT)

GPIO.setup(MOTOR2B, GPIO. OUT) GPIO.setup(MOTOR2E, GPIO. OUT)

DÉFINIR LES FONCTIONS POUR FAIRE FONCTIONNER LE ROBOT ET LE FAIRE SE DÉPLACER DANS DIFFÉRENTES DIRECTIONS

def avant():

GPIO.output(MOTOR1B, GPIO. HIGH) GPIO.output(MOTOR1E, GPIO. LOW) GPIO.output(MOTOR2B, GPIO. HIGH) GPIO.output(MOTOR2E, GPIO. LOW) def reverse(): GPIO.output(MOTOR1B), GPIO. LOW) GPIO.output(MOTOR1E, GPIO. HIGH) GPIO.output(MOTOR2B, GPIO. LOW) GPIO.output(MOTOR2E, GPIO. HIGH) def rightturn(): GPIO.output(MOTOR1B, GPIO. LOW) GPIO.output(MOTOR1E, GPIO. HIGH) GPIO.output(MOTOR2B, GPIO. HIGH) GPIO.output(MOTOR2E, GPIO. LOW) def leftturn(): GPIO.output(MOTOR1B, GPIO. HIGH) GPIO.output(MOTOR1E, GPIO. LOW) GPIO.output(MOTOR2B, GPIO. LOW) GPIO.output(MOTOR2E, GPIO. HIGH)

def stop():

Sortie GPIO (MOTEUR1E, GPIO. LOW) Sortie GPIO (MOTEUR1B, GPIO. LOW) Sortie GPIO (MOTEUR2E, GPIO. LOW) Sortie GPIO (MOTEUR2B, GPIO. LOW)

FAIRE FONCTIONNER LE MODULE CAMERA ET AJUSTER LES PARAMETRES

#CAPTURE CAMÉRA

#initialiser la caméra et saisir une référence à la capture de caméra brute camera = PiCamera() camera.resolution = (160, 120) camera.framerate = 16 rawCapture = PiRGBArray(camera, size=(160, 120)) # autoriser la caméra au temps de préchauffage.sommeil(0,001)

MAINTENANT METTRE EN UVRE LA CHOSE PRINCIPALE O LE BOT SUIVRE LA BALLE ET ÉVITER TOUT OBSTACLE SUR LE CHEMIN

while(1<10): { #distance venant du capteur à ultrasons avant distanceC = sonar(GPIO_TRIGGER2, GPIO_ECHO2) #distance venant du capteur à ultrasons droit distanceR = sonar(GPIO_TRIGGER3, GPIO_ECHO3) #distance venant du capteur à ultrasons gauche distanceL = sonar(GPIO_TRIGGER1, GPIO_ECHO1) if(distanceC=8: rightturn() time.sleep(0.00625) stop() time.sleep(0.0125) forward() time.sleep(0.00625) stop() time.sleep(0.0125) #while found== 0: leftturn() time.sleep(0.00625) elif distanceL>=8: leftturn() time.sleep(0.00625) stop() time.sleep(0.0125) forward() time.sleep(0.00625) stop() time.sleep (0.0125) rightturn() time.sleep(0.00625) stop() time.sleep(0.0125) else: stop() time.sleep(0.01) else: #sinon il avance vers l'avant() time.sleep(0.00625) if(distanceC>10): #il amène les coordonnées de la balle au centre de l'axe imaginaire de la caméra. if(centre_x=20): if(centre_x0): flag=1 leftturn() time.sleep(0.025) forward() time.sleep(0.00003125) stop() time.sleep(0.00625) sinon: stop() time.sleep(0.01)

autre:

#s'il fonde la balle et qu'il est trop près il allume la led. GPIO.output(LED_PIN, GPIO. HIGH) time.sleep(0.1) stop() time.sleep(0.1) #cv2.imshow("draw", frame) rawCapture.truncate(0) # effacer le flux en vue du image suivante }

FAIRE LES NETTOYAGES NÉCESSAIRES

GPIO.cleanup() #libère toutes les broches GPIO

Étape 8: Liens externes

Lien vers la vidéo de démonstration: cliquez ici (Youtube)

Lien vers le Code sur Git-hub: cliquez ici (Git-Hub)

Conseillé: