Sensor de visión de IA#

Introducción#

El sensor de visión IQ AI puede detectar y rastrear objetos, colores e ID de AprilTag. Esto permite al robot analizar su entorno, seguir objetos y reaccionar en función de los datos visuales detectados.

Para los ejemplos a continuación, el sensor de visión IQ AI configurado se llamará ai_vision_1, y los objetos de firma de color configurados, como RED_BOX, se utilizarán en todos los ejemplos posteriores a lo largo de esta documentación de API cuando se haga referencia a los AiVision clase AiVision.

A continuación se muestra una lista de todos los métodos:

Getters — Obtenga datos del sensor de visión IQ AI.

  • take_snapshot — Captura datos para una firma específica.

  • installed — Si el sensor de visión IQ AI está conectado al cerebro IQ (2ª generación).

Propiedades: datos de objetos devueltos de take_snapshot.

  • .exists — Si el objeto existe en la detección actual.

  • .width — Ancho del objeto detectado.

  • .height — Altura del objeto detectado.

  • .centerX — Posición X del centro del objeto.

  • .centerY — Posición Y del centro del objeto.

  • .angle — Orientación del código de color o ID de AprilTag.

  • .originX — Posición X de la esquina superior izquierda del objeto.

  • .originY — Posición Y de la esquina superior izquierda del objeto.

  • .id — Clasificación o ID de etiqueta del objeto.

  • .score — Puntuación de confianza para las clasificaciones de IA.

Constructores — Inicializar y configurar manualmente los sensores.

Getters#

take_snapshot#

take_snapshot filtra los datos del marco del sensor de visión IQ AI en una sola firma (una descripción guardada de algo que el sensor puede reconocer, como un objeto preentrenado, un ID de AprilTag o una firma de color o código de color configurado) y devuelve una tupla.

Las firmas de color y los códigos de color deben configurarse primero en Vision Utility antes de que puedan usarse con este método.

La tupla almacena objetos ordenados de mayor a menor por ancho, comenzando en el índice 0. Se puede acceder a las propiedades de cada objeto utilizando su índice. Se devuelve una tupla vacía si no se detectan objetos coincidentes.

Usage:
ai_vision_1.take_snapshot(SIGNATURE)

Parámetros

Descripción

SIGNATURE

Filtra el conjunto de datos para incluir solo los datos de la firma dada. Las firmas disponibles

  • son: Firmas de color o códigos de color: el nombre del sensor de visión IQ AI, dos guiones bajos y luego el nombre de la firma de color o el código de color. Por ejemplo: ai_vision_1__RED_BOX.
  • AiVision.ALL_AIOBJS - Todos detectaron Clasificaciones de IA dependiendo del modelo configurado en AI Vision Utility.
  • AiVision.ALL_TAGS - Todos los ID de AprilTag.

count

Opcional. Establece el número máximo de objetos que se pueden devolver de 1 a 24 (predeterminado: 8).

# Move forward if an object is detected
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
    if objects[0].exists:
        drivetrain.drive_for(FORWARD, 50, MM)
    wait(50, MSEC)

Nota: La tupla devuelta se puede ordenar por cualquier propiedad, no solo por el ancho, utilizando la función sorted de Python. Por ejemplo, ordenar por ID de AprilTag:

# Print each detected AprilTag ID in ascending order by ID
while True:
    apriltags = sorted(ai_vision_1.take_snapshot(AiVision.ALL_TAGS), key=id)
    for tag in apriltags:
        print(tag.id)
    wait(1, SECONDS)

O, en su lugar, ordenar por altura:

# Print each detected AprilTag ID in ascending order by height
while True:
    apriltags_by_height = sorted(ai_vision_1.take_snapshot(AiVision.ALL_TAGS), key=lambda tag: tag.height)
    for tag in apriltags_by_height:
        print(tag.height)
    wait(1, SECONDS)

Clasificaciones de IA#

El sensor de visión IQ AI puede detectar diferentes objetos bajo ciertas clasificaciones de IA. Dependiendo del modelo de clasificación de IA seleccionado al configurar el sensor de visión de IA en la ventana Dispositivos, se detectarán diferentes objetos. Los modelos disponibles actualmente son:

Objetos de clase

Número de identificación

Clasificación de IA

0

ClassroomElements.BLUE_BALL

1

ClassroomElements.GREEN_BALL

2

ClassroomElements.RED_BALL

3

ClassroomElements.BLUE_RING

4

ClassroomElements.GREEN_RING

5

ClassroomElements.RED_RING

6

ClassroomElements.BLUE_CUBE

7

ClassroomElements.GREEN_CUBE

8

ClassroomElements.RED_CUBE

VEX IQ Robotics Competition Mix & Match

Número de identificación

Clasificación de IA

0

GameElementsMixAndMatch.BEAM

1

GameElementsMixAndMatch.BLUE_PIN

2

GameElementsMixAndMatch.RED_PIN

3

GameElementsMixAndMatch.ORANGE_PIN

Subir de nivel en la competición de robótica VEX IQ

Número de identificación

Clasificación de IA

0

GameElementsLevelUp.BLUE_BEANBAG

1

GameElementsLevelUp.RED_BEANBAG

2

GameElementsLevelUp.YELLOW_BEANBAG

Firmas de color#

Una firma de color es un color único que el sensor de visión IQ AI puede reconocer. Estas firmas permiten que el sensor de visión IQ AI detecte y rastree objetos en función de su color. Una vez que se configura una firma de color, el sensor puede identificar objetos con ese color específico en su campo de visión. Las firmas de color se utilizan con take_snapshot para procesar y detectar objetos de color en tiempo real.

Para utilizar una Firma de Color configurada en un proyecto, su nombre debe ser el nombre del sensor, dos guiones bajos y luego el nombre de la Firma de Color. Por ejemplo: ai_vision_1__RED_BOX.

# Display if any objects match the RED_BOX signature
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_row(1)
    # Change to any configured Color Signature
    red_box = ai_vision_1.take_snapshot(ai_vision_1__RED_BOX)
    if red_box[0].exists:
        brain.screen.print("Color detected!")
        wait(100, MSEC)

Códigos de color#

Un código de color es un patrón estructurado formado por firmas de color dispuestas en un orden específico. Estos códigos permiten que el sensor de visión IQ AI reconozca patrones predefinidos de colores. Los códigos de color son útiles para identificar objetos complejos o crear marcadores únicos para la navegación autónoma.

Para utilizar un código de color configurado en un proyecto, su nombre debe ser el nombre del sensor, dos guiones bajos y luego el nombre del código de color. Por ejemplo: ai_vision_1__BOX_CODE.

# Display if any objects match the BOX_CODE code
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_row(1)
    # Change to any configured Color Code
    box_code = ai_vision_1.take_snapshot(ai_vision_1__BOX_CODE)
    if box_code[0].exists:
        brain.screen.print("Code detected!")
        wait(100, MSEC)

installed#

installed devuelve un booleano que indica si el sensor de visión IQ AI está conectado actualmente al cerebro IQ (2ª generación).

  • True : el sensor de visión IQ AI está conectado al cerebro IQ (2 .ª generación).

  • False — El sensor de visión IQ AI no está conectado al cerebro IQ (2ª generación).

Usage:
ai_vision_1.installed()

Parámetros

Descripción

Este método no tiene parámetros.

# Display a message if the AI Vision Sensor is connected
if ai_vision_1.installed():
    brain.screen.print("Installed!")

Propiedades#

Hay diez propiedades que se incluyen con cada objeto almacenado en una tupla después de usar take_snapshot.

Todos los valores de propiedad, excepto .id y .score, describen la posición y el tamaño del objeto detectado en la vista del sensor de visión AI de IQ en el momento en que se utilizó take_snapshot. Estos valores se miden en píxeles, en función de la resolución de 320 por 240 píxeles del sensor.

.exists#

.exists devuelve un booleano que indica si el índice existe en la tupla o no.

  • True : el índice existe.

  • False — El índice no existe.

# Check if at least two objects are detected
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[1].exists:
            brain.screen.print("At least 2")

        else:
            brain.screen.print("Less than 2")
    wait(50, MSEC)

.width#

.width devuelve el ancho del objeto detectado en píxeles, que es un número entero entre 1 y 320.

# Approach an object until it's at least 100 pixels wide
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].width < 100:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()
    wait(50, MSEC)

.height#

.height devuelve la altura del objeto detectado en píxeles, que es un número entero entre 1 y 240.

# Approach an object until it's at least 90 pixels tall
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].height < 90:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()
    wait(50, MSEC)

.centerX#

.centerX devuelve la coordenada x del centro del objeto detectado en píxeles, que es un entero entre 0 y 320.

# Turn until an object is directly in front of the sensor
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)

while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if 140 < objects[0].centerX < 180:
            drivetrain.stop()
    wait(10,MSEC)

.centerY#

.centerY devuelve la coordenada y del centro del objeto detectado en píxeles, que es un número entero entre 0 y 240.

# Approach an object until the object's center is
# high enough in the field of view
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].centerY < 150:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()
    wait(50, MSEC)

.angle#

.angle devuelve la orientación del código de color detectado o AprilTag ID en grados, que es un número entero entre 0 y 359.

# Turn left or right depending on how a
# configured Color Code is rotated
while True:
    box_code = ai_vision_1.take_snapshot(ai_vision_1__BOX_CODE)

    if box_code[0].exists:
        if 50 < box_code[0].angle < 100:
            drivetrain.turn(RIGHT)

        elif 270 < box_code[0].angle < 330:
            drivetrain.turn(LEFT)

        else:
            drivetrain.stop()
    else:
        drivetrain.stop()
    wait(50, MSEC)

.originX#

.originX devuelve la coordenada x de la esquina superior izquierda del cuadro delimitador del objeto detectado en píxeles, que es un número entero entre 0 y 320.

# Display if an object is to the left or the right
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1,1)

    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].originX < 120:
            brain.screen.print("To the left!")
        else:
            brain.screen.print("To the right!")
    else:
        brain.screen.print("No objects")
    wait(100, MSEC)

.originY#

.originY devuelve la coordenada y de la esquina superior izquierda del cuadro delimitador del objeto detectado en píxeles, que es un número entero entre 0 y 240.

# Display if an object is close or far
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1,1)

    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].originY < 110:
            brain.screen.print("Close")
        else:
            brain.screen.print("Far")

.id#

.id devuelve el ID de la Clasificación de IA detectada o el ID de AprilTag como un número entero. Las clasificaciones de IA dependen del modelo que esté configurado en AI Vision Utility.

Para un ID de AprilTag, la propiedad .id representa el número de ID de AprilTag detectado en el rango de 0 a 36. Para una Clasificación de IA, la propiedad .id corresponde al ID predefinido en la sección Clasificaciones de IA.

# Move forward when AprilTag ID 1 is detected
while True:
    apriltags = ai_vision_1.take_snapshot(AiVision.ALL_TAGS)

    if apriltags[0].exists:
        if apriltags[0].id == 1:
            robot.drive(FORWARD)
    else:
        drivetrain.stop()

    wait(50, MSEC)

.score#

.score devuelve la puntuación de confianza de la Clasificación de IA detectada como un número entero entre 1 y 100.

Una puntuación más baja significa que el sensor tiene menos confianza en el objeto detectado, mientras que una puntuación más alta significa que el sensor tiene más confianza.

# Display if a score is confident
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    if objects[0].exists:
        if objects[0].score > 95:
            brain.screen.print("Confident")
    else:
        brain.screen.print("Not confident")

    wait(50, MSEC)

Constructores#

Los constructores se utilizan para crear manualmente objetos AiVision, Colordesc y Codedesc, que son necesarios para configurar el sensor de visión IQ AI fuera de VEXcode.

AI Vision Sensor#

AiVision crea un sensor de visión IQ AI.

Uso

Vision(port, sigs)

Parámetros

Descripción

port

A qué puerto inteligente está conectado el sensor de visión IQ AI, de 1 a 12.

sigs

Opcional. El nombre de una o más firmas:

Ejemplo

ai_vision_1 = AiVision(Ports.PORT1, AiVision.ALL_AIOBJS)

# Move forward if an object is detected
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
    if objects[0].exists:
        drivetrain.drive_for(FORWARD, 50, MM)
    wait(50, MSEC)

Color Signature#

Colordesc crea una firma de color. Se pueden almacenar hasta siete firmas de color diferentes en un sensor de visión IQ AI a la vez.

Uso:

Colordesc(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)

Parámetro

Descripción

index

Índice Colordesc objeto Colordesc, del 1 al 7. Nota: La creación de Colordesc objetos Colordesc con el mismo número de índice hará que el segundo objeto creado anule al primero.

uMin

El valor de uMin en Vision Utility.

uMax

El valor de uMax en Vision Utility.

uMean

El valor de uMean en Vision Utility.

vMin

El valor de vMin en Vision Utility.

vMax

El valor de vMax en Vision Utility.

vMean

El valor de vMean en Vision Utility.

rgb

El valor de rgb en Vision Utility.

type

El valor de type en Vision Utility.

Para obtener los valores para crear una firma de color, vaya a Vision Utility. Una vez configurada una Firma de color, copie los valores de los parámetros de la ventana Configuración.

Ejemplo

# Create a new Signature RED_BOX with the Colordesc class
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX Signature.
ai_vision_1 = AiVision(Ports.PORT1, 100, RED_BOX)

# Move forward if a red object is detected
while True:
    red_object = ai_vision_1.take_snapshot(RED_BOX)
    if red_object[0].exists:
        drivetrain.drive_for(FORWARD, 10, MM)
    wait(5, MSEC)

Color Code#

Codedesc crea un código de color. Requiere al menos dos firmas de color ya definidas para ser utilizadas. Se pueden almacenar hasta ocho códigos de color diferentes en un sensor de visión a la vez.

Uso:

Codedesc(sig1, sig2, sig3, sig4, sig5)

Parámetro

Descripción

sig1

Una Firma de color creada previamente.

sig2

Una Firma de color creada previamente.

sig3

Opcional. Una Firma de color creada previamente.

sig4

Opcional. Una Firma de color creada previamente.

sig5

Opcional. Una Firma de color creada previamente.

Ejemplo

# Create two new Signatures for a red and blue box
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Colordesc(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create a Color Code for a red box to the left of a blue box
RED_BLUE = Codedesc(RED_BOX, BLUE_BOX)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX and BLUE_BOX Signatures.
ai_vision_1 = AiVision(Ports.PORT1, RED_BOX, BLUE_BOX)

# Display a message if Color Code is detected
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_row(1)
    # Change to any configured Color Code
    box_code = ai_vision_1.take_snapshot(RED_BLUE)
    if box_code[0].exists:
        brain.screen.print("Code detected!")
        wait(100, MSEC)