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¶
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:
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".
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 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.
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 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.
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.
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.
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
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:
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.
Paso 5. Si la importación es correcta en el IDE de MakeCode debe aparecer la opción "Sentry2 Vision Sensor".
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:
- UART 9600(utilizando el puerto UART por defecto):
- UART 57600 (utilizando el puerto IO redirigido):
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.
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.
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.
- 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.
- 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.
A continuación se dan algunos ejemplos de configuración de estos parámetros:
- Reconocimiento de región cuadrada en el centro exacto
- Reconocimiento de región cuadrada en la esquina superior izquierda
- Reconocimiento de región rectangular en la esquina inferior derecha
- 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.
-
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
- Detectar blobs de multiples colores
(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.
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.
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.
- Bloques de adquisición de valores de retorno
- Bloques para sentencias condicionales
Ejemplos¶
Programa típo¶
Color¶
Configuración comentada de los bloques "al iniciar" y "para siempre":
Función "boton_A" comentada:
Función "boton_B" comentada:
Función "Resultados" comentada:
En la imagen siguiente vemos el programa completo con todas las funciones contraidas:
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":
Bloque "para siempre":
Función "Proceso tecla_A":
Función "Proceso tecla_B":
En la imagen siguiente vemos el programa completo con todas las funciones contraidas:
Apriltag\(^*\)¶
En la imagen siguiente vemos el programa completo con todas las funciones contraidas:
Line¶
Learning\(^*\)¶
Card\(^*\)¶
En la imagen siguiente vemos el programa completo con unas funciones muy básicas definidas: