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 :

Un diagramme montrant la résolution du capteur de vision AIM AI, avec les coordonnées 0, 0 en haut à gauche du diagramme, 320, 0 en haut à droite et 0, 240 en bas à gauche, avec 160, 120 au centre exact.

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.

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.

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

state

Les valeurs sont : True, ce qui active la détection de l’identifiant AprilTag, ou False, ce qui désactive la détection de l’identifiant AprilTag.

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

signature

Filtre l’ensemble de données pour n’inclure que les données de la signature donnée. Les signatures disponibles sont :

  • ALL_VISION - Ballons de sport, barils, robots de codage VEX AIM, identifiants AprilTag, couleurs et codes couleur
  • ALL_CARGO - Ballons de sport et barils
  • ALL_TAGS - Tous les identifiants AprilTag
  • ALL_COLORS - Toutes les signatures de couleur et les codes couleur configurés
  • SPORTS_BALL - Ballons de sport uniquement
  • BLUE_BARREL - Barils bleus uniquement
  • ORANGE_BARREL - Barils oranges uniquement
  • AIM_ROBOT - Tous les robots de codage VEX AIM
  • TAG0 à TAG37 - Un identifiant AprilTag unique de 0 à 37
  • NAME - Signature couleur ou code couleur où NAME est le nom configuré dans l’utilitaire AI Vision.

count

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)

Capture d'écran de la fenêtre de la console affichant les informations de débogage pour les identifiants AprilTag détectés. Le texte liste « Objet n° 0 » avec des champs tels que : existe : True, type : ID AprilTag, id : 2, centreX : 223, centreY : 54, origineX : 210, origineY : 42, largeur : 27, hauteur : 23, orientation : 14,1 et rotation : 0,0, suivi d'une ligne de séparation et du début de « Objet n° 1 » avec : existe : True, type : ID AprilTag, id : 4 et centreX : 122.

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

SPORTS_BALL

1

Baril bleu

BLUE_BARREL

2

Tonneau orange

ORANGE_BARREL

3

Robot AIM

AIM_ROBOT

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.

L'utilitaire AI Vision montre un capteur de vision connecté détectant deux objets colorés. La partie gauche affiche le flux vidéo en direct d'une caméra, avec un cadre bleu à gauche et un cadre rouge à droite, chacun entouré d'un cadre blanc. Des étiquettes noires indiquent leurs noms, coordonnées et dimensions respectifs. La partie droite contient les paramètres de signature colorimétrique, avec des curseurs pour la teinte et la saturation des deux cadres. Des boutons permettant d'ajouter des couleurs, de figer la vidéo, de copier et d'enregistrer l'image se trouvent en bas, ainsi qu'un bouton de fermeture dans le coin inférieur droit.

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

L'interface de l'utilitaire de vision IA affiche un capteur de vision connecté détectant deux objets adjacents : un rectangle bleu à gauche et un rectangle rouge à droite, regroupés dans un seul cadre blanc nommé BleuRouge. Les informations de détection comprennent l'angle A : 11° , les coordonnées X : 143, Y : 103 , la largeur L : 233 et la hauteur H : 108 . Sur le panneau de droite, trois signatures de couleur sont affichées : Rouge_Case, Bleu_Case et BleuRouge, avec des plages de teinte et de saturation réglables. La signature BleuRouge combine les signatures Bleu_Case et Rouge_Case. Sous le flux vidéo se trouvent des boutons intitulés Figer la vidéo, Copier l'image, Enregistrer l'image et Fermer.

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

Un canon bleu à rayure orange est centré dans le cadre, entouré d'un rectangle noir. Les axes x et y sont gradués de 0 à 320 de gauche à droite en haut et de 0 à 240 de haut en bas à gauche.

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

Un canon bleu à rayure orange est centré dans le cadre, entouré d'un rectangle noir. Deux lignes verticales rouges pointillées s'étendent du haut du cadre jusqu'aux bords gauche et droit du rectangle. Une flèche noire à double pointe entre ces lignes indique la largeur.

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

Un tonneau bleu à rayure orange est centré dans le cadre, entouré d'un rectangle noir. Deux lignes horizontales rouges pointillées s'étendent du côté gauche du cadre jusqu'aux bords supérieur et inférieur du rectangle. Une flèche noire à double pointe entre ces lignes indique la hauteur.

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

Un canon bleu à rayure orange est centré dans le cadre, entouré d'un rectangle noir. Une ligne verticale rouge en pointillés s'étend du haut du cadre jusqu'au centre du rectangle, indiquant l'abscisse du centre.

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

Un canon bleu à rayure orange est centré dans le cadre, entouré d'un rectangle noir. Une ligne pointillée rouge horizontale s'étend du côté gauche du cadre jusqu'au centre du rectangle, indiquant la coordonnée Y du centre.

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

Schéma vu de dessus montrant un robot de codage VEX AIM centré dans une base circulaire avec une ligne de référence verticale et une ligne rouge inclinée vers un ballon de sport sur la gauche, étiquetée -30 degrés. Schéma vu de dessus montrant un robot de codage VEX AIM centré dans une base circulaire avec une ligne de référence verticale et une ligne rouge inclinée vers un ballon de sport sur la droite, étiquetée à 30 degrés.
# 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.

Une interface de caméra affiche un objet empilé verticalement, avec une moitié supérieure bleue et une moitié inférieure rouge, centré dans le cadre. Une étiquette sous l'objet indique Rouge_Bleu A:270° CX:185 CY:81 L:93 H:150, précisant le nom de l'objet, son angle de rotation, les coordonnées X et Y de son centre, sa largeur et sa hauteur. Des lignes de grille et des axes numériques marquent les dimensions de l'image, X allant de 0 à 320 et Y de 0 à 240.

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

Un canon bleu à rayure orange est centré dans le cadre, entouré d'un rectangle noir. Une ligne verticale rouge en pointillés s'étend du haut du cadre jusqu'au bord gauche du rectangle, indiquant l'abscisse de l'origine de ce dernier.

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

Un canon bleu à rayure orange est centré dans le cadre, entouré d'un rectangle noir. Une ligne pointillée rouge horizontale s'étend du côté gauche du cadre jusqu'au bord supérieur du rectangle, indiquant la coordonnée Y de l'origine du rectangle.

# 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

AiVision.AI_OBJECT

— Ballons de sport :
— Barils bleus :
— Barils oranges

AiVision.TAG_OBJECT

— Identifiants AprilTag

AiVision.COLOR_OBJECT

— Signatures en couleur

AiVision.CODE_OBJECT

— 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

index

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.

red

Un entier compris entre 0 et 255 pour la composante rouge de la couleur.

green

Un entier compris entre 0 et 255 pour la composante verte de la couleur.

blue

Un entier compris entre 0 et 255 pour la composante bleue de la couleur.

hangle

Une valeur flottante de 1 à 40 représentant la gamme de teintes en degrés.

hdsat

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

object

L’objet Colordesc à définir comme signature de couleur détectable.

# 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

index

L’index du code couleur, de 1 à 8. Remarque : si vous créez deux objets Codedesc avec le même index, le second remplacera le premier.

c1

Le Colordesc du code.

c2

Le deuxième objet Colordesc dans le code.

c3

Facultatif. Un troisième objet Colordesc.

c4

Facultatif. Un quatrième objet Colordesc.

Utilisation de code_description :
robot.vision.code_description(object)

Paramètre

Description

object

Un objet Codedesc à enregistrer comme code couleur détectable.

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