Capteur de vision IA#

Introduction#

La classe aivision permet de contrôler et d’accéder aux données du capteur de vision IA V5. Ce capteur peut détecter :

  • Classifications d’IA (telles que les objets de jeu)

  • Identifiants AprilTag

  • Signatures de couleur personnalisées

  • Codes de couleur personnalisés

Il fournit des données sur l’objet, notamment sa position, sa taille, son orientation, son identifiant de classification et son score de confiance.

Le capteur traite les informations visuelles à l’aide d’un modèle d’IA embarqué, sélectionné dans l’utilitaire AI Vision de VEXcode. Le modèle sélectionné détermine les classifications d’IA que le capteur peut détecter. Sous VS Code, le modèle d’IA doit être configuré au préalable dans VEXcode avant de pouvoir être utilisé dans votre programme. Les objets détectés sont renvoyés dans le tableau objects après l’appel de takeSnapshot.

Constructeurs de classes#

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

Paramètres#

Paramètre

Taper

Description

index

int32_t

Le port intelligent auquel le capteur de vision AI est connecté, écrit comme PORTx, où x est le numéro de port (par exemple, PORT1).

sigs

colordesc, codedesc, or AI constants

Un ou plusieurs types de détection à enregistrer auprès du capteur :

  • aivision::ALL_AIOBJS — Toutes les classifications IA
  • aivision::ALL_TAGS — Tous les identifiants AprilTag
  • aivision::colordesc — Signature couleur personnalisée
  • aivision::codedesc — Code couleur personnalisé

Modèles et classifications d’IA#

Le capteur de vision IA peut détecter différents objets grâce à certaines classifications IA. Selon le modèle de classification IA sélectionné lors de la configuration du capteur dans la fenêtre « Périphériques », différents objets peuvent être détectés. Les modèles actuellement disponibles sont :

Éléments de la salle de classe

Numéro d’identification

Classification par IA

0

blueBall

1

greenBall

2

redBall

3

blueRing

4

greenRing

5

redRing

6

blueCube

7

greenCube

8

redCube

Compétition de robotique VEX V5 à enjeux élevés

Numéro d’identification

Classification par IA

0

mobileGoal

1

redRing

2

blueRing

Report de la compétition de robotique VEX V5

Numéro d’identification

Classification par IA

0

blueBlock

1

redBlock

Dérogation pour la compétition de robotique VEX V5

Numéro d’identification

Classification par IA

0

redBluePin

1

blueYellowPin

2

redYellowPin

3

yellowPin

4

cup

Exemples#

// 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

Fonctions des membres#

La classe aivision comprend les fonctions membres suivantes :

  • takeSnapshot — Capture les données pour une signature de couleur, un code couleur, un groupe de classification IA ou un groupe d’identifiants AprilTag spécifiques.

  • installed — Indique si le capteur de vision AI est connecté au cerveau V5.

Pour accéder aux données de l’objet détecté après avoir appelé takeSnapshot, utilisez les Propriétés disponibles.

Avant d’appeler une quelconque fonction membre de aivision , une instance aivision doit être créée, comme indiqué ci-dessous :

/* 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#

Capture une image à partir du capteur de vision IA, la traite à l’aide du modèle IA sélectionné ou des signatures de couleur configurées, et met à jour le tableau objects.

Chaque appel actualise le tableau objects avec les résultats de détection les plus récents. Les objets sont ordonnés du plus grand au plus petit (par largeur), en commençant à l’index 0. Si aucun objet n’est détecté objectCount sera 0 et objects[i].exists sera false.

1 — Prend un instantané à l’aide d’un ID d’objet et d’un type d’objet.

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

2 — Prend un instantané à l’aide d’une Signature de couleur.

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

3 — Prend un instantané en utilisant un Code couleur.

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

4 — Prend un instantané à l’aide d’un AprilTag ID.

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

5 — Prend un instantané à l’aide d’une Classification IA.

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

6 — Prend un instantané à l’aide d’un descripteur d’objet.

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

Parameters

Paramètre

Taper

Description

id

uint32_t

The identifier of the object to detect when using the (id, type, count) function. The meaning depends on type:

  • colorObject — Color Descriptor index (1–7)
  • codeObject — Color Code index (1–8)
  • modelObject — AI Classification ID
  • tagObject — AprilTag ID (0–36)

Note: In VEXcode, AI Classification names (such as blueBall) may be used directly. In VS Code, the numeric ID must be used.

type

objectType

Specifies the category of object associated with id:

  • objectType::tagObject — Detects AprilTag IDs
  • objectType::colorObject — Detects Color Signatures
  • objectType::codeObject — Detects Color Codes
  • objectType::modelObject — Detects AI Classifications
  • objectType::allObject — Detects everything the sensor can recognize

desc

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

Descriptor used to detect a specific object. Passed directly to takeSnapshot, for example:

  • AIVision1.takeSnapshot(AIVision1__greenBox);
  • AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
Predefined descriptor constants:
  • aivision::ALL_TAGS — Detects all AprilTag IDs
  • aivision::ALL_COLORS — Detects all configured Color Signatures
  • aivision::ALL_CODES — Detects all configured Color Codes
  • aivision::ALL_AIOBJS — Detects all AI Classifications
  • aivision::ALL_OBJECTS — Detects everything the sensor can recognize

count

uint32_t / int32_t

Nombre maximal d’objets stockés à partir de l’instantané. Par défaut : 8.

Valeurs de retour

Renvoie un int32_t représentant le nombre d’objets détectés correspondant à la signature ou au type de détection spécifié.

Notes

  • Le capteur de vision IA doit prendre une capture d’écran avant que les données de l’objet puissent être consultées.

  • Le tableau objects est actualisé à chaque appel.

  • Lorsque count est spécifié, seuls les plus grands objets détectés (jusqu’à la quantité spécifiée) sont stockés.

Les classifications par IA dépendent du modèle sélectionné dans l’utilitaire de vision IA de VEXcode.

Exemples

// 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#

Indique si le capteur de vision IA est connecté au cerveau V5.

Fonctions disponibles

bool installed();

Paramètres

Cette fonction ne prend aucun paramètre.

Valeurs de retour

Renvoie une valeur booléenne indiquant si le capteur de vision IA est connecté :

  • true — Le capteur de vision IA est connecté.

  • false — Le capteur de vision IA n’est pas connecté.

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

Propriétés#

L’appel à takeSnapshot met à jour les résultats de détection du capteur de vision IA. Chaque instantané actualise le tableau objects , qui contient les objets détectés pour la classification IA, la signature couleur, le code couleur ou l’identifiant AprilTag demandés.

Les données AI Vision sont accessibles via les propriétés des objets stockés dans AIVisionSensor.objects[index], où index commence à 0.

Les objets sont classés du plus grand au plus petit (par surface).

La résolution d’image du capteur de vision AI est 320 × 240 pixels. Les valeurs de position et de taille de l’objet sont rapportées en unités de pixels par rapport à la vue actuelle du capteur.

Les propriétés suivantes sont disponibles :

  • objectCount — Renvoie le nombre d’objets détectés à partir du dernier instantané.

  • largestObject — Sélectionne le plus grand objet détecté dans le dernier instantané.

  • objects — Tableau contenant les objets détectés mis à jour par takeSnapshot.

  • .exists — Indique si l’entrée de l’objet contient des données valides.

  • .width — Largeur de l’objet détecté en pixels.

  • .height — Hauteur de l’objet détecté en pixels.

  • .centerX — Position X du centre de l’objet en pixels.

  • .centerY — Position Y du centre de l’objet en pixels.

  • .originX — Position X du coin supérieur gauche de l’objet en pixels.

  • .originY — Position Y du coin supérieur gauche de l’objet en pixels.

  • .angle — Orientation d’un code couleur ou d’un identifiant AprilTag en degrés.

  • .id — ID de classification ou ID AprilTag.

  • .score — Score de confiance pour les classifications d’IA.

objectCount#

objectCount renvoie le nombre d’éléments dans le tableau objects sous forme d’entier.

Syntax
AIVisionSensor.objectCount

Components

Composant

Description

AIVisionSensor

Le nom de votre instance de capteur de vision IA.

Exemples

// 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 récupère le plus grand objet détecté parmi les objects.

Cette méthode peut être utilisée pour toujours obtenir l’objet le plus grand parmi objects sans spécifier d’index.

Syntax
AIVisionSensor.largestObject

Components

Composant

Description

AIVisionSensor

Le nom de votre instance de capteur de vision IA.

Exemples

// 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 renvoie un tableau des propriétés d’objet détectées. Utilisez le tableau pour accéder aux valeurs spécifiques de property des objets individuels.

Il existe dix propriétés incluses avec chaque objet stocké dans le tableau objects après l’utilisation takeSnapshot.

Toutes les valeurs de propriétés, à l’exception de id et score que du score, décrivent la position et la taille de l’objet détecté dans le champ de vision du capteur de vision IA au moment de la prise de vue takeSnapshot . Ces valeurs sont exprimées en pixels, selon la résolution du capteur (320 x 240 pixels).

Syntax
AIVisionSensor.objects[index].property

Components

Composant

Description

AIVisionSensor

Le nom de votre instance de capteur de vision IA.

index

L’index de l’objet dans le tableau. L’index commence à 0.

property

One of the available object properties.

.existe#

.exists renvoie si l’index d’objet spécifié contient un objet détecté valide.

Accès

SensorName.objects[index].exists

Valeurs de retour

Renvoie une valeur booléenne indiquant si l’index d’objet spécifié contient un objet détecté valide :

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

Exemples

// 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);
}

.largeur#

.width renvoie la largeur de l’objet détecté.

Accès

SensorName.objects[index].width

Valeurs de retour

Renvoie un int16_t représentant la largeur de l’objet détecté en pixels. La valeur est comprise entre 1 et 320.

Exemples

// 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);
}

.hauteur#

.height renvoie la hauteur de l’objet détecté.

Accès

SensorName.objects[index].height

Valeurs de retour

Renvoie un entier int16_t représentant la hauteur de l’objet détecté en pixels. La valeur est comprise entre 1 et 240.

Exemples

// 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);
}

.centreX#

.centerX renvoie la coordonnée x du centre de l’objet détecté.

Accès

SensorName.objects[index].centerX

Valeurs de retour

Renvoie un entier int16_t représentant la coordonnée x du centre de l’objet en pixels. La valeur est comprise entre 0 et 320.

Exemples

// 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);
}

.centreY#

.centerY renvoie la coordonnée y du centre de l’objet détecté.

Accès

SensorName.objects[index].centerY

Valeurs de retour

Renvoie un entier int16_t représentant la coordonnée y du centre de l’objet en pixels. La valeur est comprise entre 0 et 240.

Exemples

// 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 renvoie l’orientation du code couleur ou de l’identifiant AprilTag détecté.

Accès

SensorName.objects[index].angle

Valeurs de retour

Renvoie un nombre flottant float représentant la rotation du code couleur ou de l’identifiant AprilTag détecté en degrés. La valeur est comprise entre 0 et 359.9.

Exemples

// 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);
}

.origineX#

.originX renvoie la coordonnée x du coin supérieur gauche de la boîte englobante de l’objet détecté.

Accès

SensorName.objects[index].originX

Valeurs de retour

Renvoie un int16_t représentant la coordonnée x de l’origine de la boîte englobante de l’objet en pixels. La valeur est comprise entre 0 et 320.

Exemples

// 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);
}

.origine#

.originY renvoie la coordonnée y du coin supérieur gauche de la boîte englobante de l’objet détecté.

Accès

SensorName.objects[index].originY

Valeurs de retour

Renvoie un int16_t représentant la coordonnée y de l’origine de la boîte englobante de l’objet en pixels. La valeur est comprise entre 0 et 240.

Exemples

// 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);
}

.identifiant#

.id renvoie l’identifiant AprilTag ou l’identifiant de classification IA détecté.

Accès

SensorName.objects[index].id

Valeurs de retour

Renvoie un entier int32_t représentant l’ID de l’objet détecté :

Exemples

// 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 renvoie le score de confiance de la classification IA détectée.

Accès

SensorName.objects[index].score

Valeurs de retour

Renvoie un entier int16_t indiquant le score de confiance de la classification IA détectée entre 1 et 100.

Un score plus bas signifie que le capteur est moins sûr de l’objet détecté, tandis qu’un score plus élevé signifie que le capteur est plus sûr de lui.

Exemples

// 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);
}