Sommario:

Robot di tracciamento della palla: 8 passaggi
Robot di tracciamento della palla: 8 passaggi

Video: Robot di tracciamento della palla: 8 passaggi

Video: Robot di tracciamento della palla: 8 passaggi
Video: selective attention test 2024, Luglio
Anonim
Robot di tracciamento della palla
Robot di tracciamento della palla
Robot di tracciamento della palla
Robot di tracciamento della palla
Robot di tracciamento della palla
Robot di tracciamento della palla

Quindi, in questo, dirò come fare in modo che un robot per il tracciamento della palla che sia un robot identificherà una palla e la segua. È fondamentalmente una tecnica di sorveglianza automatizzata che può essere utilizzata nel mondo moderno. Quindi, facciamoci un salto e iniziamo a costruire…

NOTA: questa è la parte assegnata alla Deakin University, School of IT, SIT-210 Embedded Systems Development

Forniture

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

Passaggio 1: Introduzione

introduzione
introduzione

La sorveglianza odierna presenta un grave inconveniente, ovvero che si basa sul coinvolgimento degli esseri umani che, come tutti sappiamo, possono essere facilmente distratti, quindi era della nostra massima importanza scoprire un sistema in grado di monitorare le regioni in modo autonomo e continuo. Inoltre, vogliamo identificare cose e pericoli odiosi o indesiderati mentre contemporaneamente prendiamo decisioni e rispondiamo di conseguenza. Quindi il tracciamento degli oggetti con l'uso di sistemi e computer intelligenti è essenziale e cruciale per ottenere una sorveglianza automatizzata.

Qualsiasi sistema di sorveglianza esterno deve essere in grado di tracciare oggetti in movimento nel suo campo visivo, classificare questi oggetti e rilevare alcune delle loro attività. Ho sviluppato un metodo per tracciare e classificare questi oggetti in scenari realistici. Il tracciamento dell'oggetto in una singola telecamera viene eseguito utilizzando la sottrazione dello sfondo, seguita dalla corrispondenza della regione. Ciò tiene conto di più segnali, tra cui velocità, dimensioni e distanze dei riquadri di delimitazione.

Passaggio 2: materiali e software utilizzati in questo progetto

Materiali e software utilizzati in questo progetto
Materiali e software utilizzati in questo progetto
Materiali e software utilizzati in questo progetto
Materiali e software utilizzati in questo progetto
Materiali e software utilizzati in questo progetto
Materiali e software utilizzati in questo progetto

Componenti hardware utilizzati:

  • Lampone Pi (x1)
  • Modulo fotocamera Raspberry Pi (x1)
  • Sensore a ultrasuoni (x3)
  • Driver motore SparkFun Dual H-Bridge L298 (x1)
  • Motore CC (x1)
  • Tagliere (x1)
  • Cavi di collegamento

Software utilizzato:

OpenCV

Strumenti manuali:

Pitone

Passaggio 3: cosa fare?

Qualsiasi sistema di sorveglianza esterno deve essere in grado di tracciare oggetti in movimento nel suo campo visivo, classificare questi oggetti e rilevare alcune delle loro attività. Ho sviluppato un metodo per tracciare e classificare questi oggetti in scenari realistici. Il tracciamento dell'oggetto in una singola telecamera viene eseguito utilizzando la sottrazione dello sfondo, seguita dalla corrispondenza della regione. Ciò tiene conto di più segnali, tra cui velocità, dimensioni e distanze dei riquadri di delimitazione.

La cosa cruciale durante il rilevamento delle immagini fotogramma per fotogramma era evitare qualsiasi caduta di fotogramma poiché il bot può entrare in uno stato di limbo se il bot non riesce a notare la direzione del movimento della palla a causa delle cadute di fotogramma. Se la palla esce dal raggio della telecamera, entrerà in quello che chiamiamo uno stato di limbo, in tal caso, il bot fa un giro di 360 gradi per visualizzare lo spazio intorno a sé finché la palla non torna nell'inquadratura di la telecamera e poi iniziare a muoversi nella sua direzione.

Per l'analisi dell'immagine, prendo ogni fotogramma e poi lo maschero con il colore necessario. Poi trovo tutti i contorni e trovo il più grande tra loro e lo lego in un rettangolo. E mostra il rettangolo sull'immagine principale e trova le coordinate del centro del rettangolo.

Infine, il bot cerca di portare le coordinate della pallina al centro del suo asse di coordinate. Ecco come funziona il robot. Questo può essere ulteriormente migliorato utilizzando un dispositivo IoT come una particella di fotoni che ti consente di essere informato quando viene rilevata una cosa e che il robot la sta seguendo o quando il robot ne ha perso le tracce e ora sta tornando alla base.

Ai fini dell'elaborazione delle immagini, è necessario installare il software OpenCV sul tuo Raspberry Pi, il che è stato piuttosto complicato per me.

Puoi ottenere tutte le informazioni necessarie per installare OpenCV tramite questo link: clicca qui

Fase 4: Schemi

Image
Image
Schematico
Schematico
Schematico
Schematico

Sopra ho fornito gli schemi per il mio progetto e insieme ad esso c'è il circuito stampato (PCB).

Ed ecco alcune delle connessioni principali che devi fare:

• Innanzitutto il modulo Raspberry Pi Camera è collegato direttamente al Raspberry Pi.

• I sensori ultrasonici VCC sono collegati al terminale comune lo stesso è con il GND (massa) e le restanti due porte del sensore ultrasonico sono collegate ai pin GPIO sul Raspberry Pi.

• I motori sono collegati tramite l'H-Bridge.

• L'alimentazione viene fornita tramite la batteria.

Ho anche aggiunto il video che potrebbe aiutare con la comprensione del funzionamento del sensore a ultrasuoni e di come funziona.

e inoltre puoi seguire questo link se non riesci a trovare il video qui sopra.

Passaggio 5: come fare?

Ho realizzato questo progetto raffigurante un robot di base che può seguire una palla. Il robot utilizza una fotocamera per elaborare le immagini prendendo fotogrammi e tracciando la palla. Per tracciare la palla vengono utilizzate varie caratteristiche come il colore, le dimensioni e la forma.

Il Robot trova un colore codificato e poi cerca la palla di quel colore e lo segue. Ho scelto Raspberry Pi come microcontrollore in questo progetto perché ci consente di utilizzare il suo modulo fotocamera e offre una grande flessibilità nel codice poiché utilizza il linguaggio Python che è molto intuitivo e ci consente inoltre di utilizzare la libreria OpenCV per analizzare le immagini.

Un H-Bridge è stato utilizzato per invertire il senso di rotazione dei motori o per fermarli.

Per l'analisi dell'immagine, prendo ogni fotogramma e poi lo maschero con il colore necessario. Poi trovo tutti i contorni e trovo il più grande tra loro e lo lego in un rettangolo. E mostra il rettangolo sull'immagine principale e trova le coordinate del centro del rettangolo.

Infine, il bot cerca di portare le coordinate della pallina al centro del suo asse di coordinate. Ecco come funziona il robot. Questo può essere ulteriormente migliorato utilizzando un dispositivo IoT come una particella di fotoni che ti consente di essere informato quando viene rilevata una cosa e che il robot la sta seguendo o quando il robot ne ha perso le tracce e ora sta tornando alla base. E per fare ciò utilizzeremo una piattaforma software online che collega i dispositivi e consente loro di eseguire determinate azioni su trigger specifici, ovvero i trigger IFTTT.

Passaggio 6: pseudo-codice

Pseudo-codice
Pseudo-codice

Ecco lo pseudo-codice per la parte di rilevamento utilizzando OpenCV in cui rileviamo una palla.

Passaggio 7: codice

Codice
Codice
Codice
Codice
Codice
Codice
Codice
Codice

Sopra ci sono gli snippet del codice e sotto c'è la descrizione dettagliata del codice.

# importa i pacchetti necessari

IMPORTIAMO TUTTI I PACCHETTI NECESSARI

from picamera.array import PiRGBArray #Poiché c'è un problema di risoluzione in raspberry pi, non sarà in grado di acquisire fotogrammi da VideoCapture

da picamera import PiCamera import RPi. GPIO as GPIO import time import numpy as np

ORA IMPOSTIAMO L'HARDWARE E ASSEGNIAMO I PIN COLLEGATI SU RASPBERRY PI

GPIO.setmode(GPIO. BOARD)

GPIO_TRIGGER1 = 29 #Sensore ultrasonico sinistro

