Visión#

Introducción#

El sensor de visión para VEX V5 detecta y rastrea las firmas de color y los códigos de color. Esto permite que el sensor de visión analice su entorno y reaccione en función de los datos visuales detectados.

Esta página utiliza vision_1, RED_BOX BOX_CODE como ejemplos de nombres de sensor de visión, firma de color y código de color, respectivamente. Reemplácelos con sus propios nombres configurados según sea necesario.

A continuación se muestra una lista de todos los métodos:

Getters – Obtenga datos del sensor de visión.

  • take_snapshot: captura datos para una firma de color o código de color específico.

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

  • installed – Si el sensor de visión está conectado al cerebro V5.

Propiedades: datos de objetos devueltos de take_snapshot.

  • .exists – Si el objeto existe en la detección actual como un 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 – Inicializar y configurar manualmente el sensor de visión y sus firmas.

  • Vision – Crea un sensor de visión.

  • Signature – Crea una firma de color.

  • Code – Crea un código de color.

Getters#

take_snapshot#

take_snapshot filtra los datos del marco del sensor de visión en una sola firma (una descripción guardada de algo que el sensor puede reconocer, como una firma de color configurada o un código de color) y devuelve una tupla.

Las firmas de color y los códigos de color deben configurarse primero en Vision Utility antes de que puedan 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 utilizando su índice. Se devuelve una tupla vacía si no se detectan objetos coincidentes.

Usage:
vision_1.take_snapshot(SIGNATURE)

Parámetros

Descripción

SIGNATURE

Filtra el conjunto de datos para incluir solo los datos de la firma dada. Las firmas disponibles son

  • : Firmas de color o códigos de color: el nombre del sensor de visión, dos guiones bajos y luego el nombre de la firma de color o el código de color. Por ejemplo: 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)

Firmas de color#

Una firma de color es un color único que el sensor de visión puede reconocer. Estas firmas permiten que el sensor detecte y rastree objetos en función de su color. Una vez que se configura 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.

Para utilizar una Firma de Color configurada en un proyecto, su nombre debe ser el nombre del Sensor de Visión, dos guiones bajos y luego el nombre de la Firma de Color. Por ejemplo: 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)

Códigos de color#

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

Para utilizar un código de color configurado en un proyecto, su nombre debe ser el nombre del sensor de visión, dos guiones bajos y luego el nombre del código de color. Por ejemplo: 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 recupera el objeto detectado más grande del que obtener datos en la tupla devuelta por el último uso de 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[0].exists:
        if 140 < vision_1.largest_object().centerX < 180: 
            drivetrain.stop()

    wait(10,MSEC)

installed#

installed devuelve un booleano que indica si el sensor de visión está conectado actualmente al cerebro V5.

  • True : el sensor de visión está conectado al cerebro V5.

  • False – El sensor de visión no está conectado al cerebro V5.

Usage:
vision_1.installed()

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 Installed!")

Propiedades#

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

Todos los valores de propiedad describen la posición y el tamaño del objeto detectado en la vista del sensor de visión en el momento en que se utilizó take_snapshot. Estos valores se miden en píxeles, en función de la resolución de 316 por 212 píxeles del sensor.

.exists#

.exists devuelve un booleano que indica si el índice existe en la tupla o no.

  • True: El índice existe.

  • False: El índice no existe.

# 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 devuelve el ancho del objeto detectado en píxeles, que es un número entero entre 1 y 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 devuelve la altura del objeto detectado en píxeles, que es un número entero entre 1 y 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 devuelve la coordenada x del centro del objeto detectado en píxeles, que es un número entero entre 0 y 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 devuelve la coordenada y del centro del objeto detectado en píxeles, que es un número entero entre 0 y 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 devuelve la orientación del objeto detectado en grados, que es un número entero entre 0 y 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 devuelve la coordenada x de la esquina superior izquierda del cuadro delimitador del objeto detectado en píxeles, que es un número entero entre 0 y 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 devuelve la coordenada y de la esquina superior izquierda del cuadro delimitador del objeto detectado en píxeles, que es un número entero entre 0 y 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)

Constructores#

Los constructores se utilizan para crear manualmente los objetos Vision, Signaturey Code , que son necesarios para configurar el sensor de visión fuera de VEXcode.

Vision#

Vision crea un sensor de visión.

Uso

Vision(smartport, brightness, sigs)

Parámetros

Descripción

smartport

El puerto inteligente al que está conectado el sensor de visión, escrito como Ports.PORTx donde x es el número del puerto.

brightness

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

sigs

Opcional. El nombre de uno o más objetos Color Signature o Color Code separados por comas (,).

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

Signature crea una firma de color. Se pueden almacenar hasta siete firmas de color diferentes en un sensor de visión a la vez.

Uso:

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

Parámetro

Descripción

index

Índice del objeto Signature, del 1 al 7. Nota: La creación de dos objetos Signature con el mismo número de índice hará que el segundo objeto creado anule al primero.

uMin

El valor de uMin en Vision Utility.

uMax

El valor de uMax en Vision Utility.

uMean

El valor de uMean en Vision Utility.

vMin

El valor de vMin en Vision Utility.

vMax

El valor de vMax en Vision Utility.

vMean

El valor de vMean en Vision Utility.

rgb

El valor de rgb en Vision Utility.

type

El valor de type en Vision Utility.

Para obtener los valores para crear una firma de color, vaya a Vision Utility. Una vez configurada una Firma de color, copie los valores de los parámetros de la ventana Configuración.

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

Code crea un código de color. Requiere al menos dos firmas de color ya definidas para ser utilizadas. Se pueden almacenar hasta ocho códigos de color diferentes en un sensor de visión a la vez.

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