Python específico para robots#
Introducción#
El patio de juegos V5RC 25-26 Push Back presenta métodos exclusivos de la construcción diseñada para este patio de juegos, incluidas dos opciones de motor, sensor de visión de inteligencia artificial, sensor óptico y sensor del sistema de posicionamiento de juego (GPS).
Todos los métodos VR estándar de VEXcode están disponibles para su uso en el patio de juegos V5RC 25-26 Push Back.
A continuación se muestra una lista de todos los métodos específicos de Playground disponibles:
Movimiento: mueve y rastrea los motores del robot.
Comportamiento
spin – Hace girar el motor o el grupo de motores seleccionado indefinidamente.
spin_for – Hace girar un motor o grupo durante una distancia específica en grados o vueltas.
spin_to_position – Gira un motor o un grupo de motores a una posición establecida.
stop – Detiene el giro de un motor o un grupo de motores específico.
Mutadores
set_position – Establece el valor del codificador de un motor o grupo de motores.
set_velocity – Establece la velocidad de un motor o grupo de motores como un porcentaje.
set_timeout – Limita el tiempo que un bloque de motor espera antes de darse por vencido si el movimiento está bloqueado.
Conseguidores
is_done – Devuelve un valor booleano que indica si el motor ya no está girando.
is_spinning – Devuelve un valor booleano que indica si el motor está girando actualmente.
posición – Devuelve la posición de rotación actual del motor en grados o vueltas.
velocidad – Devuelve la velocidad actual del motor en % o rpm.
AI Vision: captura y analiza objetos utilizando el sensor de visión AI.
Conseguidores
take_snapshot – Devuelve una tupla de objetos detectados según una firma determinada.
Propiedades
ancho – Ancho del objeto detectado en píxeles.
altura – 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.
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.
id – Clasificación o ID de etiqueta del objeto.
Detección: utilice los distintos sensores del robot.
Óptico
is_near_object – Devuelve si un objeto detectado está cerca del sensor óptico.
color – Devuelve el color detectado por el sensor óptico.
brillo – Devuelve el porcentaje de brillo detectado por el sensor.
hue – Devuelve el valor de tono del color detectado.
object_detected – Registra una función de devolución de llamada para cuando el sensor óptico detecta un objeto.
object_lost – Registra una función de devolución de llamada para cuando el sensor óptico pierde un objeto.
GPS
x_position – Devuelve la coordenada x actual de un sensor GPS en el campo.
y_position –Devuelve la coordenada y actual de un sensor GPS en el campo.
heading – Devuelve el rumbo al que se enfrenta actualmente el robot según las lecturas del sensor GPS de 0 a 359 grados.
Movimiento#
Comportamiento#
girar#
spin
hace girar un motor o un grupo de motores en la dirección especificada indefinidamente.
Uso:
Se puede utilizar uno de los dos objetos de motor disponibles con este método, como se muestra a continuación:
motor |
Dominio |
---|---|
|
|
|
|
Parámetros |
Descripción |
---|---|
dirección |
La dirección en la que debe girar el motor:
|
def main():
# Pick up a second Block
conveyor_motor.spin_for(FORWARD, 150, DEGREES)
intake_motor.spin(FORWARD)
drivetrain.drive_for(FORWARD, 350, MM)
girar_para#
spin_for
hace girar un motor o un grupo de motores una cantidad determinada de grados o vueltas.
Uso:
Se puede utilizar uno de los dos objetos de motor disponibles con este método, como se muestra a continuación:
motor |
Dominio |
---|---|
|
|
|
|
Parámetros |
Descripción |
---|---|
|
La dirección en la que debe girar el motor:
|
|
La distancia que debe girar el motor, expresada en un número entero. |
|
La unidad que representa la distancia a girar:
|
|
Opcional.
|
def main():
# Pick up a second Block
conveyor_motor.spin_for(FORWARD, 150, DEGREES)
intake_motor.spin(FORWARD)
drivetrain.drive_for(FORWARD, 350, MM)
girar a la posición#
spin_to
hace girar un motor o un grupo de motores a una posición determinada.
Uso:
Se puede utilizar uno de los dos objetos de motor disponibles con este método, como se muestra a continuación:
motor |
Dominio |
---|---|
|
|
|
|
Parámetros |
Descripción |
---|---|
|
El ángulo específico o número de vueltas que dará el motor. |
|
La unidad que representa el ángulo a rotar:
|
|
Opcional.
|
def main():
# Pick up a second Block
conveyor_motor.spin_to_position(150, DEGREES)
intake_motor.spin(FORWARD)
drivetrain.drive_for(FORWARD, 350, MM)
detener#
stop
detiene el giro de un motor o un grupo de motores.
Uso:
Se puede utilizar uno de los dos objetos de motor disponibles con este método, como se muestra a continuación:
motor |
Dominio |
---|---|
|
|
|
|
Parámetros |
Descripción |
---|---|
Este método no tiene parámetros. |
def main():
# Pick up a second Block
conveyor_motor.spin_for(FORWARD, 150, DEGREES)
intake_motor.spin(FORWARD)
drivetrain.drive_for(FORWARD, 350, MM)
intake_motor.stop()
Mutadores#
posición_establecida#
set_position
establece la posición del codificador de un motor o grupo de motores en el valor de posición dado.
Uso:
Se puede utilizar uno de los dos objetos de motor disponibles con este método, como se muestra a continuación:
motor |
Dominio |
---|---|
|
|
|
|
Parámetros |
Descripción |
---|---|
|
El entero específico que se debe configurar para el codificador del motor. |
|
La unidad que representa el ángulo a rotar:
|
def main():
# Pick up a second Block
conveyor_motor.set_position(-150, DEGREES)
conveyor_motor.spin_to_position(0, DEGREES)
intake_motor.spin(FORWARD)
drivetrain.drive_for(FORWARD, 350, MM)
establecer_velocidad#
set_velocity
establece la velocidad de un motor o grupo de motores.
Uso:
Se puede utilizar uno de los dos objetos de motor disponibles con este método, como se muestra a continuación:
motor |
Dominio |
---|---|
|
|
|
|
Parámetros |
Descripción |
---|---|
|
La velocidad a la que girará el motor V5, que varía de 0 a 100. |
|
La unidad que representa la nueva velocidad:
|
def main():
# Pick up a second Block
conveyor_motor.set_velocity(90, PERCENT)
conveyor_motor.spin_for(FORWARD, 200, DEGREES)
intake_motor.spin(FORWARD)
drivetrain.drive_for(FORWARD, 400, MM)
establecer_tiempo_de_espera#
set_timeout
establece un límite de tiempo para los comandos de movimiento de un motor o grupo de motores. Esto evita que los comandos de movimiento que no alcanzan su posición prevista impidan la ejecución de los comandos posteriores.
Uso:
Se puede utilizar uno de los dos objetos de motor disponibles con este método, como se muestra a continuación:
motor |
Dominio |
---|---|
|
|
|
|
Parámetros |
Descripción |
---|---|
|
La cantidad de tiempo que el motor esperará antes de detenerse. |
|
La unidad para representar el tiempo de espera:
|
def main():
# Pick up a second Block
conveyor_motor.set_timeout(0.5, SECONDS)
conveyor_motor.spin_to_position(1000, DEGREES)
intake_motor.spin(FORWARD)
drivetrain.drive_for(FORWARD, 400, MM)
Captadores#
está_hecho#
is_done
devuelve un valor booleano que indica si el motor o el grupo de motores especificado no está girando.
Verdadero
: el motor especificado no está girando.Falso
– El motor especificado está girando.
Uso:
Se puede utilizar uno de los dos objetos de motor disponibles con este método, como se muestra a continuación:
motor |
Dominio |
---|---|
|
|
|
|
Parámetros |
Descripción |
---|---|
Este método no tiene parámetros. |
def main():
# Pick up a second Block
conveyor_motor.spin_to_position(300, DEGREES, wait=False)
wait(0.1, SECONDS)
while not conveyor_motor.is_done():
drivetrain.drive(FORWARD)
intake_motor.spin(FORWARD)
wait(5, MSEC)
drivetrain.stop()
intake_motor.stop()
está girando#
is_spinning
devuelve un valor booleano que indica si el motor o el grupo de motores especificado está girando.
Verdadero
– El motor especificado está girando.Falso
: el motor especificado no está girando.
Uso:
Se puede utilizar uno de los dos objetos de motor disponibles con este método, como se muestra a continuación:
motor |
Dominio |
---|---|
|
|
|
|
Parámetros |
Descripción |
---|---|
Este método no tiene parámetros. |
def main():
# Pick up a second Block
conveyor_motor.spin_to_position(300, DEGREES, wait=False)
wait(0.1, SECONDS)
while conveyor_motor.is_spinning():
drivetrain.drive_for(FORWARD, 200, MM)
intake_motor.spin(FORWARD)
posición#
position
devuelve la distancia total que ha girado el motor o grupo de motores especificado.
Uso:
Se puede utilizar uno de los dos objetos de motor disponibles con este método, como se muestra a continuación:
motor |
Dominio |
---|---|
|
|
|
|
Parámetros |
Descripción |
---|---|
|
Las unidades que representan la posición del motor:
|
def main():
# Pick up a second Block
while conveyor_motor.position(DEGREES) < 150:
conveyor_motor.spin(FORWARD)
wait(2, MSEC)
conveyor_motor.stop()
intake_motor.spin(FORWARD)
drivetrain.drive_for(FORWARD, 400, MM)
velocidad#
velocity
devuelve la velocidad de rotación actual del motor o grupo de motores.
Uso:
Se puede utilizar uno de los dos objetos de motor disponibles con este método, como se muestra a continuación:
motor |
Dominio |
---|---|
|
|
|
|
Parámetros |
Descripción |
---|---|
|
La unidad que representa la posición del motor:
|
def main():
# Pick up a second block
conveyor_motor.set_velocity(100, PERCENT)
conveyor_motor.spin_to_position(300, DEGREES, wait=False)
wait(0.2, SECONDS)
brain.screen.print(conveyor_motor.velocity(PERCENT))
intake_motor.spin(FORWARD)
drivetrain.drive_for(FORWARD, 400, MM)
Visión de IA#
Captadores#
tomar_instantánea#
take_snapshot
filtra los datos del marco del sensor de visión de IA para devolver una tupla.
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.
Uso:
ai_vision.take_snapshot(signature)
Parámetros |
Descripción |
---|---|
|
¿De qué firma se obtienen los datos? La única firma disponible es:
|
def main():
# If an object is detected, pick it up
conveyor_motor.spin_for(FORWARD, 150, DEGREES)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
if ai_objects:
intake_motor.spin(FORWARD)
drivetrain.drive(FORWARD)
while not bumper.pressing():
wait(2, MSEC)
drivetrain.stop()
break
Propiedades#
Hay siete propiedades que se incluyen con cada objeto almacenado en una tupla después de utilizar take_snapshot
.
Algunos valores de propiedad se basan en la posición del objeto detectado en la vista del sensor de visión de IA en el momento en que se usó take_snapshot
. El sensor de visión de IA tiene una resolución de 320 x 240 píxeles.
.ancho#
.width
devuelve el ancho del objeto detectado en píxeles, que es un número entero entre 1 y 320.
def main():
# If an object is detected, approach and pick it up
conveyor_motor.spin_for(FORWARD, 150, DEGREES)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
if ai_objects:
if ai_objects[0].width > 65:
drivetrain.stop()
break
else:
intake_motor.spin(FORWARD)
drivetrain.drive(FORWARD)
.altura#
.height
devuelve la altura del objeto detectado en píxeles, que es un número entero entre 1 y 240.
def main():
# If an object is detected, approach and pick it up
conveyor_motor.spin_for(FORWARD, 150, DEGREES)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
if ai_objects:
if ai_objects[0].height > 55:
drivetrain.stop()
break
else:
intake_motor.spin(FORWARD)
drivetrain.drive(FORWARD)
.centroX#
.centerX
devuelve la coordenada x del centro del objeto detectado en píxeles, que es un número entero entre 0 y 320.
def main():
# Pick up a Block from the top left group
conveyor_motor.spin_for(FORWARD, 150, DEGREES)
drivetrain.turn_for(LEFT, 80, DEGREES)
drivetrain.drive_for(FORWARD, 200, MM)
drivetrain.set_turn_velocity(20, PERCENT)
drivetrain.turn(LEFT)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
if ai_objects:
if 140 < ai_objects[0].centerX < 180:
intake_motor.spin(FORWARD)
drivetrain.drive(FORWARD)
while not bumper.pressing():
wait(2, MSEC)
drivetrain.stop()
.centerY#
.centerY
devuelve la coordenada y del centro del objeto detectado en píxeles, que es un número entero entre 0 y 240.
def main():
# If an object is detected, approach and pick it up
conveyor_motor.spin_for(FORWARD, 150, DEGREES)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
if ai_objects:
if ai_objects[0].centerY > 140:
drivetrain.stop()
break
else:
intake_motor.spin(FORWARD)
drivetrain.drive(FORWARD)
.origenX#
.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 320.
def main():
# Pick up a Block from the top left group
conveyor_motor.spin_for(FORWARD, 150, DEGREES)
drivetrain.turn_for(LEFT, 80, DEGREES)
drivetrain.drive_for(FORWARD, 300, MM)
drivetrain.set_turn_velocity(20, PERCENT)
drivetrain.turn(RIGHT)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
if ai_objects:
if 100 < ai_objects[0].originX < 140:
intake_motor.spin(FORWARD)
drivetrain.drive(FORWARD)
while not bumper.pressing():
wait(2, MSEC)
drivetrain.stop()
.origenY#
.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 240.
def main():
# If an object is detected, approach and pick it up
conveyor_motor.spin_for(FORWARD, 150, DEGREES)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
if ai_objects:
if ai_objects[0].originY > 120:
drivetrain.stop()
break
else:
intake_motor.spin(FORWARD)
drivetrain.drive(FORWARD)
.identificación#
.id
devuelve el ID de la clasificación de IA detectada como un entero.
Clasificación de IA |
identificación |
Firma |
---|---|---|
Bloque azul |
1 |
|
Bloque rojo |
2 |
|
def main():
# Pick up a Red Block from the top left group
conveyor_motor.spin_for(FORWARD, 150, DEGREES)
drivetrain.turn_for(LEFT, 80, DEGREES)
drivetrain.drive_for(FORWARD, 300, MM)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
if ai_objects:
drivetrain.drive(FORWARD)
if (ai_objects[0].id) == 2:
intake_motor.spin(FORWARD)
while not bumper.pressing():
wait(2, MSEC)
drivetrain.stop()
break
Detección#
Óptico#
está_cerca_del_objeto#
is_near_object
devuelve un valor booleano que indica si el sensor óptico detecta o no un objeto cercano al sensor.
Verdadero
– El objeto está cerca del sensor óptico.Falso
: el objeto no está cerca del sensor óptico.
Uso:
optical.is_near_object()
Parámetros |
Descripción |
---|---|
Este método no tiene parámetros. |
def main():
# Move the preloaded Block to the top of the Conveyor
conveyor_motor.spin(FORWARD)
while not optical.is_near_object():
wait(2, MSEC)
conveyor_motor.stop()
color#
color
devuelve el color detectado por el sensor óptico:
Color devuelto: |
---|
<ul><li>`NINGUNO` – No se detecta ningún color. </li><li>`ROJO`</li><li>`VERDE`</li><li>`AZUL`</li><li>`AMARILLO`</li><li>`NARANJA`</li><li>`PÚRPURA`</li><li>`CIAN`</li></ul> |
Uso:
optical.color()
Parámetros |
Descripción |
---|---|
Este método no tiene parámetros. |
def main():
# Pick up and move a Blue Block to the top of the Conveyor
conveyor_motor.spin_for(FORWARD, 150, DEGREES)
intake_motor.spin(FORWARD)
drivetrain.drive_for(FORWARD, 360, MM)
conveyor_motor.spin(FORWARD)
while not optical.color() == BLUE:
wait(2, MSEC)
conveyor_motor.stop()
brillo#
brightness
devuelve el valor de brillo detectado por el sensor óptico como un porcentaje de 0% a 100%.
Uso:
optical.brightness()
Parámetros |
Descripción |
---|---|
Este método no tiene parámetros. |
def main():
# Move the preloaded Block to the top of the Conveyor
conveyor_motor.spin(FORWARD)
while not 0 < optical.brightness():
wait(2, MSEC)
conveyor_motor.stop()
matiz#
hue
devuelve el tono detectado por el sensor óptico.
Los valores de tono varían de 0 a 359 grados, correspondientes a las posiciones en la rueda de color que se muestran a continuación.
Uso:
optical.hue()
Parámetros |
Descripción |
---|---|
Este método no tiene parámetros. |
def main():
# Pick up and move a Blue Block to the top of the Conveyor
conveyor_motor.spin_for(FORWARD, 150, DEGREES)
intake_motor.spin(FORWARD)
drivetrain.drive_for(FORWARD, 360, MM)
conveyor_motor.spin(FORWARD)
while not 220 < optical.hue() < 260:
wait(2, MSEC)
conveyor_motor.stop()
objeto_detectado#
object_detected
registra una función de devolución de llamada para cuando el sensor óptico detecta un objeto.
Uso:
optical.object_detected(callback, arg)
Parámetros |
Descripción |
---|---|
|
Una función que se llamará cuando se detecte un objeto. |
|
Opcional. Una tupla que se utiliza para pasar argumentos a la función de devolución de llamada. |
def ready_block():
# Stop the conveyor when Block is at the Sensor
conveyor_motor.stop()
def main():
# Move the preloaded Block near the top of the Conveyor
conveyor_motor.spin(FORWARD)
optical.object_detected(ready_block)
objeto_perdido#
object_lost
registra una función de devolución de llamada para cuando el sensor óptico pierde un objeto detectado previamente.
Uso:
optical.object_lost(callback, arg)
Parámetros |
Descripción |
---|---|
|
Una función que se llamará cuando se pierda un objeto detectado. |
|
Opcional. Una tupla que se utiliza para pasar argumentos a la función de devolución de llamada. |
def ready_block():
# Stop the conveyor when Block is at the top
conveyor_motor.stop()
def main():
# Move the preloaded Block to the top of the Conveyor
conveyor_motor.spin(FORWARD)
optical.object_lost(ready_block)
GPS#
All GPS (Game Positioning System™) Sensor examples on this page use the default Playground starting position, C.
posición x#
x_position
returns the current x coordinate of a GPS (Game Positioning System™) Sensor on the Field.
Uso:
gps.x_position(unidades)
Parámetros |
Descripción |
---|---|
unidades |
La unidad del valor de desplazamiento, |
def main():
# Pick up a second Block
conveyor_motor.spin_for(FORWARD, 150, DEGREES)
intake_motor.spin(FORWARD)
drivetrain.drive(FORWARD)
while not gps.x_position(MM) > -795:
wait(2, MSEC)
drivetrain.stop()
posición y#
y_position
returns the current y coordinate of a GPS (Game Positioning System™) Sensor on the Field.
Uso:
gps.y_position(unidades)
Parámetros |
Descripción |
---|---|
unidades |
La unidad del valor de desplazamiento, |
def main():
# Pick up a second Block
conveyor_motor.spin_for(FORWARD, 150, DEGREES)
intake_motor.spin(FORWARD)
drivetrain.drive(FORWARD)
while not -450 > gps.y_position(MM):
wait(2, MSEC)
drivetrain.stop()
título#
heading
returns the heading that the robot is currently facing based on the GPS (Game Positioning System™) Sensor’s readings from 0 to 359 degrees.
Uso:
gps.heading()
Parámetros |
Descripción |
---|---|
Este método no tiene parámetros. |
def main():
# Score the preloaded Block into a Center Goal
drivetrain.set_turn_velocity(30, PERCENT)
drivetrain.turn(LEFT)
while not 40 > gps.heading():
wait(2, MSEC)
drivetrain.drive_for(FORWARD, 1000, MM)
drivetrain.turn(RIGHT)
while not gps.heading() > 310:
wait(2, MSEC)
drivetrain.drive_for(REVERSE, 400, MM)
conveyor_motor.spin(FORWARD)