Programmation avec le capteur de vision IA dans VEXcode EXP C++

Assurez-vous d'avoir configuré les codes de couleur Color Signatures et Color Codes avec votre capteur de vision AI afin qu'ils puissent être utilisés avec vos blocs. Pour en savoir plus sur leur configuration, vous pouvez consulter les articles ci-dessous :

Le capteur de vision IA peut également détecter les classifications IA et les AprilTags. Pour savoir comment activer ces modes de détection, cliquez ici :

Pour en savoir plus sur ces commandes individuelles et sur la manière de les utiliser dans VEXcode, consultez le site de l'API.


Obtenez des données visuelles avec le capteur de vision IA

Chaque commande du capteur de vision IA commencera par le nom du capteur de vision IA configuré. Pour tous les exemples de cet article, le nom du capteur de vision AI utilisé sera AIVision.

prendre un instantané

La méthode takeSnapshot prend une photo de ce que le capteur de vision IA voit actuellement et extrait des données de cet instantané qui peuvent ensuite être utilisées dans un projet. Lors de la prise d'une capture d'écran, vous devez spécifier le type d'objet dont le capteur de vision IA doit collecter les données :

  • Signature couleurcode couleur oucode couleur
    • Ces signatures visuelles commencent par le nom du capteur de vision IA, un double trait de soulignement, puis le nom de la signature visuelle, par exemple : AIVision1__Blue.
  • Classifications IA - aivision::ALL_AIOBJS
  • avril Étiquettes- aivision::TOUS_LES_ÉTIQUETTES

La prise d'un instantané créera un tableau de tous les objets détectés que vous avez spécifiés. Par exemple, si vous vouliez détecter une signature de couleur « Bleu » et que le capteur de vision IA détectait 3 objets bleus différents, les données des trois seraient placées dans le tableau.

Dans cet exemple, un instantané est pris de la signature de couleur « Bleu » du capteur de vision AI nommé AIVision1. Il affiche le nombre d'objets détectés dans le réseau et capture un nouvel instantané toutes les 0,5 secondes.

while (true) {
// Obtenir un instantané de tous les objets de couleur bleue.
AIVision.takeSnapshot(AIVision1__Blue);

// Vérifier qu'un objet a été détecté dans l'instantané avant de récupérer les données.
if (AIVision.objectCount > 0) {

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, msec);
}

objets

Chaque objet d'un instantané possède des propriétés différentes qui peuvent être utilisées pour fournir des informations sur cet objet. La méthode objects vous permet d'accéder à ces propriétés.

Les propriétés disponibles sont les suivantes :

  • identifiant
  • centreX et centreY
  • origineX et origineY
  • largeur
  • hauteur
  • angle
  • existe
  • score

Pour accéder à une propriété d'un objet, utilisez le nom du capteur de vision IA, suivi de la méthode de l'objet, puis de l'index de l'objet.

L'index de l'objet indique la propriété spécifique de l'objet que vous souhaitez récupérer. Après la prise de vue, le capteur de vision IA trie automatiquement les objets par taille. L'objet le plus grand se voit attribuer l'indice 0, les objets plus petits recevant des numéros d'indice plus élevés.

Par exemple, appeler la largeur de l'objet le plus grand serait AIVision1.objects[0].width.

identifiant

La propriété id est uniquement disponible pour les classifications IA et du avril.

Trois AprilTags sont actuellement suivis par l'utilitaire AI Vision. Chaque étiquette est identifiée, localisée et délimitée, indiquant son suivi par le système. Dans cet exemple, les identifiants AprilTag sont 0, 3 et 9.

Pour un AprilTag, la propriété id représente le numéro d'identificationdes AprilTag détectés.

L'identification de tags spécifiques AprilTags permet une navigation sélective. Vous pouvez programmer votre robot pour qu'il se dirige vers certaines étiquettes tout en ignorant les autres, les utilisant ainsi comme points de repère pour la navigation automatisée.

L'utilitaire AI Vision suit quatre objets : deux BuckyBalls et deux Rings. Chaque objet est identifié, localisé et délimité, indiquant ainsi son suivi par le système. L'utilitaire enregistre l'identifiant de l'objet ; dans cet exemple, il y a une boule rouge, une boule bleue, un anneau vert et un anneau rouge.

Pourclassifications d'IA, la propriété id représente le type spécifique de classification d'IA détecté.

Identification spécifique Classifications IApermet au robot de se concentrer uniquement sur des objets spécifiques, comme par exemple vouloir naviguer uniquement vers une Buckyball rouge, et non une bleue.

Consultez ces articles pour plus d'informations sur les balises AprilTags et , les classifications IA et comment activer leur détection dans l'utilitaire AI Vision.

centreX et centreY

Il s'agit des coordonnées du centre de l'objet détecté, exprimées en pixels.

Le capteur de vision IA suit une fullerène bleue. La Buckyball possède un rectangle de suivi autour d'elle, et l'étiquette ci-dessus indique qu'elle a une position X de 176 et une position Y de 117. Le centre du rectangle de suivi est mis en évidence pour indiquer que la position est mesurée à partir de ce centre.

Les coordonnées CenterX et CenterY facilitent la navigation et le positionnement. Le capteur de vision IA possède une résolution de 320 x 240 pixels.

Le capteur de vision IA suit deux cubes bleus. Les cubes sont entourés de rectangles de suivi, et l'un d'eux est beaucoup plus proche de la caméra. Le plus proche a une position Y de 184, et le plus éloigné a une position Y de 70.

Vous pouvez constater qu'un objet plus proche du capteur de vision IA aura une coordonnée CenterY inférieure à celle d'un objet plus éloigné.

Dans cet exemple, étant donné que le centre de la vue du capteur de vision AI est (160, 120), le robot tournera à droite jusqu'à ce que la coordonnée centreX d'un objet détecté soit supérieure à 150 pixels, mais inférieure à 170 pixels.

while (true) {
  // Obtenir un instantané de tous les objets de couleur bleue.
  AIVision.takeSnapshot(AIVision__Blue);

  // Vérifier qu'un objet a été détecté dans l'instantané avant de récupérer les données.
  if (AIVision.objectCount > 0) {

    if (AIVision.objects[0].centerX > 150.0 && 170.0 > AIVision.objects[0].centerX) {
      Drivetrain.turn(right);
    } else {
      Drivetrain.stop();
    }
  }
  wait(5, msec);
}

origineX et origineY

OriginX et OriginY correspondent aux coordonnées en pixels du coin supérieur gauche de l'objet détecté.

Le capteur de vision IA suit une fullerène bleue. La Buckyball possède un rectangle de suivi autour d'elle, et l'étiquette ci-dessus indique qu'elle a une position X de 176 et une position Y de 117. Le coin supérieur gauche du rectangle de suivi est mis en évidence pour indiquer que la position d'origine est mesurée à partir de ce coin supérieur gauche.

Les coordonnées OriginX et OriginY facilitent la navigation et le positionnement. En combinant cette coordonnée avec la largeur et la hauteur de l'objet, vous pouvez déterminer la taille de la boîte englobante de l'objet. Cela peut faciliter le suivi d'objets en mouvement ou la navigation entre des objets.

largeur hauteur et , hauteur

Il s'agit de la largeur ou de la hauteur de l'objet détecté, en pixels.

Le capteur de vision IA suit une fullerène bleue. La buckminsterfullerène possède un rectangle de suivi autour d'elle, et l'étiquette ci-dessus indique qu'elle a une largeur de 80 pixels et une hauteur de 78 pixels. Les flèches rouges mettent en évidence le rectangle de suivi pour indiquer sa largeur et sa hauteur.

Les mesures de largeur et de hauteur permettent d'identifier différents objets. Par exemple, une fullerène C18 aura une hauteur supérieure à celle d'un anneau C18.

Le capteur de vision IA suit deux cubes bleus. Les cubes sont entourés de rectangles de suivi, et l'un d'eux est beaucoup plus proche de la caméra. Celui le plus proche a une largeur de 144 et une hauteur de 113, et celui le plus éloigné a une largeur de 73 et une hauteur de 84.

La largeur et la hauteur indiquent également la distance d'un objet par rapport au capteur de vision IA. Des mesures plus petites signifient généralement que l'objet est plus éloigné, tandis que des mesures plus grandes suggèrent qu'il est plus proche.

Dans cet exemple, la largeur de l'objet est utilisée pour la navigation. Le robot s'approchera de l'objet jusqu'à ce que sa largeur atteigne une taille spécifique avant de s'arrêter.

while (true) {
  // Obtenir un instantané de tous les objets bleus.
  AIVision.takeSnapshot(AIVision1__Blue);

  // Vérifier qu'un objet a été détecté dans l'instantané avant de récupérer les données.
  if (AIVision.objectCount > 0) {

    if (AIVision.objects[0].width < 250.0) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  }
  wait(5, msec);
}

angle

Animation d'un carré rouge et d'un carré vert tournant ensemble pour illustrer les 360 degrés d'un angle.

La propriété d'angle est uniquement disponible pour les codes couleuret ainsi que pour les étiquettes d'avril
.
Ceci représente si le code couleur ou détecté est orienté différemment.

Le capteur de vision IA suit un code couleur vert puis bleu. La vidéo montre un cube vert empilé sur un cube bleu. La valeur angulaire du code couleur est mise en évidence et indique 87 degrés, ce qui signifie que le code couleur est orienté verticalement.

Vous pouvez voir si le robot est orienté différemment par rapport au code couleur ouAprilTag et prendre des décisions de navigation en fonction de cela.

Le capteur de vision IA suit un code couleur vert puis bleu. La vidéo montre un cube vert placé à côté d'un cube bleu, mais ils sont positionnés selon un angle inconfortable par rapport au capteur. La valeur angulaire du code couleur est mise en évidence et affiche 0 degré, ce qui indique que l'angle du code couleur ne peut pas être lu.

Par exemple, si un code couleur n'est pas détecté sous un angle approprié, l'objet qu'il représente risque de ne pas pouvoir être correctement saisi par le robot.

score

La propriété score est utilisée lors de la détection declassifications d'IA avec le capteur de vision IA.

L'utilitaire AI Vision suit quatre objets : deux BuckyBalls et deux Rings. Chaque objet est identifié, localisé et délimité, indiquant ainsi son suivi par le système. L'utilitaire affiche également le score de classification IA de chaque objet ; dans cet exemple, chaque score est de 99 %.

Le score de confiance indique le degré de certitude du capteur de vision IA quant à sa détection. Sur cette image, le système est sûr à 99 % d'identifier la classification IA de ces quatre objets. Vous pouvez utiliser ce score pour vous assurer que votre robot se concentre uniquement sur les détections très fiables.

existe

La propriété existe est utilisée pour détecter si une signature visuelle spécifiée a été détectée dans le dernier instantané pris.

Cela vous permet de vérifier si des objets détectés l'ont été dans l'instantané précédent. Cette propriété renverra True si un objet existe, et False si l'objet n'existe pas.


nombre d'objets

La méthode objectCount renvoie le nombre d'objets détectés dans le dernier instantané.

Le capteur de vision IA suit deux cubes bleus. Les cubes sont entourés de rectangles de suivi, et l'un d'eux est beaucoup plus proche de la caméra.

Dans cet exemple, deux objets ont été détectés avec la signature de couleur « Bleu ». Ils seront tous deux placés dans le tableau lorsque la méthode takeSnapshot sera utilisée.

Ce fragment de code met à jour en continu le cerveau EXP avec le nombre d'objets détectés. D’après l’exemple fourni, il enverra de manière répétée la valeur 2, indiquant que deux objets ont été détectés.

while (true) {
// Obtenir un instantané de tous les objets bleus.
AIVision.takeSnapshot(AIVision__Blue);

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// Vérifier qu'un objet a été détecté dans l'instantané avant de récupérer les données.
if (AIVision.objectCount > 0) {
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, msec);
}

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: