Visión#

El sensor de visión para VEX EXP detecta y rastrea firmas y códigos de color. Esto le permite analizar su entorno y reaccionar según los datos visuales detectados. A continuación, se muestra una lista de todos los métodos:

Métodos – Obtener datos del sensor de visión.

  • take_snapshot – Captura datos para una firma de color o un código de color específico.

  • largest_object – Selecciona inmediatamente el objeto más grande de la instantánea.

  • instalado – Si el sensor de visión está conectado al EXP Brain.

Propiedades: Datos del objeto devueltos desde take_snapshot.

  • .exists – Si el objeto existe en la detección actual como un valor booleano.

  • .width – Ancho del objeto detectado en píxeles.

  • .height – Altura del objeto detectado en píxeles.

  • .centerX – Posición X del centro del objeto en píxeles.

  • .centerY – Posición Y del centro del objeto en píxeles.

  • .angle – Orientación del código de color en grados.

  • .originX – Posición X de la esquina superior izquierda del objeto en píxeles.

  • .originY – Posición Y de la esquina superior izquierda del objeto en píxeles.

Constructores: inicializan y configuran manualmente el sensor de visión.

In VEXcode, the initialization of the Vision Sensor and its configured Color Signatures and Color Codes is done automatically. For the examples below, the configured Vision Sensor will be named vision_1. To manually initialize and construct a Vision Sensor and its Color Signatures and Color Codes, refer to the Constructors section on this page.

Métodos#

take_snapshot#

take_snapshot filters the data from the Vision Sensor frame to return a tuple. The Vision Sensor can detect configured Color Signatures and Color Codes.

Las Firmas de color y los Códigos de color deben configurarse primero en Vision Utility antes de poder usarse con este método.

La tupla almacena objetos ordenados de mayor a menor por ancho, comenzando en el índice 0. Se puede acceder a las propiedades de cada objeto mediante su índice. Si no se detectan objetos coincidentes, se devuelve una tupla vacía.

Usage:
vision_1.take_snapshot(SIGNATURE)

Parámetros

Descripción

SIGNATURE

What signature to get data of. This is the name of the Vision Sensor, two underscores, and then the Color Signature’s or Color Code’s name. For example: 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:
        drivetrain.drive_for(FORWARD, 10, MM)
    wait(5, MSEC)

Firmas de color#

Una firma de color es un color único que el sensor de visión puede reconocer. Estas firmas permiten al sensor detectar y rastrear objetos según su color. Una vez configurada una firma de color, el sensor puede identificar objetos con ese color específico en su campo de visión. Las firmas de color se utilizan con take_snapshot para procesar y detectar objetos de color en tiempo real.

In order to use a configured Color Signature in a project, its name must be the name of the Vision Sensor, two underscores, and then the Color Signature’s name. For example: vision_1__RED_BOX.

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

Códigos de color#

Un código de color es un patrón estructurado compuesto por firmas de color dispuestas en un orden específico. Estos códigos permiten al sensor de visión reconocer patrones de color predefinidos. Los códigos de color son útiles para identificar objetos complejos o crear marcadores únicos para la navegación autónoma.

In order to use a configured Color Code in a project, its name must be the name of the Vision Sensor, two underscores, and then the Color Code’s name. For example: vision_1__BOX_CODE.

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

largest_object#

largest_object retrieves the largest detected object to get data from in the tuple returned from the latest use of take_snapshot.

Este método se puede utilizar para obtener siempre el objeto más grande de una tupla sin especificar un índice.

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:
        if 140 < vision_1.largest_object().centerX < 180: 
            drivetrain.stop()

    wait(10,MSEC)

installed#

installed returns a Boolean indicating whether the Vision Sensor is currently connected to the EXP Brain.

  • True – The Vision Sensor is connected to the EXP Brain.

  • False – The Vision Sensor is not connected to the EXP Brain.

Parámetros

Descripción

Este método no tiene parámetros.

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

Propiedades#

Hay ocho propiedades que se incluyen con cada objeto almacenado en una tupla después de utilizar take_snapshot.

Some property values are based off of the detected object’s position in the Vision Sensor’s view at the time that take_snapshot was used. The Vision Sensor has a resolution of 316 by 212 pixels.

.exists#

.exists returns a Boolean indicating if the index exists in the tuple or not.

  • True: The index exists.

  • False: The index does not exist.

# Check if at least at least one red objects 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:
        if red_objects[0].exists:
            brain.screen.print("At least 1")
            
    else:
        brain.screen.print("No red objects")

    wait(0.5, SECONDS)

.width#

.width returns the width of the detected object in pixels, which is an integer between 1 and 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:
        if blue_box[0].width < 100:
            drivetrain.drive_for(FORWARD, 10, MM)
    else:
        drivetrain.stop()

    wait(50, MSEC)

.height#

.height returns the height of the detected object in pixels, which is an integer between 1 and 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:
        if blue_box[0].height < 100:
            drivetrain.drive_for(FORWARD, 10, MM)
    else:
        drivetrain.stop()

    wait(50, MSEC)

.centerX#

.centerX returns the x-coordinate of the detected object’s center in pixels, which is an integer between 0 and 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:
        if 140 < vision_1.largest_object().centerX < 180: 
            drivetrain.stop()

    wait(10,MSEC)

.centerY#

.centerY returns the y-coordinate of the detected object’s center in pixels, which is an integer between 0 and 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:
        if blue_box[0].centerY < 140:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()

    wait(50, MSEC)

.angle#

.angle returns the orientation of the detected object in degrees, which is an integer between 0 and 316.

# 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: 
        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 returns the x-coordinate of the top-left corner of the detected object’s bounding box in pixels, which is an integer between 0 and 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:
        if red_box[0].originX < 160:
            brain.screen.print("To the left!")
        else: 
            brain.screen.print("To the right!")

    wait(50, MSEC)

.originY#

.originY returns the y-coordinate of the top-left corner of the detected object’s bounding box in pixels, which is an integer between 0 and 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:
        if red_box[0].originY < 80:
            brain.screen.print("Far")
        else: 
            brain.screen.print("Close")

    wait(50, MSEC)

Constructores#

Constructors are used to manually create Vision, Signature, and Code objects, which are necessary for configuring the Vision Sensor outside of VEXcode.

For the examples below, the configured Vision Sensor will be named vision_1, and the configured Color Signature objects, such as RED_BOX, will be used in all subsequent examples throughout this API documentation when referring to Vision class methods.

Vision Sensor#

Vision creates a Vision Sensor.

Uso

Vision(port, brightness, sigs)

Parámetros

Descripción

port

Un Puerto inteligente válido al que está conectado el sensor de visión.

brightness

Opcional. El valor de brillo del sensor de visión, de 1 a 100.

sigs

Opcional. El nombre de uno o más objetos Firma de color o Código de color.

# Create a new Signature "RED_BOX" with the Colordesc class
RED_BOX = Signature(1, -3911, -3435, -3673,10879, 11421, 11150,2.5, 0)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the "RED_BOX" Signature.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX)

# Move forward if a red object is detected
while True:
    red_object = vision_1.take_snapshot(RED_BOX)
    if red_object:
        drivetrain.drive_for(FORWARD, 10, MM)
    wait(5, MSEC)

Color Signature#

Signature creates a Color Signature. Up to seven different Color Signatures can be stored on a Vision Sensor at once.

Uso:

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

Parámetro

Descripción

index

The Signature object’s index, from 1 - 7. Note: Creating two Signature objects with the same index number will cause the second created object to override the first.

uMin

The value from uMin in the Vision Utility.

uMax

The value from uMax in the Vision Utility.

uMean

The value from uMean in the Vision Utility.

vMin

The value from vMin in the Vision Utility.

vMax

The value from vMax in the Vision Utility.

vMean

The value from vMean in the Vision Utility.

rgb

The value from rgb in the Vision Utility.

type

The value from type in the Vision Utility.

Para obtener los valores necesarios para crear una Firma de Color, acceda a la Utilidad de Visión. Una vez configurada la Firma de Color, copie los valores de los parámetros desde la ventana de Configuración.

# Create a new Signature RED_BOX with the Colordesc class
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the RED_BOX Signature.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX)

# Move forward if a red object is detected
while True:
    red_object = vision_1.take_snapshot(RED_BOX)
    if red_object:
        drivetrain.drive_for(FORWARD, 10, MM)
    wait(5, MSEC)

Color Code#

Code creates a Color Code. It requires at least two already defined Color Signatures in order to be used. Up to eight different Color Codes can be stored on a Vision Sensor at once.

Uso:

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

Parámetro

Descripción

sig1

Una Firma de color creada previamente.

sig2

Una Firma de color creada previamente.

sig3

Opcional. Una Firma de color creada previamente.

sig4

Opcional. Una Firma de color creada previamente.

sig5

Opcional. Una Firma de color creada previamente.

# Create two new Signatures for a red and blue box
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 for a red box to the left of a blue box
RED_BLUE = Code(RED_BOX, BLUE_BOX)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the red_box and blue_box Signatures.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX, BLUE_BOX)

# Display a message if Color Code is detected
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_screen()
    # Change to any configured Color Code
    box_code = vision_1.take_snapshot(RED_BLUE)
    if box_code:
        brain.screen.print("Color code")
        brain.screen.next_row()
        brain.screen.print("detected!")
        wait(100, MSEC)