GPIO_ECHO1 = 31

GPIO_TRIGGER2 = 36 #Sensore ultrasonico anteriore

GPIO_ECHO2 = 37

GPIO_TRIGGER3 = 33 #Sensore ultrasonico destro

GPIO_ECHO3 = 35

MOTOR1B=18 #Motore Sinistro

MOTORE1E=22

MOTORE2B=21 #Motore Destro

MOTORE2E=19

LED_PIN=13 #Se trova la pallina accende il led

# Imposta i pin come output e input

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) # Attiva GPIO.setup(GPIO_ECHO3, GPIO. IN) GPIO.setup(LED_PIN, GPIO. OUT)

# Imposta il trigger su False (Basso)

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

QUESTA FUNZIONE UTILIZZA TUTTI I SENSORI AD ULTRASUONI RACCOGLIE LA DISTANZA DAGLI OGGETTI INTORNO AL NOSTRO BOT

# Consenti al modulo di assestarsi

def sonar(GPIO_TRIGGER, GPIO_ECHO): start=0 stop=0 # Imposta i pin come output e input GPIO.setup(GPIO_TRIGGER, GPIO. OUT) # Trigger GPIO.setup(GPIO_ECHO, GPIO. IN) # Echo # Imposta trigger su False (Basso) GPIO.output(GPIO_TRIGGER, False) # Consenti al modulo di regolare time.sleep(0.01) #while distance > 5: #Invia 10us di impulso per attivare GPIO.output(GPIO_TRIGGER, True) time.sleep(0.00001) GPIO. output(GPIO_TRIGGER, False) begin = time.time() mentre GPIO.input(GPIO_ECHO)==0 e time.time()

FAR FUNZIONARE I MOTORI CC CON IL RASPBERRY PI

GPIO.setup(MOTOR1B, GPIO. OUT)

GPIO.setup(MOTOR1E, GPIO. OUT)

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

DEFINIRE LE FUNZIONI PER AZIONARE IL ROBOT E FARLO MUOVI IN DIREZIONI DIVERSE

def avanti():

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():

GPIO.output(MOTOR1E, GPIO. LOW) GPIO.output(MOTOR1B, GPIO. LOW) GPIO.output(MOTOR2E, GPIO. LOW) GPIO.output(MOTOR2B, GPIO. LOW)

FAR FUNZIONARE IL MODULO FOTOCAMERA E REGOLARE LE IMPOSTAZIONI

#CATTURA FOTOCAMERA

#inizializza la fotocamera e prendi un riferimento alla cattura della fotocamera raw camera = PiCamera() camera.resolution = (160, 120) camera.framerate = 16 rawCapture = PiRGBArray(camera, size=(160, 120)) # consenti la fotocamera al tempo di riscaldamento.sleep(0.001)

ORA IMPLEMENTA LA COSA PRINCIPALE IN CUI IL BOT SEGUA LA PALLA ED EVITA OGNI OSTACOLO IN MODO

while(1<10): { #distanza proveniente dal sensore ultrasonico anteriore distanzaC = sonar(GPIO_TRIGGER2, GPIO_ECHO2) #distanza proveniente dal sensore ultrasonico destro distanzaR = sonar(GPIO_TRIGGER3, GPIO_ECHO3) #distanza proveniente dal sensore ultrasonico sinistro distanzaL = 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: #otherwise va avanti() time.sleep(0.00625) if(distanzaC>10): #porta le coordinate della pallina al centro dell'asse immaginario della telecamera if(centre_x=20): if(centre_x0): flag=1 leftturn() time.sleep(0.025) forward() time.sleep(0.00003125) stop() time.sleep(0.00625) else: stop() time.sleep(0.01)

altro:

#se trova la pallina ed è troppo vicina accende il led. GPIO.output(LED_PIN, GPIO. HIGH) time.sleep(0.1) stop() time.sleep(0.1) #cv2.imshow("draw", frame) rawCapture.truncate(0) # cancella il flusso in preparazione per il fotogramma successivo }

FATE LE PULIZIE NECESSARI

GPIO.cleanup() #libera tutti i pin GPIO

Passaggio 8: collegamenti esterni

Link al video dimostrativo: clicca qui (Youtube)

Link al Codice su Git-hub: clicca qui (Git-Hub)

Consigliato: