INVESTIGACIÓN

Fish 1 .png
WhatsApp Image 2022-03-12 at 9.35.48 PM.jpeg
WhatsApp Image 2022-03-12 at 9.35.48 PM (1).jpeg

DESARROLLO

WhatsApp Image 2022-03-12 at 9.35.48 PM (3).jpeg
WhatsApp Image 2022-03-12 at 9.35.49 PM.jpeg
WhatsApp Image 2022-03-12 at 8.06.16 PM (2).jpeg
Cat fish.png
Fish bowl 2 .png
WhatsApp Image 2022-03-12 at 9.35.49 PM (3).jpeg
WhatsApp Image 2022-03-12 at 9.35.49 PM (4).jpeg

CÓDIGO

Con el propósito de simplificar el código, así como, realizar una documentación correcta, se analizó el código gracias a que se separó con recuadros de colores distintos, los cuales son explicados en la parte inferior de la captura de cada uno de los segmentos.
El código presentado se divide en dos secciones, la primera parte consiste en el sistema de visión para detectar el pez y conocer su posición en la pecera, representada en un matriz 3x3 con dos variables globales.

Codigo1.png
CColores1.png

Se selecciona la cámara con la que funcionará el programa, ya sea, la cámara que detecta el pez o la cámara para la demostración.

Establece la definición de las cámaras, esto para poder realizar el mismo programa con cualquiera de las cámaras.

Como apoyo visual se colocan 4 líneas verdes sobre la imagen para seccionarla en 9 segmentos iguales los cuales representan acciones diferentes en el programa. 

Se cambia el tamaño de la imagen para que se acople al marco de la previsualización en el panel frontal del programa.

Desde este punto se comienza con el análisis de la imagen, el primer paso es simplificar la imagen a una imagen binaria, esto desde un filtro RGB.

Aquí se establecen los parámetros y rangos del filtro RGB, si el pixel analizado se encuentra de estos parámetros se considera un pixel encendido, si no es así, se considera apagado.

Codigo2.png
CColores2.png

Después de la simplificación de la imagen pueden existir puntos los cuales no necesitamos, esta función nos ayuda quitar estas partículas.

El siguiente paso de análisis de la imagen es la función close, la cual ayuda a cerrar en polígonos las imágenes u objetos que están cerca.

La siguiente función consiste en dilatar la imagen esto para que la imagen se simplifique y tenga una forma parecida a un circulo.

En esta función se busca el centro de masa de la imagen binaria para reconocer a el pez, obteniendo su posición y si existe.

En esta sección de programa se obtiene un resultado booleano el cual es el resultado de la comparación si el pez se encuentra en la imagen o no, lo cual sirve para la evitar errores en la lógica del programa.

En esta parte se realiza la comparación de la posición del pez con respecto a los cuadrantes de la imagen, con esto se crea un matriz de dos dimensiones con tres espacios hacia cada uno de las direcciones. Esto se exporta a una variable global.

En esta sección del código, la cual corresponde al segundo programa, en donde se obtienen los parámetros para el movimiento, los cuales se transmiten desde la computadora al controlador MyRio con señales PWM hacia el L298N.

Codigo3.png
CColores3.png

En esta sección de código se importan las variables globales con los valores de la posición del pez en la matriz 3x3, así mismo el valor de la posición en pixeles del mismo.

En esta sección se colocó un switch case en cual compara los tres casos de las posiciones en X.

Al interior de cada uno de los casos anteriores se colocó otro switch case con las posiciones de la matriz, en este caso es con respecto a la dimensión en Y

Gracias a estos casos se obtienen los valores de PWM, es decir, velocidad, para cada uno de los motores, así como, la dirección de los mismos. Los cuales se envían en los puertos correspondientes del FPGA MyRio.

CIRCUITO

CircuitoPez.png