Vision IA#
Introduction#
Le capteur de vision IA du robot de codage VEX AIM détecte et suit les objets, les couleurs et les identifiants AprilTag. Cela permet au robot d’analyser son environnement, de suivre les objets et de réagir en fonction des données visuelles détectées.
Le capteur de vision IA possède une résolution de 320 × 240 pixels. L’origine (0, 0) est située dans le coin supérieur gauche, ce qui place le centre du capteur à (160, 120), comme illustré dans le schéma ci-dessous :

Vous trouverez ci-dessous la liste de toutes les méthodes et propriétés :
Actions — Afficher ou masquer le flux vidéo de la caméra AI Vision.
show_aivision— Affiche le flux AI Vision sur l’écran du robot.hide_aivision— Masque le flux AI Vision de l’écran.tag_detection— Active ou désactive la détection d’identifiant AprilTag.
Capteurs — Détectent si le robot tient un objet.
get_data— Renvoie un tuple d’objets détectés pour une signature spécifique.has_sports_ball— Renvoie si le robot a une balle de sport.has_any_barrel— Renvoie si le robot possède un type de baril quelconque.has_blue_barrel— Renvoie si le robot a un baril bleu.has_orange_barrel— Renvoie si le robot a un baril orange.
Propriétés — Données de l’objet renvoyées par get_data.
exists— Indique si l’objet existe dans la détection actuelle sous forme booléenne.width— Largeur de l’objet détecté.height— Hauteur de l’objet détecté.centerX— Position X du centre de l’objet.centerY— Position Y du centre de l’objet.bearing— Angle horizontal par rapport à l’avant du robot.rotation— Orientation de l’objet.originX— Position X du coin supérieur gauche de l’objet.originY— Position Y du coin supérieur gauche de l’objet.id— Classification ou identifiant d’étiquette de l’objet.score— Score de confiance pour les classifications d’IA.type— Renvoie le type de l’objet (AI, Tag, Color ou Code).
Constructeurs — Définissez les signatures et les codes de couleur.
Créer une signature de couleur — Crée une nouvelle signature de couleur basée sur les plages RGB et de teinte/saturation.
Créer un code couleur — Combine plusieurs signatures de couleur en un seul code couleur.
Actes#
show_aivision#
La commande show_aivision affiche le flux de données en direct du capteur de vision IA sur l’écran du robot. Ce flux de données masquera toute autre image ou texte affiché à l’écran.
Remarque : L’écran n’affichera aucune autre image ou texte à moins que hide_aivision ne soit utilisé pour masquer le flux.
Usage:
robot.screen.show_aivision()
Paramètres |
Description |
|---|---|
Cette méthode ne comporte aucun paramètre. |
# Watch the AI Vision Sensor detect AI Classifications
# and AprilTag IDs as you move the robot
robot.screen.show_aivision()
hide_aivision#
hide_aivision supprime le flux de données en direct du capteur de vision IA de l’écran du robot.
Usage:
robot.screen.hide_aivision()
Paramètres |
Description |
|---|---|
Cette méthode ne comporte aucun paramètre. |
# View the AI Vision Sensor's feed for five seconds
robot.screen.show_aivision()
wait(5, SECONDS)
robot.screen.hide_aivision()
tag_detection#
tag_detection active ou désactive la détection de l’ID AprilTag, où l’état est une valeur booléenne.
Le capteur peut détecter les identifiants AprilTag 0 à 36 de la famille Circle21h7.
Usage:
robot.vision.tag_detection(state)
Paramètres |
Description |
|---|---|
|
Les valeurs sont : |
robot.screen.set_font(PROP30)
# Cut off AprilTag ID detection after 5 seconds
while True:
if timer.time(SECONDS) > 5:
robot.vision.tag_detection(False)
robot.screen.clear_screen()
robot.screen.set_cursor(3, 1)
apriltags = robot.vision.get_data(ALL_TAGS)
if apriltags[0].exists:
robot.screen.print("AprilTag ID detected!")
else:
robot.screen.print("Nothing detected!")
wait(0.1, SECONDS)
Getters#
get_data#
get_data filtre les données de la trame du capteur de vision AI en une seule signature — une description enregistrée de quelque chose que le capteur peut reconnaître, comme un objet pré-entraîné, un ID AprilTag ou une signature de couleur ou un code couleur configuré — et renvoie un tuple.
Les Signatures de couleur et les Codes de couleur doivent d’abord être configurés dans l’utilitaire AI Vision avant de pouvoir être utilisés avec cette méthode.
Le tuple stocke les objets ordonnés du plus grand au plus petit par largeur, à partir de l’indice 0. Les propriétés de chaque objet sont accessibles via son indice. Un tuple vide est renvoyé si aucun objet correspondant n’est détecté.
Usage:
robot.vision.get_data(signature, count)
Paramètres |
Description |
|---|---|
|
Filtre l’ensemble de données pour n’inclure que les données de la signature donnée. Les signatures disponibles sont :
|
|
Facultatif. Définit le nombre maximal d’objets pouvant être renvoyés, de 1 à 24 (par défaut : 8). |
Remarque : Les identifiants AprilTag 5 à 37 peuvent être obtenus en utilisant les identifiants AprilTag imprimés de AIM Printables.
# Move forward if a sports ball is detected
while True:
ball = robot.vision.get_data(SPORTS_BALL)
if ball[0].exists:
robot.move_for(10, 0)
wait(50, MSEC)
Remarque : Le tuple renvoyé peut être trié selon n’importe quelle propriété, et pas seulement la largeur, à l’aide de la fonction sorted de Python. Par exemple, tri par ID AprilTag :
# Print each detected AprilTag ID in ascending order by ID
while True:
apriltags = sorted(robot.vision.get_data(ALL_TAGS), key=id)
for tag in apriltags:
print(tag.id)
wait(1, SECONDS)
Ou en triant par hauteur :
# Print each detected AprilTag ID in ascending order by height
while True:
apriltags_by_height = sorted(robot.vision.get_data(ALL_TAGS), key=lambda tag: tag.height)
for tag in apriltags_by_height:
print(tag.height)
wait(1, SECONDS)
Affichage des données#
L’affichage du tuple renvoyé par get_data affiche une liste de toutes les propriétés de tous les objets détectés :
# Display properties of all detected AprilTag IDs
while True:
vision_data = robot.vision.get_data(ALL_TAGS)
if vision_data[0].exists:
break
wait(0.25, SECONDS)
print(vision_data)

Classifications IA#
Le capteur de vision IA AIM peut détecter les classifications IA suivantes :
Numéro d’identification |
Classification par IA |
Signature |
|---|---|---|
0 |
Balle |
|
1 |
Baril bleu |
|
2 |
Tonneau orange |
|
3 |
Robot AIM |
|
Signatures de couleur#
Une signature de couleur est une couleur unique que le capteur de vision IA peut reconnaître. Ces signatures permettent au capteur de détecter et de suivre les objets en fonction de leur couleur. Une fois la signature de couleur configurée, le capteur peut identifier les objets de cette couleur spécifique dans son champ de vision. Les signatures de couleur sont utilisées avec get_data pour traiter et détecter les objets colorés en temps réel.

# Display if any objects match the Red_Box signature
while True:
robot.screen.set_cursor(1, 1)
robot.screen.clear_row(1)
# Change to any configured Color Signature
ai_objects = robot.vision.get_data(Red_Box)
if ai_objects[0].exists:
robot.screen.print("Color signature detected!")
Codes de couleur#
Un code couleur est un motif structuré composé de 2 à 4 signatures de couleur agencées dans un ordre précis. Ces codes permettent au capteur de vision IA de reconnaître des motifs de couleurs prédéfinis. Les codes couleur sont utiles pour identifier des objets complexes ou créer des marqueurs uniques pour la navigation autonome.

# Display if any objects match the BlueRed code
while True:
robot.screen.set_cursor(1, 1)
robot.screen.clear_row(1)
# Change to any configured Color Code
ai_objects = robot.vision.get_data(BlueRed)
if ai_objects[0].exists:
robot.screen.print("Color code detected!")
has_sports_ball#
has_sports_ball renvoie une valeur booléenne indiquant si le robot possède actuellement un ballon de sport.
True— Le robot possède un ballon de sport.False— Le robot n’a pas de ballon de sport.
Usage:
robot.has_sports_ball()
Paramètres |
Description |
|---|---|
Cette méthode ne comporte aucun paramètre. |
# Kick when the robot has a sports ball
while True:
if robot.has_sports_ball():
robot.kicker.kick(MEDIUM)
wait(50, MSEC)
has_any_barrel#
has_any_barrel renvoie une valeur booléenne indiquant si le robot possède actuellement un type de canon quelconque.
True— Le robot possède un canon.False— Le robot n’a pas de canon.
Usage:
robot.has_any_barrel()
Paramètres |
Description |
|---|---|
Cette méthode ne comporte aucun paramètre. |
# Push a barrel away when detected
while True:
if robot.has_any_barrel():
robot.kicker.place()
wait(50, MSEC)
has_blue_barrel#
has_blue_barrel renvoie une valeur booléenne indiquant si le robot possède actuellement un baril bleu.
True— Le robot a un canon bleu.False— Le robot n’a pas de canon bleu.
Usage:
robot.has_blue_barrel()
Paramètres |
Description |
|---|---|
Cette méthode ne comporte aucun paramètre. |
# Push a blue barrel away when detected
while True:
if robot.has_blue_barrel():
robot.kicker.place()
wait(50, MSEC)
has_orange_barrel#
has_orange_barrel renvoie une valeur booléenne indiquant si le robot possède actuellement un baril orange.
True— Le robot a un canon orange.False— Le robot n’a pas de canon orange.
Usage:
robot.has_orange_barrel()
Paramètres |
Description |
|---|---|
Cette méthode ne comporte aucun paramètre. |
# Push an orange barrel away when detected
while True:
if robot.has_orange_barrel():
robot.kicker.place()
wait(50, MSEC)
Propriétés#
Il existe douze propriétés qui sont incluses avec chaque objet stocké dans un tuple après l’utilisation de la méthode robot.vision.get_data.
All property values except .id, .score, and .type describe the detected object’s position, size, orientation, or bearing at the moment robot.vision.get_data was used. These values are measured in pixels or degrees, based on the sensor’s 320 by 240 pixel resolution.

.exists#
.exists renvoie une valeur booléenne indiquant si l’index existe ou non dans le tuple.
True— L’index existe.False— L’index n’existe pas.
# Check if at least two objects are detected
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
ai_objects = robot.vision.get_data(ALL_CARGO)
if ai_objects[0].exists:
if ai_objects[1].exists:
robot.screen.print("At least 2")
else:
robot.screen.print("Less than 2")
wait(0.1, SECONDS)
.width#
.width renvoie la largeur de l’objet détecté en pixels, qui est un entier compris entre 1 et 320.
Remarque : Les valeurs des pixels sont relatives au système de coordonnées du capteur. Voir le diagramme dans l’introduction pour référence.

# Move towards a Blue Barrel until its width is
# larger than 100 pixels
while True:
barrel = robot.vision.get_data(BLUE_BARREL)
if barrel[0].exists:
if barrel[0].width < 100:
robot.move_at(0)
else:
robot.stop_all_movement()
wait(50, MSEC)
.height#
.height renvoie la hauteur de l’objet détecté en pixels, qui est un entier compris entre 1 et 240.
Remarque : Les valeurs des pixels sont relatives au système de coordonnées du capteur. Voir le diagramme dans l’introduction pour référence.

# Move towards a Blue Barrel until its height is
# larger than 100 pixels
while True:
barrel = robot.vision.get_data(BLUE_BARREL)
if barrel[0].exists:
if barrel[0].height < 100:
robot.move_at(0)
else:
robot.stop_all_movement()
wait(50, MSEC)
.centerX#
.centerX renvoie la coordonnée x du centre de l’objet détecté en pixels, qui est un entier compris entre 0 et 320.
Remarque : Les valeurs des pixels sont relatives au système de coordonnées du capteur. Voir le diagramme dans l’introduction pour référence.

# Turn slowly until a Blue Barrel is centered in
# front of the robot
robot.set_turn_velocity(30)
robot.turn(RIGHT)
while True:
barrel = robot.vision.get_data(BLUE_BARREL)
if barrel[0].exists:
if 140 < barrel[0].centerX < 180:
robot.stop_all_movement()
wait(10,MSEC)
.centerY#
.centerY renvoie la coordonnée y du centre de l’objet détecté en pixels, qui est un entier compris entre 0 et 240.
Remarque : Les valeurs des pixels sont relatives au système de coordonnées du capteur. Voir le diagramme dans l’introduction pour référence.

# Move towards a Blue Barrel until its
# center y-coordinate is more than 140 pixels
while True:
barrel = robot.vision.get_data(BLUE_BARREL)
if barrel[0].exists:
if barrel[0].centerY < 140:
robot.move_at(0)
else:
robot.stop_all_movement()
wait(50, MSEC)
.bearing#
.bearing renvoie un nombre décimal (float) représentant la position d’un objet à gauche ou à droite du centre du champ de vision du capteur de vision IA, exprimée en degrés. La valeur 0 indique que l’objet est centré, les valeurs positives qu’il est à droite et les valeurs négatives qu’il est à gauche.
# Turn to keep the Blue Barrel directly in front
robot.set_turn_velocity(40)
while True:
vision_data = robot.vision.get_data(BLUE_BARREL)
if vision_data[0].exists:
if vision_data[0].bearing > 5:
robot.turn(RIGHT)
elif vision_data[0].bearing < -5:
robot.turn(LEFT)
else:
robot.stop_all_movement()
else:
robot.stop_all_movement()
wait(0.1, SECONDS)
.rotation#
La fonction .rotation renvoie l’orientation de l’objet sur le plan de vision du capteur de vision IA, mesurée en degrés de 0 à 359. Un code couleur correspond à 0° lorsque ses couleurs sont alignées horizontalement (par exemple, rouge et bleu). Si les couleurs sont pivotées, l’angle change (par exemple, bleu et rouge correspondent à 180°).
Dans l’exemple ci-dessous, le code couleur a été configuré avec le rouge à gauche et le bleu à droite.
Sur cette image, superposer du bleu au rouge équivaut à faire pivoter le code couleur d’origine de 270 degrés vers la droite.

# Slide left or right depending on how a Color Code (BlueRed)
# is rotated on the vertical plane
while True:
# Original Color Code is Red to the left, Blue to the right
code = robot.vision.get_data(BlueRed)
if code[0].exists:
# Check if Color Code is now Red on top of Blue
if 50 < code[0].rotation < 100 :
robot.move_at(90)
# Check if Color Code is now Blue on top of Red
elif 270 < code[0].rotation < 330 :
robot.move_at(270)
else:
robot.stop_all_movement()
else:
robot.stop_all_movement()
wait(50, MSEC)
.originX#
.originX renvoie la coordonnée x du coin supérieur gauche de la boîte englobante de l’objet détecté en pixels, qui est un entier compris entre 0 et 320.
Remarque : Les valeurs des pixels sont relatives au système de coordonnées du capteur. Voir le diagramme dans l’introduction pour référence.

# Display if an Orange Barrel is to the
# left or the right
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1,1)
orange_barrel = robot.vision.get_data(ORANGE_BARREL)
if orange_barrel[0].exists:
if orange_barrel[0].originX < 160:
robot.screen.print("To the left!")
else:
robot.screen.print("To the right!")
wait(50, MSEC)
.originY#
.originY renvoie la coordonnée y du coin supérieur gauche de la boîte englobante de l’objet détecté en pixels, qui est un entier compris entre 0 et 240.
Remarque : Les valeurs des pixels sont relatives au système de coordonnées du capteur. Voir le diagramme dans l’introduction pour référence.

# Display if an Orange Barrel is close or far
# from the robot
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
orange_barrel = robot.vision.get_data(ORANGE_BARREL)
if orange_barrel[0].exists:
if orange_barrel[0].originY < 80:
robot.screen.print("Far")
else:
robot.screen.print("Close")
wait(50, MSEC)
.id#
.id renvoie l’ID de la classification IA détectée ou l’ID AprilTag sous forme d’entier.
Pour un identifiant AprilTag, la propriété .id représente le numéro d’identifiant AprilTag détecté dans la plage de 0 à 37. Pour une classification IA, la propriété .id correspond à l’identifiant prédéfini dans la section Classifications IA.
# Move forward when AprilTag ID 1 is detected
while True:
apriltags = robot.vision.get_data(ALL_TAGS)
if apriltags[0].exists:
if apriltags[0].id == 1:
robot.move_at(0)
else:
robot.stop_all_movement()
wait(50, MSEC)
.score#
.score renvoie le score de confiance de la classification IA détectée sous forme d’un entier compris 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.
# Look confident if an Orange Barrel is detected
while True:
barrel = robot.vision.get_data(ORANGE_BARREL)
if barrel[0].exists:
if barrel[0].score > 95:
robot.screen.show_emoji(CONFIDENT)
else:
robot.screen.hide_emoji()
wait(50, MSEC)
.type#
La fonction .type renvoie un entier indiquant le type d’objet détecté. Vous pouvez comparer cette valeur à l’aide du numéro de type ou de la constante nommée correspondante :
Type d’objet |
Objets inclus |
|---|---|
|
— Ballons de sport : |
|
— Identifiants AprilTag |
|
— Signatures en couleur |
|
— Codes de couleur |
# Display if an AprilTag ID or AI Classification
# is detected
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
vision_data = robot.vision.get_data(ALL_VISION)
if vision_data[0].exists:
if vision_data[0].type == AiVision.AI_OBJECT:
robot.screen.print("AI Object!")
elif vision_data[0].type == AiVision.TAG_OBJECT:
robot.screen.print("AprilTag ID!")
wait(0.1, SECONDS)
# Display a list of all detected objects
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
vision_data = robot.vision.get_data(ALL_VISION)
if vision_data[0].exists:
for obj in vision_data:
if obj.type == AiVision.AI_OBJECT:
robot.screen.print("- AI Object")
elif obj.type == AiVision.TAG_OBJECT:
robot.screen.print("- AprilTag ID")
robot.screen.next_row()
wait(0.1, SECONDS)
Constructeurs#
Creating a Color Signature#
Une nouvelle signature de couleur est créée à l’aide du constructeur Colordesc , puis enregistrée auprès du capteur de vision IA via la méthode color_description Un objet Colordesc définit une des sept signatures de couleur détectables par le capteur, mais elle doit être explicitement définie à l’aide de color_description pour être prise en compte.
Utilisation de Colordesc :
Colordesc(index, red, green, blue, hangle, hdsat)
Paramètre |
Description |
|---|---|
|
Un entier compris entre 1 et 7 représentant l’index de la signature de couleur. Si deux signatures de couleur utilisent le même index, la seconde prévaudra sur la première. |
|
Un entier compris entre 0 et 255 pour la composante rouge de la couleur. |
|
Un entier compris entre 0 et 255 pour la composante verte de la couleur. |
|
Un entier compris entre 0 et 255 pour la composante bleue de la couleur. |
|
Une valeur flottante de 1 à 40 représentant la gamme de teintes en degrés. |
|
Une valeur flottante comprise entre 0,10 et 1,00 représentant la plage de saturation. |
Utilisation de color_description :
robot.vision.color_description(object)
Paramètre |
Description |
|---|---|
|
L’objet |
# Detect a red object
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
robot.vision.color_description(red_box)
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
red_boxes = robot.vision.get_data(red_box)
if red_boxes[0].exists:
robot.screen.print("Red detected!")
else:
robot.screen.print("No red detected.")
wait(0.2, SECONDS)
Creating a Color Code#
Un nouveau code couleur est créé à l’aide du constructeur Codedesc , puis activé à l’aide de la méthode code_description Un code couleur regroupe 2 à 4 objets Colordesc existants en un seul identifiant que le capteur de vision IA peut détecter comme une séquence, mais il doit être explicitement défini à l’aide de code_description pour être effectif.
Utilisation de Codedesc :
Codedesc(index, c1, c2, c3, c4, c5)
Paramètre |
Description |
|---|---|
|
L’index du code couleur, de 1 à 8. Remarque : si vous créez deux objets |
|
Le |
|
Le deuxième objet |
|
Facultatif. Un troisième objet |
|
Facultatif. Un quatrième objet |
Utilisation de code_description :
robot.vision.code_description(object)
Paramètre |
Description |
|---|---|
|
Un objet |
# Create Color Signatures
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
purple_box = Colordesc(2, 98, 18, 227, 10.00, 0.20)
robot.vision.color_description(red_box)
robot.vision.color_description(purple_box)
# Detect a red_purple Color Code
red_purple = Codedesc(1, red_box, purple_box)
robot.vision.code_description(red_purple)
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
code_objects = robot.vision.get_data(red_purple)
if code_objects[0].exists:
robot.screen.print("Code detected!")
else:
robot.screen.print("No code detected.")
wait(0.2, SECONDS)