Sensor de visión de IA#

Introducción#

La aivision clase aivision se utiliza para controlar y acceder a los datos del sensor de visión EXP AI. El sensor de visión AI puede detectar:

  • Clasificaciones de IA (como objetos de juego)

  • AprilTag IDs

  • Firmas de color personalizadas

  • Códigos de color personalizados

Proporciona datos de objetos que incluyen posición, tamaño, orientación, ID de clasificación y puntaje de confianza.

El sensor procesa la información visual mediante un modelo de IA integrado, seleccionado en la Utilidad de Visión por IA de VEXcode. El modelo seleccionado determina qué clasificaciones de IA puede detectar el sensor. Al usar VS Code, el modelo de IA debe configurarse primero en VEXcode antes de poder usarlo en el programa. Los objetos detectados se devuelven a través del array objects después de llamar a takeSnapshot.

Constructores de clase#

aivision(
  int32_t index,
  Args&... sigs );

Parámetros#

Parámetro

Tipo

Descripción

index

int32_t

El puerto inteligente al que está conectado el sensor de visión AI, escrito como PORTx, donde x es el número de puerto (por ejemplo, PORT1).

sigs

colordesc, codedesc, or AI constants

Uno o más tipos de detección para registrar en el sensor

  • aivision::ALL_AIOBJS AIOBJS — All AI
  • aivision::ALL_TAGS — All AprilTag IDs
  • aivision::colordesc — Custom Color Signature
  • aivision::codedesc — Custom Color Code

Modelos y clasificaciones de IA#

El sensor de visión de IA puede detectar diferentes objetos con 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 pueden detectar diferentes objetos. Los modelos disponibles actualmente son:

Elementos del aula

Número de identificación

Clasificación de IA

0

blueBall

1

greenBall

2

redBall

3

blueRing

4

greenRing

5

redRing

6

blueCube

7

greenCube

8

redCube

VEX V5 Robotics Competition High Stakes

Número de identificación

Clasificación de IA

0

mobileGoal

1

redRing

2

blueRing

VEX V5 Robotics Competition Push Back

Número de identificación

Clasificación de IA

0

blueBlock

1

redBlock

VEX V5 Robotics Competition Override

Número de identificación

Clasificación de IA

0

redBluePin

1

blueYellowPin

2

redYellowPin

3

yellowPin

4

cup

Ejemplos#

// Create Color Signatures
aivision::colordesc AIVision1__greenBox(
    1,      // index
    85,     // red
    149,    // green
    46,     // blue
    23,     // hangle
    0.23 ); // hdsat

aivision::colordesc AIVision1__blueBox(
    2,      // index
    77,     // red
    135,    // green
    125,    // blue
    27,     // hangle
    0.29 ); // hdsat

// Create a Color Code from two color signatures
aivision::codedesc AIVision1__greenBlue(
    1,                    // code index
    AIVision1__greenBox,  // first color signature
    AIVision1__blueBox ); // second color signature

// Create the AI Vision Sensor instance
aivision AIVision1(
    PORT11,                  // Smart Port
    AIVision1__greenBlue,    // color code
    aivision::ALL_AIOBJS );  // enable AI Classifications

Funciones de los miembros#

La aivision clase aivision incluye las siguientes funciones de miembro:

  • takeSnapshot: captura datos para una firma de color, un código de color, un grupo de clasificación de IA o un grupo de ID de AprilTag específicos.

  • installed — Devuelve si el sensor de visión AI está conectado al cerebro EXP.

Para acceder a los datos del objeto detectado después de llamar a takeSnapshot, utilice las Properties disponibles.

Antes de llamar a cualquier aivision miembro de aivision, aivision instancia de aivision, como se muestra a continuación:

/* This constructor is required when using VS Code.
AI Vision Sensor configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */


// Create Color Signatures
aivision::colordesc AIVision1__greenBox(
    1,      // index
    85,     // red
    149,    // green
    46,     // blue
    23,     // hangle
    0.23 ); // hdsat

aivision::colordesc AIVision1__blueBox(
    2,      // index
    77,     // red
    135,    // green
    125,    // blue
    27,     // hangle
    0.29 ); // hdsat

// Create a Color Code from two color signatures
aivision::codedesc AIVision1__greenBlue(
    1,                    // code index
    AIVision1__greenBox,  // first color signature
    AIVision1__blueBox ); // second color signature

// Create the AI Vision Sensor instance
aivision AIVision1(
    PORT1,                   // Smart Port
    AIVision1__greenBlue,    // color code
    aivision::ALL_AIOBJS );  // enable AI Classifications

takeSnapshot#

Captura una imagen del sensor de visión de IA, la procesa utilizando el modelo de IA seleccionado o las firmas de color configuradas y actualiza la matriz de objects.

Cada llamada actualiza el array objects con los resultados de detección más recientes. Los objetos se ordenan de mayor a menor (por ancho), comenzando en el índice 0. Si no se detectan objetos objectCount será 0 y objects[i].exists será false.

1 — Toma una instantánea con un ID de objeto y un tipo de objeto.

int32_t takeSnapshot(
  uint32_t id,
  objectType type,
  uint32_t count );

2 — Toma una instantánea con una Firma de color.

int32_t takeSnapshot(
  const colordesc &desc,
  int32_t count = 8 );

3 — Toma una instantánea con un Código de color.

int32_t takeSnapshot(
  const codedesc &desc,
  int32_t count = 8 );

4 — Toma una instantánea con un AprilTag ID.

int32_t takeSnapshot(
  const tagdesc &desc,
  int32_t count = 8 );

5 — Toma una instantánea usando una Clasificación de IA.

int32_t takeSnapshot(
  const aiobjdesc &desc,
  int32_t count = 8 );

6 — Toma una instantánea con un descriptor de objetos.

int32_t takeSnapshot(
  const objdesc &desc,
  int32_t count = 8 );

Parameters

Parámetro

Tipo

Descripción

id

uint32_t

El identificador del objeto a detectar cuando se utiliza la función (id, type, count) El significado depende del tipo type:

  • colorObject — Índice del descriptor de color (1–7)
  • codeObject — Índice del código de color (1–8)
  • modelObject — ID de clasificación de IA
  • tagObject — ID de AprilTag (0–36)

Nota: En VEXcode, los nombres de clasificación de IA (como blueBall) se pueden usar directamente. En VS Code, se debe usar el ID numérico.

type

objectType

Especifica la categoría de objeto asociada con id:

  • objectType::tagObject - Detecta AprilTag IDs
  • objectType::colorObject — Detecta Firmas de color
  • objectType::codeObject — Detecta Códigos de color
  • objectType::modelObject — Detecta Clasificaciones de IA
  • objectType::allObject - Detecta todo lo que el sensor puede reconocer

desc

colordesc &, codedesc &, tagdesc &, aiobjdesc &, or objdesc &

Descriptor utilizado para detectar un objeto específico. Pasó directamente a takeSnapshot, por ejemplo: AIVision1.takeSnapshot

  • AIVision1.takeSnapshot(AIVision1__greenBox);
  • AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
predefinidas: aivision:
  • aivision::ALL_TAGS — Detecta todos los AprilTag IDs aivision:
  • aivision::ALL_COLORS — Detecta todas las Firmas de color aivision:
  • aivision::ALL_CODES — Detecta todos los Códigos de color aivision configurados
  • aivision::ALL_AIOBJS — Detecta todas las Clasificaciones de IA aivision
  • aivision::ALL_OBJECTS — Detecta todo lo que el sensor puede reconocer

count

uint32_t / int32_t

Número máximo de objetos almacenados de la instantánea. El valor predeterminado es 8.

Valores de devolución

Devuelve un int32_t que representa el número de objetos detectados que coinciden con la firma o el tipo de detección especificado.

Observaciones

  • El sensor de visión de IA debe tomar una instantánea antes de poder acceder a los datos del objeto.

  • El array objects elemento se actualiza en cada llamada.

  • Cuando se especifica count , solo se almacenan los objetos detectados de mayor tamaño (hasta la cantidad especificada).

Las clasificaciones de IA dependen del modelo seleccionado en AI Vision Utility en VEXcode.

Ejemplos

// Move forward if an object is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Drivetrain.driveFor(forward, 50, mm);
  }
  wait(50, msec);
}

installed#

Devuelve si el sensor de visión AI está conectado al cerebro EXP.

Funciones disponibles

bool installed();

Parámetros

Esta función no toma ningún parámetro.

Valores de devolución

Devuelve un booleano que indica si el sensor de visión AI está conectado:

  • true — El sensor de visión AI está conectado.

  • false — El sensor de visión AI no está conectado.

// Display a message if the AI Vision Sensor is connected
if (AIVision1.installed()){
  Brain.Screen.print("Installed!");
}

Propiedades#

Llamar a takeSnapshot actualiza los resultados de detección del sensor de visión de IA. Cada instantánea actualiza la matriz de objects , que contiene los objetos detectados para la clasificación de IA, la firma de color, el código de color o el ID de AprilTag solicitados.

Se accede a los datos de AI Vision a través de las propiedades de los AIVisionSensor.objects[index], donde el index comienza en 0.

Los objetos se ordenan de mayor a menor (por área).

La resolución de la imagen del sensor de visión AI es de 320 × 240 píxeles. Los valores de posición y tamaño del objeto se informan en unidades de píxeles en relación con la vista actual del sensor.

Las siguientes propiedades están disponibles:

  • objectCount — Devuelve el número de objetos detectados de la instantánea más reciente.

  • largestObject — Selecciona el objeto detectado más grande de la instantánea más reciente.

  • objects — Matriz que contiene objetos detectados actualizada por takeSnapshot.

  • .exists — Si la entrada del objeto contiene datos válidos.

  • .width — Ancho del objeto detectado en píxeles.

  • .height — Altura del objeto detectado en píxeles.

  • .centerX — Posición X del centro del objeto en píxeles.

  • .centerY — Posición Y del centro del objeto en píxeles.

  • .originX — Posición X de la esquina superior izquierda del objeto en píxeles.

  • .originY — Posición Y de la esquina superior izquierda del objeto en píxeles.

  • .angle — Orientación de un código de color o ID de AprilTag en grados.

  • .id — ID de clasificación o ID de AprilTag.

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

objectCount#

objectCount devuelve el número de elementos dentro del array objects como un entero.

Syntax
AIVisionSensor.objectCount

Components

Componente

Descripción

AIVisionSensor

El nombre de su instancia del sensor de visión de IA.

Ejemplos

// Display the number of detected objects
while (true) {
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.clearLine(1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Brain.Screen.print("%d", AIVision1.objectCount);
  }
  wait(50, msec);
}

largestObject#

largestObject recupera el objeto más grande detectado del array de objects.

Este método se puede utilizar para obtener siempre el objeto más grande de objects sin especificar un índice.

Syntax
AIVisionSensor.largestObject

Components

Componente

Descripción

AIVisionSensor

El nombre de su instancia del sensor de visión de IA.

Ejemplos

// Display the closest AprilTag ID
while (true) {
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.clearLine(1);
  AIVision1.takeSnapshot(aivision::ALL_TAGS);
  if (AIVision1.objects[0].exists) {
    Brain.Screen.print("%d", AIVision1.largestObject.id);
  }
  wait(50, msec);
}

objects#

objects devuelve una matriz de propiedades de objeto detectadas. Utilice la matriz para acceder a valores específicos de propiedad de objetos individuales.

Hay diez propiedades que se incluyen con cada objeto almacenado en el array objects después de que se utiliza takeSnapshot.

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 en el momento en takeSnapshot se utilizó takeSnapshot. Estos valores se miden en píxeles, en función de la resolución de 320 por 240 píxeles del sensor.

Syntax
AIVisionSensor.objects[index].property

Components

Componente

Descripción

AIVisionSensor

El nombre de su instancia del sensor de visión de IA.

index

El índice de objeto en la matriz. El índice comienza en 0.

property

Una de las propiedades del objeto disponibles.

.existe#

.exists devuelve si el índice de objeto especificado contiene un objeto detectado válido.

Acceso

SensorName.objects[index].exists

Valores de devolución

Devuelve un booleano que indica si el índice de objeto especificado contiene un objeto detectado válido:

  • true — A valid object exists at the specified index.
  • false — No object exists at the specified index.

Ejemplos

// Move forward if an object is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    Drivetrain.driveFor(forward, 50, mm);
  }
  wait(50, msec);
}

.width#

.width devuelve el ancho del objeto detectado.

Acceso

SensorName.objects[index].width

Valores de devolución

Devuelve un int16_t que representa el ancho del objeto detectado en píxeles. El valor varía de 1 a 320.

Ejemplos

// Approach an object until it's at least 100 pixels wide
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].width < 100) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.height#

.height devuelve la altura del objeto detectado.

Acceso

SensorName.objects[index].height

Valores de devolución

Devuelve un int16_t que representa la altura del objeto detectado en píxeles. El valor varía de 1 a 240.

Ejemplos

// Approach an object until it's at least 90 pixels tall
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].height < 90) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.centerX#

.centerX devuelve la coordenada x del centro del objeto detectado.

Acceso

SensorName.objects[index].centerX

Valores de devolución

Devuelve un int16_t que representa la coordenada x del centro del objeto en píxeles. El valor varía de 0 a 320.

Ejemplos

// Turn until an object is directly in front of the sensor
Drivetrain.setTurnVelocity(10, percent);
Drivetrain.turn(right);
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].centerX > 140 && AIVision1.objects[0].centerX < 180) {
      Drivetrain.stop();
    }
  }
  wait(10, msec);
}

.centerY#

.centerY devuelve la coordenada y del centro del objeto detectado.

Acceso

SensorName.objects[index].centerY

Valores de devolución

Devuelve un int16_t que representa la coordenada y del centro del objeto en píxeles. El valor varía de 0 a 240.

Ejemplos

// Approach an object until it's close to the sensor
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].centerY < 150) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.angle#

.angle devuelve la orientación del código de color detectado o el ID de AprilTag.

Acceso

SensorName.objects[index].angle

Valores de devolución

Devuelve un valor float que representa la rotación del código de color detectado o el ID de AprilTag en grados. El valor varía de 0 a 359.9.

Ejemplos

// Turn left or right depending on how a configured
// Color Code is rotated
while (true) {
  AIVision1.takeSnapshot(AIVision1__redBlue);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].angle > 50 && AIVision1.objects[0].angle < 100) {
      Drivetrain.turn(right);
    }
    else if (AIVision1.objects[0].angle > 270 && AIVision1.objects[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.

Acceso

SensorName.objects[index].originX

Valores de devolución

Devuelve un int16_t que representa la coordenada x del origen del cuadro delimitador del objeto en píxeles. El valor varía de 0 a 320.

Ejemplos

// Display if an object is to the left or the right
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.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.

Acceso

SensorName.objects[index].originY

Valores de devolución

Devuelve un int16_t que representa la coordenada y del origen del cuadro delimitador del objeto en píxeles. El valor varía de 0 a 240.

Ejemplos

// Display if an object is close or far
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].originY < 110) {
      Brain.Screen.print("Close");
    } else {
      Brain.Screen.print("Far");
    }
  }
  wait(100, msec);
}

.id#

.id devuelve el ID de AprilTag o el ID de clasificación de IA detectados.

Acceso

SensorName.objects[index].id

Valores de devolución

Devuelve un int32_t que representa el ID del objeto detectado:

Ejemplos

// Move forward when AprilTag ID 1 is detected
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_TAGS);
  if (AIVision1.objects[0].exists) {
    if (AIVision1.objects[0].id == 1) {
      Drivetrain.drive(forward);
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.score#

.score devuelve la puntuación de confianza de la Clasificación de IA detectada.

Acceso

SensorName.objects[index].score

Valores de devolución

Devuelve un int16_t que indica la puntuación de confianza de la clasificación de IA detectada 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.

Ejemplos

// Display if a score is confident
while (true) {
  AIVision1.takeSnapshot(aivision::ALL_AIOBJS);

  if (AIVision1.objects[0].exists) {
    Brain.screen.clearScreen();
    Brain.screen.setCursor(1, 1);

    if (AIVision1.objects[0].score > 95) {
      Brain.Screen.print("Confident");
    } else {
      Brain.Screen.print("Not confident");
    }
  }
  wait(50, msec);
}