Tabla de contenido:

Robot de seguimiento de bolas: 8 pasos
Robot de seguimiento de bolas: 8 pasos

Video: Robot de seguimiento de bolas: 8 pasos

Video: Robot de seguimiento de bolas: 8 pasos
Video: ✅ Robot Seguidor de Linea Negra (Como se hace) 2024, Noviembre
Anonim
Robot de seguimiento de bolas
Robot de seguimiento de bolas
Robot de seguimiento de bolas
Robot de seguimiento de bolas
Robot de seguimiento de bolas
Robot de seguimiento de bolas

Entonces, en esto, voy a decir cómo hacer un robot de rastreo de bolas que sea un robot que identifique una bola y la siga. Es básicamente una técnica de vigilancia automatizada que se puede utilizar en el mundo moderno. Entonces, simplemente saltemos y comencemos a construir …

NOTA: Esta es la asignación parcial enviada a Deakin University, School of IT, SIT-210 Embedded Systems Development

Suministros

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

Paso 1: Introducción

Introducción
Introducción

La vigilancia actual presenta un gran inconveniente y es que se basa en la participación de humanos que, como todos sabemos, pueden distraerse fácilmente, por lo que era de suma importancia descubrir un sistema que pueda monitorear regiones de manera autónoma y continua. Y también queremos identificar cosas y peligros desagradables o no deseados al mismo tiempo que tomamos decisiones y respondemos en consecuencia. Por lo tanto, el seguimiento de objetos con el uso de sistemas y computadoras inteligentes es esencial y crucial para lograr una vigilancia automatizada.

Cualquier sistema de vigilancia al aire libre debe poder rastrear objetos en movimiento en su campo de visión, clasificar estos objetos y detectar algunas de sus actividades. He desarrollado un método para rastrear y clasificar estos objetos en escenarios realistas. El seguimiento de objetos en una sola cámara se realiza mediante la resta de fondo, seguida de la correspondencia de la región. Esto tiene en cuenta múltiples señales, incluidas velocidades, tamaños y distancias de los cuadros delimitadores.

Paso 2: Materiales y productos blandos utilizados en este proyecto

Materiales y productos blandos utilizados en este proyecto
Materiales y productos blandos utilizados en este proyecto
Materiales y productos blandos utilizados en este proyecto
Materiales y productos blandos utilizados en este proyecto
Materiales y productos blandos utilizados en este proyecto
Materiales y productos blandos utilizados en este proyecto

Componentes de hardware utilizados:

  • Frambuesa Pi (x1)
  • Módulo de cámara Raspberry Pi (x1)
  • Sensor ultrasónico (x3)
  • Controladores de motor SparkFun Dual H-Bridge L298 (x1)
  • Motor de CC (x1)
  • Tablero de pruebas (x1)
  • Conexión de cables

Software utilizado:

OpenCV

Herramientas manuales:

Pitón

Paso 3: ¿Qué hacer?

Cualquier sistema de vigilancia al aire libre debe poder rastrear objetos en movimiento en su campo de visión, clasificar estos objetos y detectar algunas de sus actividades. He desarrollado un método para rastrear y clasificar estos objetos en escenarios realistas. El seguimiento de objetos en una sola cámara se realiza mediante la resta de fondo, seguida de la correspondencia de la región. Esto tiene en cuenta múltiples señales, incluidas velocidades, tamaños y distancias de los cuadros delimitadores.

Lo crucial al detectar imágenes fotograma a fotograma fue evitar cualquier caída de fotograma, ya que entonces el bot puede entrar en un estado de limbo si el bot no nota la dirección del movimiento de la pelota debido a las caídas de fotogramas. Si la pelota sale del rango de la cámara, entrará en lo que llamamos un estado de limbo, en ese caso, el bot hace un giro de 360 grados para ver el espacio a su alrededor hasta que la pelota regrese al marco de la cámara y luego comience a moverse en su dirección.

Para el análisis de la imagen, tomo cada fotograma y luego lo enmascaro con el color necesario. Luego encuentro todos los contornos y encuentro el más grande entre ellos y lo encierro en un rectángulo. Y muestre el rectángulo en la imagen principal y encuentre las coordenadas del centro del rectángulo.

Finalmente, el bot intenta llevar las coordenadas de la pelota al centro de su eje de coordenadas. Así es como funciona el robot. Esto se puede mejorar aún más mediante el uso de un dispositivo de IoT como una partícula de fotón que puede permitirle estar informado cuando se detecta algo y que el robot lo está siguiendo o cuando el robot ha perdido la pista y ahora está regresando a la base..

Para el procesamiento de imágenes, debe instalar el software OpenCV en su raspberry pi, lo cual fue bastante complicado para mí.

Puede obtener la información necesaria para instalar OpenCV a través de este enlace: haga clic aquí

Paso 4: esquemas

Image
Image
Esquemas
Esquemas
Esquemas
Esquemas

Arriba he proporcionado los esquemas para mi proyecto y junto con él está la placa de circuito impreso (PCB).

Y estas son algunas de las conexiones principales que debe hacer:

• En primer lugar, el módulo de la cámara Raspberry Pi se conecta directamente a la Raspberry Pi.

• Los sensores ultrasónicos VCC están conectados al terminal común, lo mismo que con el GND (tierra) y los dos puertos restantes del sensor ultrasónico están conectados a los pines GPIO en la Raspberry Pi.

• Los motores se conectan mediante H-Bridge.

• La energía se suministra mediante la batería.

También agregué el video que podría ayudar a comprender el funcionamiento del sensor ultrasónico y cómo funciona.

y también puede seguir este enlace si no puede encontrar el video de arriba.

Paso 5: ¿Cómo hacerlo?

Hice este proyecto que representa un robot básico que puede rastrear una bola. El robot usa una cámara para procesar imágenes tomando fotogramas y rastreando la pelota. Para rastrear la pelota se utilizan varias características como su color, tamaño y forma.

El robot encuentra un color codificado y luego busca la bola de ese color y la sigue. Elegí Raspberry Pi como microcontrolador en este proyecto porque nos permite usar su módulo de cámara y brinda una gran flexibilidad en el código, ya que usa el lenguaje Python que es muy fácil de usar y también nos permite usar la biblioteca OpenCV para analizar las imágenes.

Se ha utilizado un puente en H para cambiar la dirección de rotación de los motores o para detenerlos.

Para el análisis de la imagen, tomo cada fotograma y luego lo enmascaro con el color necesario. Luego encuentro todos los contornos y encuentro el más grande entre ellos y lo encierro en un rectángulo. Y muestre el rectángulo en la imagen principal y encuentre las coordenadas del centro del rectángulo.

Finalmente, el bot intenta llevar las coordenadas de la pelota al centro de su eje de coordenadas. Así es como funciona el robot. Esto se puede mejorar aún más mediante el uso de un dispositivo de IoT como una partícula de fotón que puede permitirle estar informado cuando se detecta algo y que el robot lo está siguiendo o cuando el robot ha perdido la pista y ahora está regresando a la base.. Y para ello utilizaremos una plataforma de software en línea que conecta los dispositivos y les permite realizar determinadas acciones sobre disparadores específicos que son disparadores IFTTT.

Paso 6: pseudocódigo

Pseudocódigo
Pseudocódigo

Aquí está el pseudocódigo para la parte de detección usando OpenCV donde detectamos una bola.

Paso 7: Código

Código
Código
Código
Código
Código
Código
Código
Código

Arriba están los fragmentos del código y abajo está la descripción detallada del código.

# importar los paquetes necesarios

IMPORTAMOS TODOS LOS PAQUETES NECESARIOS

from picamera.array import PiRGBArray # Como hay un problema de resolución en raspberry pi, no se podrán capturar fotogramas por VideoCapture

desde picamera import PiCamera import RPi. GPIO como GPIO import time import numpy as np

AHORA INSTALAMOS EL HARDWARE Y ASIGNAMOS LOS PINS CONECTADOS EN RASPBERRY PI

GPIO.setmode (GPIO. BOARD)

GPIO_TRIGGER1 = 29 #Sensor ultrasónico izquierdo

GPIO_ECHO1 = 31

GPIO_TRIGGER2 = 36 #Sensor ultrasónico frontal

GPIO_ECHO2 = 37

GPIO_TRIGGER3 = 33 #Sensor ultrasónico derecho

GPIO_ECHO3 = 35

MOTOR1B = 18 # Motor izquierdo

MOTOR1E = 22

MOTOR2B = 21 # Motor derecho

MOTOR2E = 19

LED_PIN = 13 #Si encuentra la bola, encenderá el led

# Establecer pines como salida y entrada

GPIO.setup (GPIO_TRIGGER1, GPIO. OUT) # Activar GPIO.setup (GPIO_ECHO1, GPIO. IN) # Echo GPIO.setup (GPIO_TRIGGER2, GPIO. OUT) # Activar GPIO.setup (GPIO_ECHO2, GPIO. IN) GPIO.setup (GPIO_TRIGGER3, GPIO. OUT) # Activar GPIO.setup (GPIO_ECHO3, GPIO. IN) GPIO.setup (LED_PIN, GPIO. OUT)

# Establezca el disparador en Falso (Bajo)

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

ESTA FUNCIÓN UTILIZA TODOS LOS SENSORES ULTRASÓNICOS RECOGE LA DISTANCIA DE LOS OBJETOS ALREDEDOR DE NUESTRO BOT

# Permitir que el módulo se asiente

def sonar (GPIO_TRIGGER, GPIO_ECHO): start = 0 stop = 0 # Establecer pines como salida y entrada GPIO.setup (GPIO_TRIGGER, GPIO. OUT) # Activar GPIO.setup (GPIO_ECHO, GPIO. IN) # Echo # Establecer el gatillo en False (Baja) GPIO.output (GPIO_TRIGGER, False) # Permitir que el módulo establezca time.sleep (0.01) # while distance> 5: # Enviar pulso de 10us para activar GPIO.output (GPIO_TRIGGER, True) time.sleep (0.00001) GPIO. salida (GPIO_TRIGGER, False) begin = time.time () mientras que GPIO.input (GPIO_ECHO) == 0 y time.time ()

CÓMO HACER FUNCIONAR LOS MOTORES DE CC CON EL RASPBERRY PI

Configuración de GPIO (MOTOR1B, GPIO. OUT)

Configuración de GPIO (MOTOR1E, GPIO. OUT)

Configuración de GPIO (MOTOR2B, GPIO. OUT) Configuración de GPIO (MOTOR2E, GPIO. OUT)

DEFINICIÓN DE FUNCIONES PARA OPERAR EL ROBOT Y HACER QUE SE MUEVA EN DIFERENTES DIRECCIONES

def adelante ():

Salida. GPIO (MOTOR1B, GPIO. ALTA) Salida. GPIO (MOTOR1E, GPIO. LOW) Salida. GPIO (MOTOR2B, GPIO. HIGH) Salida. GPIO (MOTOR2E, GPIO. LOW) def reverse (): Salida. GPIO (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) Salida. GPIO (MOTOR2B, GPIO. LOW) Salida. GPIO (MOTOR2E, GPIO. HIGH)

def detener ():

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

HACER FUNCIONAR EL MÓDULO DE CÁMARA Y AJUSTAR LA CONFIGURACIÓN

# CAPTURA DE CÁMARA

#inicializar la cámara y tomar una referencia a la captura de la cámara sin procesar camera = PiCamera () camera.resolution = (160, 120) camera.framerate = 16 rawCapture = PiRGBArray (camera, size = (160, 120)) # permitir la cámara al tiempo de calentamiento dormir (0.001)

AHORA IMPLEMENTANDO LO PRINCIPAL DONDE EL BOT SIGUE LA BOLA Y EVITE CUALQUIER OBSTÁCULO EN EL CAMINO

while (1 <10): {#distancia proveniente de la distancia del sensor ultrasónico frontalC = sonar (GPIO_TRIGGER2, GPIO_ECHO2) #distancia proveniente de la distancia del sensor ultrasónico derechoR = sonar (GPIO_TRIGGER3, GPIO_ECHO3) #distancia proveniente de la distancia del sensor ultrasónico izquierdoL = 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: giro a la izquierda () tiempo.sueño (0.00625) elif distanciaL> = 8: giro a la izquierda () tiempo.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: # de lo contrario avanza () time.sleep (0.00625) if (distanciaC> 10): #trae las coordenadas de la bola al centro del eje imaginario de la cámara. 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)

demás:

#si encuentra la bola y está demasiado cerca enciende el led. GPIO.output (LED_PIN, GPIO. HIGH) time.sleep (0.1) stop () time.sleep (0.1) # cv2.imshow ("draw", frame) rawCapture.truncate (0) # borrar la secuencia en preparación para el siguiente fotograma }

HACER LAS LIMPIEZAS NECESARIAS

GPIO.cleanup () #free todos los pines GPIO

Paso 8: Enlaces externos

Enlace al video de demostración: haga clic aquí (Youtube)

Enlace al código en Git-hub: haga clic aquí (Git-Hub)

Recomendado: