Visión#
Introducción#
El dron VEX AIR cuenta con dos sensores de visión que detectan y rastrean los identificadores AprilTag. Esto le permite analizar su entorno, seguir objetos y reaccionar según los datos visuales detectados.
A continuación se muestra una lista de todos los bloques disponibles:
Acciones: Controlar la alimentación de visión y capturar datos de objetos.
obtener datos del objeto — Captura datos para los ID de AprilTag.
Configuración: ajusta a qué objetos detectados se accede.
establecer elemento de objeto de visión — Selecciona un objeto específico de la lista de objetos detectados.
Valores: recupera la presencia, clasificación y propiedades de los objetos.
Existe objeto de visión — Informa si se detecta un objeto.
El objeto Vision es AprilTag ID — Comprueba si un AprilTag ID detectado coincide con un ID específico.
Recuento de objetos de visión — Informa el número de objetos detectados.
Propiedad del objeto de visión — Recupera detalles como:
centerX & centerY — Coordenadas de la posición central en la vista del sensor.
bearing — Ángulo del objeto en relación con el sensor de visión frontal o los grados necesarios para que el dron se oriente hacia el objeto.
rotación — Orientación del objeto.
originX y originY — Coordenadas de la posición de la esquina superior izquierda en la vista del sensor.
id — Número de identificación de un ID de AprilTag.
Comportamiento#
obtener datos del objeto#
El bloque de pila obtener datos de objeto filtra los datos del fotograma del sensor de visión. Los sensores de visión pueden detectar los ID de AprilTag.
El conjunto de datos almacena objetos ordenados de mayor a menor ancho, comenzando en el índice 0. Se puede acceder a las propiedades de cada objeto mediante el bloque Propiedad del objeto Vision. Se informa de un conjunto de datos vacío si no se detectan objetos coincidentes.
obtener datos de [todos los AprilTags v] desde Vision cámara [adelante v]
Parámetro |
Descripción |
|---|---|
firma |
Filtra el conjunto de datos para incluir únicamente los datos de la firma especificada. La firma disponible es todas las etiquetas AprilTags. |
cámara |
El sensor de visión para recuperar datos, ya sea hacia adelante o hacia abajo. |
Ejemplo
cuando inicie
[Climb upward when an AprilTag ID is detected.]
despegar a [300] [mm v] ▶
por siempre
obtener datos de [todos los AprilTags v] desde Vision cámara [adelante v]
si <¿existe objeto de Vision?> entonces
ascender [arriba v] por [200] [mm v] ▶
Ajustes#
Establecer elemento del objeto Visión#
El bloque de pila establecer elemento de objeto Vision establece qué elemento del conjunto de datos se debe utilizar.
establecer elemento de objeto de Vision a [1]
Parámetros |
Descripción |
|---|---|
artículo |
El número del elemento en el conjunto de datos a utilizar. |
Ejemplo
cuando inicie
[Display the smallest-appearing AprilTag ID.]
por siempre
obtener datos de [todos los AprilTags v] desde Vision cámara [adelante v]
limpiar consola
si <¿existe objeto de Vision?> entonces
establecer elemento de objeto de Vision a (Cantidad de objetos de Vision)
imprimir (Objeto de Vision [id v]) en consola ▶
Valores#
Existe un objeto de visión#
El bloque booleano Vision object exists informa si el sensor de visión especificado detecta actualmente algún objeto.
Verdadero — El sensor de visión especificado detecta un objeto.
Falso — El sensor de visión especificado no detecta ningún objeto.
<¿existe objeto de Vision?>
Parámetro |
Descripción |
|---|---|
Este bloque no tiene parámetros. |
Ejemplo
cuando inicie
[Climb upward when an AprilTag ID is detected.]
despegar a [300] [mm v] ▶
por siempre
obtener datos de [todos los AprilTags v] desde Vision cámara [adelante v]
si <¿existe objeto de Vision?> entonces
ascender [arriba v] por [200] [mm v] ▶
El objeto de visión es AprilTag ID#
El bloque booleano Vision object is AprilTag ID informa si el AprilTag ID es un número de identificación específico.
Verdadero — El ID de AprilTag es el número.
Falso — El ID de AprilTag no es el número.
<Vision object is AprilTag ID [1]>
Parámetros |
Descripción |
|---|---|
Número de identificación de AprilTag |
El número a comparar con el número de identificación AprilTag detectado, que va de 0 a 37. |
Ejemplo
cuando inicie
[Display when the target AprilTag ID is detected.]
por siempre
obtener datos de [todos los AprilTags v] desde Vision cámara [adelante v]
limpiar consola
si <¿existe objeto de Vision?> entonces
si <Vision object is AprilTag ID [21]> entonces
imprimir [Target found!] en consola ▶
fin
Recuento de objetos de visión#
El bloque de informe Recuento de objetos de visión informa la cantidad de objetos detectados en el conjunto de datos como un número entero.
(Cantidad de objetos de Vision)
Parámetros |
Descripción |
|---|---|
Este bloque no tiene parámetros. |
Ejemplo
cuando inicie
[Display how many AprilTag IDs are detected.]
por siempre
obtener datos de [todos los AprilTags v] desde Vision cámara [adelante v]
limpiar consola
imprimir (Cantidad de objetos de Vision) en consola ▶
esperar [0.2] segundos
Propiedad del objeto de visión#
Hay varias propiedades que se incluyen con cada objeto (que se muestra a continuación) almacenadas después de que se utiliza el bloque obtener datos del objeto.
(Objeto de Vision [ancho v])
Todos los valores de propiedad, excepto id, describen la posición, el tamaño, la orientación o el rumbo del objeto detectado en el momento en que se utilizó el bloque obtener datos del objeto. Estos valores se miden en píxeles o grados. Cada sensor de visión tiene una resolución diferente:
Orientado hacia adelante: 640 x 480 píxeles
Mirando hacia abajo: 640 x 400 píxeles
Parámetro |
Descripción |
|---|---|
propiedad |
¿Qué propiedad del objeto detectado utilizar?: |
ancho#
La propiedad width informa el ancho del objeto detectado en píxeles como un número entero del 1 al 640.
(Objeto de Vision [ancho v])
Ejemplo
cuando inicie
[Show if the AprilTag ID appears large or small.]
por siempre
obtener datos de [todos los AprilTags v] desde Vision cámara [adelante v]
limpiar consola
si <¿existe objeto de Vision?> entonces
si <(Objeto de Vision [ancho v]) [math_greater_than v] [100]> entonces
imprimir [Large] en consola ▶
si no
imprimir [Small] en consola ▶
fin
fin
esperar [0.2] segundos
altura#
La propiedad altura informa la altura del objeto detectado en píxeles como un número entero del 1 al 480.
(Objeto de Vision [alto v])
Ejemplo
cuando inicie
[Show if the AprilTag ID appears large or small.]
por siempre
obtener datos de [todos los AprilTags v] desde Vision cámara [adelante v]
limpiar consola
si <¿existe objeto de Vision?> entonces
si <(Objeto de Vision [alto v]) [math_greater_than v] [100]> entonces
imprimir [Large] en consola ▶
si no
imprimir [Small] en consola ▶
fin
fin
esperar [0.2] segundos
centroX#
La propiedad centerX informa la coordenada x del centro del objeto detectado en píxeles como un número entero del 1 al 640.
(Objeto de Vision [centroX v])
Ejemplo
cuando inicie
[Show if an AprilTag ID is to the left or the right of the camera.]
por siempre
obtener datos de [todos los AprilTags v] desde Vision cámara [adelante v]
limpiar consola
si <¿existe objeto de Vision?> entonces
si <(Objeto de Vision [centroX v]) [math_less_than v] [320]> entonces
imprimir [To the left] en consola ▶
si no
imprimir [To the right] en consola ▶
fin
fin
esperar [0.2] segundos
centroY#
La propiedad centerY informa la coordenada y del centro del objeto detectado en píxeles como un número entero del 1 al 480.
(Objeto de Vision [centroY v])
Ejemplo
cuando inicie
[Take off and attempt to align the drone with an AprilTag ID on the wall.]
[Adjust the takeoff height to observe different results.]
despegar a [800] [mm v] ▶
obtener datos de [todos los AprilTags v] desde Vision cámara [adelante v]
si <¿existe objeto de Vision?> entonces
si <(Objeto de Vision [centroY v]) [math_less_than v] [240]> entonces
imprimir [Below the target!] en consola ▶
si no
imprimir [Above the target!] en consola ▶
fin
si no
imprimir [No target found!] en consola ▶
cojinete#
La propiedad rumbo informa un ángulo que indica la posición de un objeto con respecto al dron. El comportamiento depende del sensor de visión utilizado.
Un valor de 0° indica que el centro del objeto y el sensor están alineados. Los valores positivos indican que el objeto está a la derecha, mientras que los negativos indican que está a la izquierda.
Sensor |
Devoluciones |
|---|---|
Hacia abajo |
Grados que debe girar la parte frontal del dron para alinearse con el centro del objeto, de –180º a 180º. |
Adelante |
Grados en los que el objeto se desplaza hacia la izquierda o la derecha del centro del sensor de visión, de –180º a 180º. |
(Objeto de Vision [rumbo v])
Ejemplos
cuando inicie
[Align the front of the drone to an AprilTag ID.]
establecer velocidad de giro a (15)%
despegar a [500] [mm v] ▶
por siempre
obtener datos de [todos los AprilTags v] desde Vision cámara [hacia abajo v]
si <¿existe objeto de Vision?> entonces
si <[-20] [math_less_than v] (Objeto de Vision [rumbo v]) [math_less_than v] [20]> entonces
[Hover once sensor is centered on the AprilTag ID.]
flotar
reproducir sonido [éxito v] ▶
si no, si <(Objeto de Vision [rumbo v]) [math_less_than v] [-21]> entonces
girar [izquierda v]
si no
girar [derecha v]
rotación#
La propiedad rotación informa la orientación del ID AprilTag detectado como un número entero en grados de 1 a 359.
(Objeto de Vision [rotación v])
Ejemplo
cuando inicie
[Turn left or right based on the rotation of an AprilTag ID.]
despegar a [1000] [mm v] ▶
por siempre
obtener datos de [todos los AprilTags v] desde Vision cámara [adelante v]
si <¿existe objeto de Vision?> entonces
si <[240] [math_less_than v] (Objeto de Vision [rotación v]) [math_less_than v] [300]> entonces
girar [izquierda v] por [90] grados ▶
si no, si <[60] [math_less_than v] (Objeto de Vision [rotación v]) [math_less_than v] [120]> entonces
girar [derecha v] por [90] grados ▶
si no
flotar
origenX#
La propiedad originX informa la coordenada x de la esquina superior izquierda del cuadro delimitador del objeto detectado en píxeles como un número entero del 1 al 640.
(Objeto de Vision [origenX v])
Ejemplo
cuando inicie
[Draw lines to the AprilTag ID origin from all corners.]
por siempre
limpiar pantalla
get [all AprilTags v] data from vision [forward v] camera
si <¿existe objeto de Vision?> entonces
dibujar línea [0] [0] (Objeto de Vision [origenX v]) (Objeto de Vision [origenY v]) en pantalla
dibujar línea [0] [480] (Objeto de Vision [origenX v]) (Objeto de Vision [origenY v]) en pantalla
dibujar línea [640] [0] (Objeto de Vision [origenX v]) (Objeto de Vision [origenY v]) en pantalla
dibujar línea [640] [480] (Objeto de Vision [origenX v]) (Objeto de Vision [origenY v]) en pantalla
fin
esperar [0.2] segundos
origenY#
La propiedad originY informa la coordenada y de la esquina superior izquierda del cuadro delimitador del objeto detectado en píxeles como un número entero del 1 al 480.
(Objeto de Vision [origenY v])
Ejemplo
cuando inicie
[Draw lines to the AprilTag ID origin from all corners.]
por siempre
limpiar pantalla
get [all AprilTags v] data from vision [forward v] camera
si <¿existe objeto de Vision?> entonces
dibujar línea [0] [0] (Objeto de Vision [origenX v]) (Objeto de Vision [origenY v]) en pantalla
dibujar línea [0] [480] (Objeto de Vision [origenX v]) (Objeto de Vision [origenY v]) en pantalla
dibujar línea [640] [0] (Objeto de Vision [origenX v]) (Objeto de Vision [origenY v]) en pantalla
dibujar línea [640] [480] (Objeto de Vision [origenX v]) (Objeto de Vision [origenY v]) en pantalla
fin
esperar [0.2] segundos
identificación#
La propiedad id informa el número de identificación del ID de AprilTag detectado como un número entero.
(Objeto de Vision [id v])
Ejemplo
cuando inicie
[Display the detected AprilTag ID.]
por siempre
obtener datos de [todos los AprilTags v] desde Vision cámara [adelante v]
limpiar consola
si <¿existe objeto de Vision?> entonces
imprimir (Objeto de Vision [id v]) en consola ▶
fin
esperar [0.2] segundos