Saltar a contenido

Sentry2 y MakeCode

Principio de funcionamiento

Preparación

Para utilizar Sentry2, primero debes emparejarlo con un controlador principal, como la serie Arduino, Micro:bit, las placas de desarrollo ESP32 STEAMakers y micro:STEAMakers, etc. Conecta Sentry2 al controlador principal mediante un cable de datos PH2.0.

Cable PH2.0

Un cable de datos PH2.0, también conocido como cable JST PH2.0, es un tipo de cable con un conector pequeño de 2 mm de paso, comúnmente utilizado en electrónica para conectar componentes como baterías, motores, sensor Sentry2 y placas de circuito. Tiene cuatro pines y se utiliza para transmitir datos y energía.

Prepara un ordenador conectado a la red, instalale el software de programación gráfica necesario y conecta el controlador principal al ordenador mediante un cable USB.

Proceso de interacción de datos

Proceso de interacción de datos

Sentry2 tiene decenas de registros. La lectura y escritura de estos registros permite activar o desactivar algoritmos, configurar parámetros y obtener resultados de reconocimiento. Al leer o escribir en ellos, el controlador principal debe seguir un proceso de operación específico. Con el fin de facilitar su uso, todos los procesos de operación se han encapsulado en bibliotecas de controladores que admiten múltiples programas de software y lenguajes de programación.

El controlador principal se comunica con Sentry2 mediante los modos I2C o UART. En el modo I2C, los registros se pueden leer y escribir directamente, mientras que en el modo UART las operaciones deben seguir el protocolo de comunicación propietario de Sentry2. Al programar con la biblioteca de controladores gráficos, no es necesario preocuparse por el proceso específico de interacción de datos y no es posible operar los registros directamente.

Flujo de trabajo

El proceso básico de interacción entre Sentry2 y el controlador principal se muestra en el siguiente diagrama:

Diagrama del flujo de trabajo

Un programa tipo, como el que se muestra a continuación, se divide en dos partes: "Inicialización" y "Adquisición de resultados y procesos".

Bloques "al iniciar" y "para siempre" tipo

Establecer el modo de comunicación

El modo de comunicación del controlador principal debe ser compatible con el de Sentry2.

Sentry2 admite los modos de comunicación I2C y UART.

Las velocidades de transmisión compatibles con el modo UART son las siguientes: 9600, 19200, 38400, 57600, 115200, 921600, 1152000, 2000000.

Las direcciones de dispositivo disponibles son de 0x60 a 0x63. La configuración predeterminada es el modo I2C y la dirección predeterminada es 0x60.

Establecer el modo de comunicación
Establecer el modo de comunicación por hardware o por software

Ejecutar/Detener algoritmos

Sentry2 permite usar varios algoritmos a la vez si se cumplen ciertos criterios. Pero esto hace que se tarde más en reconocer la imagen.

El algoritmo se puede ejecutar o detener cuando se necesite. Si no es necesario cambiar el algoritmo, se recomienda usarlo al iniciar el programa.

Si hay que cambiar de algoritmo, primero detenga el algoritmo actual y luego ejecute el nuevo algoritmo, con un retardo recomendado de unos 100 ms entre las dos operaciones.

Ejecutar/Detener algoritmos

Configurar el modo de funcionamiento del algoritmo

Algunos algoritmos admiten varios modos de trabajo.

Algoritmo Modo 1 Modo 2 Modo 3 Modo 4 Modo 5
Blob Máximo 1 bloque de color simultaneamente (valor por defecto) Máximo 2 bloques de color simultaneamente Máximo 3 bloques de color simultaneamente Máximo 4 bloques de color simultaneamente Máximo 5 bloques de color simultaneamente
Apriltag Formato 16H5 Formato 25H9 Formato 36H11 (valor por defecto) -- --
Line Máximo 1 segmento de línea simultaneamente (valor por defecto) Máximo 2 segmentos de línea simultaneamente Máximo 3 segmentos de línea simultaneamente Máximo 4 segmentos de línea simultaneamente Máximo 5 segmentos de línea simultaneamente

Acciona el joystick para acceder a la página de configuración de cada algoritmo y realizar los ajustes:

Configurar el modo de funcionamiento del algoritmo

Configurar los parámetros del algoritmo

Algunos algoritmos se pueden parametrizar según sea necesario. Los parámetros del algoritmo se configuran en «conjuntos» de 5 parámetros. Estos son los algoritmos y sus parámetros.

Algoritmo Parámetro 1 Parámetro 2 Parámetro 3 Parámetro 4 Parámetro 5
Color Centro de la coordenada horizontal de la región reconocida Centro de la coordenada vertical de la región reconocida Ancho de la región reconocida Alto de la región reconocida Ninguno
Blob Ninguno Ninguno Ancho mínimo del bloque de color objetivo Alto mínimo del bloque de color objetivo Color del bloque de color objetivo
Face Ninguno Ninguno Ninguno Ninguno Aprender una cara o borrar los datos faciales
Learning Ninguno Ninguno Ninguno Ninguno Aprender el objeto o borrar los datos de los objetos

Nota:

Los algoritmos Color y Blob admiten múltiples conjuntos de parámetros. En el proceso de configuración de parámetros, se recomienda iniciar estableciendo el número de conjuntos de parámetros, cuyo valor predeterminado es 1 conjunto. Posteriormente, se debe especificar el ID de cada conjunto de parámetros.

Configurar los parámetros del algoritmo

Comprobar el recuento de resultados

Previamente a la obtención de los datos del resultado, es imperativo adquirir y comprobar el número de resultados devueltos por el algoritmo. En el caso de que el número sea mayor que 0, se puede inferir que el algoritmo ha detectado o reconocido el objeto en cuestión, y que los datos del resultado en el registro se han actualizado, convirtiéndose en válidos. En el caso de que el recuento sea 0, la adquisición de los datos del resultado del registro en ese momento carece de sentido.

Al recibir una instrucción de adquisición de resultados del controlador principal, Sentry2 captura un fotograma de imagen nuevo, lo procesa y, posteriormente, actualiza los datos de los resultados. Por lo tanto, existe un tiempo de espera, el cual depende principalmente de la velocidad de ejecución del algoritmo en uso.

Comprobar el recuento de resultados

Adquirir datos de los resultados

El algoritmo en cuestión organiza los datos resultantes en grupos, donde cada grupo representa un único resultado. En el ámbito de la inteligencia artificial y el procesamiento de datos, ciertos algoritmos poseen la capacidad de detectar o reconocer múltiples objetos de manera simultánea. Como resultado de este proceso, se genera una serie de grupos de datos de resultados, cada uno de ellos identificado con un identificador único de resultado. En el momento de la adquisición de los datos, es preciso especificar el identificador de resultado.

Cada conjunto de datos de resultados contiene cinco valores de retorno, cuyo significado varía en función de los distintos algoritmos, como se muestra en la siguiente tabla:

Algoritmo Valor de retorno 1 Valor de retorno 2 Valor de retorno 3 Valor de retorno 4 Valor de retorno 5
Color Valor del componente rojo R (rango 0-255) Valor del componente verde G (rango 0-255) Valor del componente azul B (rango 0-255) Ninguno Etiqueta de clasificación de color
Blob Coordenada horizontal del centro del bloque de color Coordenada vertical del centro del bloque de color Ancho del bloque de color Alto del bloque de color Etiqueta de clasificación de color
Apriltag Coordenada horizontal del centro de la tarjeta Coordenada vertical del centro de la tarjeta Ancho de la tarjeta Alto de la tarjeta Etiqueta de clasificación de la tarjeta
Line Coordenada horizontal del extremo superior de la línea Coordenada vertical del extremo superior de la línea Coordenada horizontal del extremo inferior de la línea Coordenada vertical del extremo inferior de la línea Ángulo de inclinación del segmento de línea
Learning Valor fijado Valor fijado Valor fijado Valor fijado Etiqueta de clasificación del objeto
Card Coordenada horizontal del centro de la tarjeta Coordenada vertical del centro de la tarjeta Ancho de la tarjeta Alto de la tarjeta Etiqueta de clasificación de la tarjeta
Face Coordenada horizontal del centro de la cara Coordenada vertical del centro de la cara Ancho de la cara Alto de la cara Etiqueta de clasificación de la cara
20Class Coordenada horizontal del centro del objeto Coordenada vertical del centro del objeto Ancho del objeto Alto del objeto Etiqueta de clasificación del objeto
QrCode Coordenada horizontal del centro del código QR Coordenada vertical del centro del código QR Ancho del código QR Alto del código QR Recuento de grupos de datos de resultados
Motion Coordenada horizontal del centro del objeto Coordenada vertical del centro del objeto Valor fijado Valor fijado Ninguno

Nota:

  • En el proceso de adquisición de datos de resultados, se requiere la especificación del identificador del resultado siendo 1 el valor predeterminado asignado.

Adquirir datos de los resultados

Procesar datos de los resultados

Una vez que el controlador principal obtiene los datos de los resultados, tiene la capacidad de controlar otros periféricos, tales como un automóvil o un brazo robótico, con el propósito de completar las tareas asociadas.

Valor de retorno Significado
Coordenada horizontal (X) del centro Indica la posición horizontal del objeto, en un rango de 0 a 100. X=50 indica que el objeto se encuentra en el centro horizontal, X<50 indica que el objeto se encuentra en la zona izquierda y X>50 indica que el objeto se encuentra en la zona derecha.
Coordenada vertical (Y) del centro Indica la posición vertical del objeto, en un rango de 0 a 100. Y=50 indica que el objeto se encuentra en el centro vertical, Y<50 indica que el objeto se encuentra en la zona superior y Y>50 indica que el objeto se encuentra en la zona inferior.
Ancho (W) del objeto A la misma distancia, cuanto más ancho es el objeto, mayor es el valor W. Cuando el mismo objeto se encuentra en diferentes posiciones, cuanto más cercana es la distancia, mayor es el valor W. Por lo tanto, el valor W se puede utilizar para calcular la distancia aproximada entre Sentry2 y el objeto.
Alto (H) del objeto A la misma distancia, cuanto más alto es el objeto, mayor es el valor H. Cuando el mismo objeto se encuentra en diferentes posiciones, cuanto más cercana es la distancia, mayor es el valor H. Por lo tanto, el valor H se puede utilizar para calcular la distancia aproximada entre Sentry2 y el objeto.
Etiqueta de clasificación (L) En virtud del valor L, el objeto en cuestión es susceptible de ser recuperado de la tabla de clasificación del algoritmo pertinente. En el caso del algoritmo Color, la etiqueta 3 representa el color rojo. Por su parte, en el algoritmo Card, la etiqueta 1 representa la palabra "Forward".

Los valores de retorno de los algoritmos Color, Line y QrCode tienen significados diferentes. Por favor, procura procesar la información de acuerdo con las necesidades reales que se presenten.

Programación en MakeCode

En el presente apartado se aborda la metodología para la utilización de la biblioteca de controladores gráficos en el entorno de programación MakeCode.

Importar la biblioteca de controladores

AITosee ha creado un repositorio en github que se puede añadir como una extensión a MakeCode:

Paso 1. Abre e identificate en Microsoft MakeCode para micro:bit
Paso 2. Haz clic en el símbolo "+ \(\rightarrow\) Nuevo Proyecto" para crear un nuevo proyecto
Paso 3. Haz clic en "Extensiones" en la parte de abajo del menú de bloques o en la entrada "Extensiones" del menú que se despliega con el icono del engranaje. En el campo de búsqueda copia y pega el enlace siguiente:

https://github.com/aitosee/pxt-sentry2

URL del repositorio a buscar

Paso 4. Haz clic en la lupa o pulsa "Enter" y en la pantalla aparecerá el plugin de la extensión. Haz clic en el recuadro del plugin:

Plugin listo para importar

Aviso:

Si has hecho clic sobre el botón "Importar archivo" se mostrará la siguiente pantalla, en la que se informa que no se ha seleccionado ningín archivo. Si haces clic en el botón verde "¡Adelante!" volverás a la pantalla principal sin que haya ocurrido nada.

Si haces clic sobre el botón "Importar archivo"

Paso 5. Si la importación es correcta en el IDE de MakeCode debe aparecer la opción "Sentry2 Vision Sensor".

Extensión para Sentry2 añadida

Introducción a los bloque de programación

En la presente sección se aborda la descripción del empleo de cada uno de los bloques de código de la extensión añadida. El uso de bloques de código en otras bibliotecas de controladores gráficos es similar.

Configurar el modo de comunicación

Para interactuar con el controlador principal, configura el modo de comunicación correcto. En primer lugar, cambia Sentry2 al modo de comunicación requerido, asegúrate de que tanto este como el controlador principal estén correctamente conectados y, a continuación, llama al módulo de inicialización en el programa.

  • I2C:

Bloque

  • UART 9600(utilizando el puerto UART por defecto):

Bloque

  • UART 57600 (utilizando el puerto IO redirigido):

Bloque

Configurar el modo de balance de blancos

Sentry2 admite 4 modos en el menú desplegable: Auto, Lock, WhiteLight, y YellowLight (Auto, Bloqueo, Luz blanca y Luz amarilla). Consulta la sección Balance de blancos para obtener más información.

  • Auto: este es el modo predeterminado, adecuado para situaciones generales y que puede satisfacer los requisitos de la mayoría de las aplicaciones.
  • Lock: cuando se configura en este modo, Sentry2 debe apuntar hacia una superficie plana blanca para la calibración del color mientras se ejecuta el bloque de programación. Además, la calibración debe volver a realizarse después de reiniciar el dispositivo.
  • WhiteLight: adecuado para entornos con iluminación blanca.
  • YellowLight: adecuado para entornos con iluminación amarilla.

Bloque

Ejecución/parada del algoritmo

Ejecutar y detener algoritmos es muy práctico: basta con llamar al siguiente bloque y seleccionar el algoritmo. Aunque se pueden ejecutar varios algoritmos en paralelo en condiciones específicas, su ejecución paralela provocará una disminución de la tasa de reconocimiento. Si es necesario llamar a varios algoritmos de forma secuencial, se recomienda desactivar el algoritmo actual antes de activar el nuevo.

Bloque

Configurar los parámetros del algoritmo

Algunos algoritmos pueden parametrizarse según los requisitos de la aplicación, incluidos los algoritmos Color, Blob, Learning y Face.

(1) Color
Este algoritmo puede configurar hasta 25 regiones de reconocimiento, y se pueden especificar las coordenadas centrales y el tamaño de cada región de reconocimiento.
* Configuración del recuento de conjuntos de parámetros El rango del recuento de conjuntos de parámetros es de 1 a 25, y el valor predeterminado es 1.

Bloque

  • Establecer coordenadas centrales
    Los rangos de valores de los parámetros x-coord (coordenada horizontal) e y-coord (coordenada vertical) van de 0 a 100. x-coord = 0 indica que se encuentra en el extremo izquierdo de la imagen y x-coord = 100 indica que se encuentra en el extremo derecho. y-coord = 0 indica que se encuentra en la parte superior de la imagen e y-coord = 100 indica que se encuentra en la parte inferior. (50, 50) indica el centro de la imagen.

Bloque

  • Establecer el tamaño de la región de reconocimiento
    El ancho y el alto oscilan entre 0 y 100, siendo 0 el valor mínimo y 100 el máximo. Esto significa que el ancho y el alto de la región de detección están en proporción con la coordenada horizontal o vertical completa. Por ejemplo, un valor de ancho = 10 representa el ancho que ocupa el 10 % de la coordenada horizontal completa, y un valor de alto = 20 representa el alto que ocupa el 20 % de la coordenada vertical completa.
    Cabe señalar que, dado que se utilizan coordenadas porcentuales y la relación entre la anchura y la altura de la pantalla es de 4:3, para representar una región de reconocimiento cuadrada, la relación entre la anchura y la altura de dicha región debe ser de 3:4. Por ejemplo, si la anchura es 12, la altura debe ser (12 × 4) / 3 = 16. Cuando la región de reconocimiento es relativamente grande, la velocidad de procesamiento del algoritmo disminuye.

Bloque

A continuación se dan algunos ejemplos de configuración de estos parámetros:

- Reconocimiento de región cuadrada en el centro exacto

Bloque

- Reconocimiento de región cuadrada en la esquina superior izquierda

Bloque

- Reconocimiento de región rectangular en la esquina inferior derecha

Bloque

  • Establecer paramset ID
    El ID del conjunto de parámetros indica el número de serie de este conjunto de parámetros. El ID no debe exceder el número de conjuntos de parámetros especificado.

(2) Blob
Este algoritmo puede detectar manchas, zonas o bloques de uno o varios colores. Al especificar los parámetros adecuados de anchura y altura mínimas, se pueden filtrar las pequeñas manchas de color que interfieren en el fondo.

  • Configuración del recuento de conjuntos de parámetros
    El rango del recuento de conjuntos de parámetros es de 1 a 6, y el valor predeterminado es 1.

Bloque

  • Configuración del tamaño del blob
    El ancho mínimo y la altura mínima oscilan entre 0 y 100, donde 0 es el valor más pequeño y 100 el más grande. Aunque el color de un blob cumpla los requisitos, el algoritmo no lo determinará como un objetivo válido si su ancho o altura no superan el valor mínimo especificado.

  • Configuración del color objetivo
    Admite la detección simultánea de bloques de color de uno o varios colores entre los seis.

    - Detectar blobs de un solo color
    

Bloque

- Detectar blobs de multiples colores

Bloque

(3) Aprendizaje/Caras
Sentry2 puede aprender hasta 15 objetos o rostros. El aprendizaje y la eliminación de datos de objetos o rostros se pueden realizar mediante el botón de navegación, mientras que las operaciones para un ID específico solo se pueden realizar mediante comandos. El aprendizaje de un rostro solo se ejecutará después de que se haya detectado, mientras que la eliminación de datos de objetos/rostros se puede ejecutar en cualquier momento.

  • Numeración de parámetros: el ID especificado.
  • Escribir 100 en param5: aprender el objeto/rostro y asignar el ID especificado.
  • Escribir 0 en param5: eliminar los datos del objeto/rostro correspondientes al ID especificado.

Bloque
Aprender un objeto y asignarle el ID 2

Bloque
Borrar el rostro con ID 6

Comprobación del recuento de resultados

Antes de obtener los datos del resultado, es imprescindible determinar si se han detectado o reconocido los objetos objetivo; de lo contrario, el controlador principal no podrá obtener datos válidos. Cada vez que Sentry2 responde a este comando, espera a que se procese una nueva imagen antes de devolver los resultados del reconocimiento. Por lo tanto, existe un cierto retraso.

Algunos algoritmos admiten el reconocimiento o la detección simultánea de varios objetos objetivo.

Bloque

Adquirir datos de resultados

La biblioteca de controladores proporciona múltiples bloques para obtener resultados de reconocimiento de diferentes algoritmos, incluidos un bloque genérico capaz de obtener coordenadas, tamaño y etiquetas de clasificación, así como bloques dedicados para algoritmos especiales. Los bloques relacionados con los resultados se clasifican en dos tipos: «obtención de valores de retorno» y «juicio condicional», lo que permite seleccionar de forma flexible los bloques necesarios según las necesidades específicas.

  • Bloque genérico de obtención de resultados.

Bloque

  • Bloques de adquisición de valores de retorno

Bloques

  • Bloques para sentencias condicionales

Bloques

Ejemplos

Programa típo

Programa típo

Color

Configuración comentada de los bloques "al iniciar" y "para siempre":

Ej_Color_Sentry2: bloques "al iniciar" y "para siempre"

Función "boton_A" comentada:

Ej_Color_Sentry2: función "boton_A"

Función "boton_B" comentada:

Ej_Color_Sentry2: función "boton_B"

Función "Resultados" comentada:

Ej_Color_Sentry2: función "Resultados"

En la imagen siguiente vemos el programa completo con todas las funciones contraidas:

Ej_Color_Sentry2

Blob

Información importante:

Las comunicaciones serie las puedes establecer mediante programas como Whippy Term o PuTTY o cualquier otro terminal serie de tu agrado.

Bloque "al iniciar" y funciones "UART" e "I2C":

Ej_Blob_Sentry2

Bloque "para siempre":

Ej_Blob_Sentry2

Función "Proceso tecla_A":

Ej_Blob_Sentry2

Función "Proceso tecla_B":

Ej_Blob_Sentry2

En la imagen siguiente vemos el programa completo con todas las funciones contraidas:

Ej_Blob_Sentry2

Apriltag\(^*\)

En la imagen siguiente vemos el programa completo con todas las funciones contraidas:

Ej_Apriltag_Sentry2

Line

Learning\(^*\)

Card\(^*\)

En la imagen siguiente vemos el programa completo con unas funciones muy básicas definidas:

Ej_Card_Sentry2

Face\(^*\)

20Class\(^*\)