Vision#

Introduction#

Le capteur de vision pour VEX EXP détecte et suit les signatures et codes couleurs. Cela lui permet d’analyser son environnement et de réagir en fonction des données visuelles détectées.

Cette page utilise vision_1, RED_BOX, et BOX_CODE comme exemples de noms pour le capteur de vision, la signature couleur et le code couleur, respectivement. Remplacez-les par vos propres noms configurés, selon vos besoins.

Vous trouverez ci-dessous la liste de toutes les méthodes :

Générateurs – Récupérer les données du capteur de vision.

  • take_snapshot – Capture les données pour une signature de couleur ou un code couleur spécifique.

  • largest_object – Sélectionner le plus grand objet de l’instantané.

  • installed – Indique si le capteur de vision est connecté au cerveau EXP.

Propriétés – Données de l’objet renvoyées par take_snapshot.

  • .exists – Indique si l’objet existe dans la détection actuelle.

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

  • .angle – Orientation du code couleur.

  • .originX – Position X du coin supérieur gauche de l’objet.

  • .originY – Position Y du coin supérieur gauche de l’objet.

Constructeurs – Initialisez et configurez manuellement le capteur de vision et ses signatures.

  • Vision – Crée un capteur de vision.

  • Signature – Crée une signature couleur.

  • Code – Crée un code couleur.

Getters#

take_snapshot#

take_snapshot filtre les données de la trame du capteur de vision en une seule signature — une description enregistrée de quelque chose que le capteur peut reconnaître, comme 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 Vision avant de pouvoir être utilisés avec cette méthode.

The tuple stores objects ordered from largest to smallest by width, starting at index 0. Each object’s properties can be accessed using its index. An empty tuple is returned if no matching objects are detected.

Usage:
vision_1.take_snapshot(SIGNATURE)

Paramètres

Description

SIGNATURE

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

  • Signatures de couleur ou codes couleur : le nom du capteur de vision, deux tirets bas, puis le nom de la signature de couleur ou du code couleur. Par exemple : vision_1__RED_BOX.

# Move forward if a red object is detected
while True:
    red_box = vision_1.take_snapshot(vision_1__RED_BOX)
    if red_box[0].exists:
        drivetrain.drive_for(FORWARD, 10, MM)
    wait(5, MSEC)

Signatures de couleur#

Une signature de couleur est une couleur unique que le capteur de vision 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 la fonction take_snapshot pour traiter et détecter les objets colorés en temps réel.

Pour utiliser une signature de couleur configurée dans un projet, son nom doit être composé du nom du capteur de vision, de deux traits de soulignement, puis du nom de la signature de couleur. Par exemple : vision_1__RED_BOX.

# Display if any objects match the RED_BOX signature
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_row(1)
    # Change to any configured Color Signature
    red_box = vision_1.take_snapshot(vision_1__RED_BOX)
    if red_box[0].exists:
        brain.screen.print("Color signature detected!")
        wait(100, MSEC)

Codes de couleur#

Un code couleur est un motif structuré composé de signatures chromatiques agencées selon un ordre précis. Ces codes permettent au capteur de vision 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.

Pour utiliser un code couleur configuré dans un projet, son nom doit être composé du nom du capteur de vision, de deux traits de soulignement, puis du nom du code couleur. Par exemple : vision_1__BOX_CODE.

# Display if any objects match the BOX_CODE code
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_row(1)
    # Change to any configured Color Code
    box_code = vision_1.take_snapshot(vision_1__BOX_CODE)
    if box_code[0].exists:
        brain.screen.print("Color code detected!")
        wait(100, MSEC)

largest_object#

largest_object récupère le plus grand objet détecté pour obtenir des données à partir du tuple renvoyé par la dernière utilisation de take_snapshot.

Cette méthode permet d’obtenir systématiquement l’objet le plus grand d’un tuple sans spécifier d’index.

Usage:
vision_1.largest_object()

# Turn slowly until the largest object is centered in
# front of the Vision Sensor
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)

while True:
    red_box = vision_1.take_snapshot(vision_1__RED_BOX)

    if red_box[0].exists:
        if 140 < vision_1.largest_object().centerX < 180: 
            drivetrain.stop()

    wait(10,MSEC)

installed#

installed renvoie une valeur booléenne indiquant si le capteur de vision est actuellement connecté au cerveau EXP.

  • True – Le capteur de vision est connecté au cerveau EXP.

  • False – Le capteur de vision n’est pas connecté au cerveau EXP.

Usage:
vision_1.installed()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# Display a message if the Vision Sensor is connected
if vision_1.installed():
    brain.screen.print("Vision Sensor Installed!")

Propriétés#

Il existe huit propriétés qui sont incluses avec chaque objet stocké dans un tuple après l’utilisation de take_snapshot.

Toutes les valeurs des propriétés décrivent la position et la taille de l’objet détecté dans le champ de vision du capteur de vision au moment où take_snapshot a été utilisée. Ces valeurs sont exprimées en pixels, selon la résolution du capteur (316 x 212 pixels).

.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 one red object is detected
# You will receive an error if no objects are detected

while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    red_objects = vision_1.take_snapshot(vision_1__RED_BOX)

    if red_objects[0].exists:
        brain.screen.print("At least 1")
            
    else:
        brain.screen.print("No red objects")

    wait(0.5, SECONDS)

.width#

.width renvoie la largeur de l’objet détecté en pixels, qui est un entier compris entre 1 et 316.

# Move towards a blue object until its width is
# larger than 100 pixels
while True:
    blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)

    if blue_box[0].exists:
        if blue_box[0].width < 100:
            drivetrain.drive_for(FORWARD, 10, MM)
    else:
        drivetrain.stop()

    wait(50, MSEC)

.height#

.height renvoie la hauteur de l’objet détecté en pixels, qui est un entier compris entre 1 et 212.

# Move towards a blue object until its height is
# larger than 100 pixels
while True:
    blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)

    if blue_box[0].exists:
        if blue_box[0].height < 100:
            drivetrain.drive_for(FORWARD, 10, MM)
    else:
        drivetrain.stop()

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

# Turn slowly until the largest blue object is centered
# in front of the Vision Sensor.
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)

while True:
    blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)

    if blue_box[0].exists:
        if 140 < vision_1.largest_object().centerX < 180: 
            drivetrain.stop()

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

# Move towards a blue object until its
# center y-coordinate is more than 140 pixels
while True:
    blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)

    if blue_box[0].exists:
        if blue_box[0].centerY < 140:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()

    wait(50, MSEC)

.angle#

.angle renvoie l’orientation de l’objet détecté en degrés, qui est un entier compris entre 0 et 359.

# Turn left or right depending on how a
# configured box code is rotated
while True: 
    box_code = vision_1.take_snapshot(vision_1__BOX_CODE)

    if box_code[0].exists: 
        if 70 < box_code[0].angle < 110:
            drivetrain.turn_for(RIGHT, 45, DEGREES)
            
        elif 250 < box_code[0].angle < 290:
            drivetrain.turn_for(LEFT, 45, DEGREES)
        
        else:
            drivetrain.stop()

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

# Display if a red object is to the
# left or the right
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1,1)
    
    red_box = vision_1.take_snapshot(vision_1__RED_BOX)
    
    if red_box[0].exists:
        if red_box[0].originX < 160:
            brain.screen.print("To the left!")
        else: 
            brain.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 212.

# Display if a red object is close or far
# from the robot
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1,1)
    
    red_box = vision_1.take_snapshot(vision_1__RED_BOX)

    if red_box[0].exists:
        if red_box[0].originY < 80:
            brain.screen.print("Far")
        else: 
            brain.screen.print("Close")

    wait(50, MSEC)

Constructeurs#

Les constructeurs sont utilisés pour créer manuellement Vision, Signature, et Code , qui sont nécessaires pour configurer le capteur de vision en dehors de VEXcode.

Vision#

Vision crée un capteur de vision.

Usage

Vision(smartport, brightness, sigs)

Paramètres

Description

smartport

Le port intelligent auquel le capteur de vision est connecté est indiqué sous la forme Ports.PORTx , où x représente le numéro du port.

brightness

Optionnel. Valeur de luminosité du capteur de vision, de 1 à 100.

sigs

Facultatif. Le nom d’un ou plusieurs objets Signature de couleur ou Code de couleur séparés par des virgules (,).

# Create the Color Signatures
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Signature(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)

# Create the Color Code
BOX_CODE = Code(RED_BOX, BLUE_BOX)

"""
Create a Vision Sensor with the following values:
- Port 1
- brightness: 80
- RED_BOX and BOX_CODE signatures
"""
vision_1 = Vision(Ports.PORT1, 80, RED_BOX, BOX_CODE)

Signature#

La signature Signature crée une signature couleur. Jusqu’à sept signatures couleur différentes peuvent être stockées simultanément sur un capteur de vision.

Usage:

Signature(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)

Paramètre

Description

index

L’index de l’objet Signature , de 1 à 7. Remarque : La création de deux objets Signature avec le même numéro d’index entraînera l’écrasement du premier par le deuxième objet créé.

uMin

La valeur de uMin dans l’utilitaire Vision.

uMax

La valeur de uMax dans l’utilitaire de vision.

uMean

La valeur de uMean dans l’utilitaire Vision.

vMin

La valeur de vMin dans l’utilitaire Vision.

vMax

La valeur de vMax dans l’utilitaire Vision.

vMean

La valeur de vMean dans l’utilitaire Vision.

rgb

La valeur de rgb dans l’utilitaire Vision.

type

La valeur de type dans l’utilitaire Vision.

Pour obtenir les valeurs nécessaires à la création d’une signature de couleur, accédez à l’utilitaire Vision. Une fois la signature de couleur configurée, copiez les valeurs des paramètres depuis la fenêtre de configuration.

"""
Create a Color Signature with the following values:
- index: 1
- uMin: 10121
- uMax: 10757
- uMean: 10439
- vMin: -1657
- vMax: -1223
- vMean: -1440
- rgb: 2.5
- type: 1
"""
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)

Code#

Le code Code crée un code couleur. Son utilisation nécessite au moins deux signatures de couleur prédéfinies. Un capteur de vision peut stocker simultanément jusqu’à huit codes couleur différents.

Usage:

Code(sig1, sig2, sig3, sig4, sig5)

Paramètre

Description

sig1

A previously created Color Signature.

sig2

A previously created Color Signature.

sig3

Facultatif. Une Signature de couleur créée précédemment.

sig4

Facultatif. Une Signature de couleur créée précédemment.

sig5

Facultatif. Une Signature de couleur créée précédemment.

# Create the Color Signatures
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Signature(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)

# Create a Color Code with the Color Signatures
BOX_CODE = Code(RED_BOX, BLUE_BOX)