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.
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 |
|---|---|
|
Filtre l’ensemble de données pour n’inclure que les données de la signature spécifiée. Les signatures disponibles sont :
|
# 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 |
|---|---|
|
Le port intelligent auquel le capteur de vision est connecté est indiqué sous la forme |
|
Optionnel. Valeur de luminosité du capteur de vision, de 1 à 100. |
|
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 |
|---|---|
|
L’index de l’objet |
|
La valeur de |
|
La valeur de |
|
La valeur de |
|
La valeur de |
|
La valeur de |
|
La valeur de |
|
La valeur de |
|
La valeur de |
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 |
|---|---|
|
A previously created Color Signature. |
|
A previously created Color Signature. |
|
Facultatif. Une Signature de couleur créée précédemment. |
|
Facultatif. Une Signature de couleur créée précédemment. |
|
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)