机器人专用 Python#

介绍#

V5RC 24-25 高风险 游乐场采用了专为该游乐场设计的独有结构,包括两种电机选项、AI 视觉传感器、光学传感器、旋转传感器和游戏定位系统 (GPS) 传感器。

所有标准的 VEXcode VR 方法都可用于 V5RC 25-26 Push Back 游乐场。

以下是所有可用的 Playground 特定方法列表:

运动控制——移动并跟踪机器人的电机。

  • 操作

    • spin – Spins the selected motor or motor group indefinitely.

    • spin_for – Spins a motor or group for a specific distance in degrees or turns.

    • spin_to_position – Spins a motor or motor group to a set position.

    • stop – Stops a specific motor or motor group from spinning.

  • 变异因子

    • set_position – Sets the encoder value of a motor or motor group.

    • set_velocity – Sets the speed of a motor or motor group as a percentage.

    • set_timeout – Limits how long a motor block waits before giving up if movement is blocked.

  • Getters

    • is_done – Returns a Boolean indicating whether the motor is no longer spinning.

    • is_spinning – Returns a Boolean indicating whether the motor is currently spinning.

    • position – Returns the motor’s current rotational position in degrees or turns.

    • velocity – Returns the motor’s current velocity in % or rpm.

人工智能视觉 - 使用人工智能视觉传感器捕捉和分析物体。

  • Getters

    • take_snapshot – Returns a tuple of detected objects based on a given signature.

  • 特性

    • width – Width of the detected object in pixels.

    • height – Height of the detected object in pixels.

    • centerX – X position of the object’s center in pixels.

    • centerY – Y position of the object’s center in pixels.

    • originX – X position of the object’s top-left corner in pixels.

    • originY – Y position of the object’s top-left corner in pixels.

    • id – Classification or tag ID of the object.

感知——利用机器人的各种传感器。

  • 光学的

    • is_near_object – Returns whether a detected object is near the Optical Sensor.

    • color – Returns the color detected from the Optical Sensor.

    • brightness – Returns the brightness percentage detected by the sensor.

    • hue – Returns the hue value of the detected color.

    • object_detected – Registers a callback function for when the Optical Sensor detects an object.

    • object_lost – Registers a callback function for when the Optical Sensor loses an object.

  • 旋转

    • set_position – Sets the current position of the Rotation Sensor to a specific value.

    • angle – Returns the current angle of the sensor between 0 and 359.99 degrees.

    • position – Returns the total rotational position in degrees or turns.

  • 全球定位系统

    • x_position – Returns the current x coordinate of a GPS Sensor on the field.

    • y_position – Returns the current y coordinate of a GPS Sensor on the field.

    • heading – Returns the heading that the robot is currently facing based on the GPS Sensor’s readings from 0 to 359 degrees.

本页示例使用 Playground 的默认起始位置。

运动#

行动#

旋转#

spin spins a motor or motor group in the specified direction indefinitely.

用法:
此方法可以使用两种可用的电机对象之一,如下所示:

发动机

命令

arm_motor

arm_motor.spin(direction) — Arm Motor

pusher_motor

pusher_motor.spin(direction) — Pusher Motor

参数

描述

direction

The direction for the motor to spin:

  • FORWARD — Spins the Arm up or the Pusher down the arm.
  • REVERSE — Spins the Arm down or moves the Pusher up the arm.
def main():
    # Lift the Arm up before moving
    arm_motor.spin(FORWARD)
    wait(1, SECONDS)
    arm_motor.stop()

# VR threads — Do not delete
vr_thread(main)

spin_for#

spin_for spins a motor or motor group for a given amount of degrees or turns.

用法:
此方法可以使用两种可用的电机对象之一,如下所示:

发动机

命令

arm_motor

arm_motor.spin_for(direction, distance, units, wait) — Arm Motor

pusher_motor

pusher_motor.spin_for(direction, distance, units, wait) — Pusher Motor

参数

描述

direction

The direction for the motor to spin:

  • FORWARD — Spins the Arm up or the Pusher down the arm.
  • REVERSE — Spins the Arm down or moves the Pusher up the arm.

distance

电机旋转的距离,以整数表示。

units

The unit that represents the distance to rotate:

  • DEGREES
  • TURNS

wait

Optional.

  • wait=True (default) — The robot waits until spin_for is complete before executing the next line of code.
  • wait=False — The robot starts the action and moves on to the next line of code right away, without waiting for spin_for to finish.

def main():
    # Lift the Arm up before moving
    arm_motor.spin_for(FORWARD, 400, DEGREES)

# VR threads — Do not delete
vr_thread(main)

自旋至位置#

spin_to spins a motor or motor group to a given position.

用法:
此方法可以使用两种可用的电机对象之一,如下所示:

发动机

命令

arm_motor

arm_motor.spin_to_position(angle, units, wait=True) — Arm Motor

pusher_motor

pusher_motor.spin_to_position(angle, units, wait=True) — Pusher Motor

参数

描述

angle

电机旋转的具体角度或圈数。

units

The unit that represents the angle to rotate to:

  • DEGREES
  • TURNS

wait

Optional.

  • wait=True (default) — The robot waits until spin_to_position is complete before executing the next line of code.
  • wait=False — The robot starts the action and moves on to the next line of code right away, without waiting for spin_to_position to finish.

def main():
    # Lift the Arm up before moving
    arm_motor.spin_to_position(400, DEGREES)

# VR threads — Do not delete
vr_thread(main)

停止#

stop stops a motor or motor group from spinning.

用法:
此方法可以使用两种可用的电机对象之一,如下所示:

发动机

命令

arm_motor

arm_motor.stop() — Arm Motor

pusher_motor

pusher_motor.stop() — Pusher Motor

参数

描述

此方法没有参数。

def main():
    # Lift the Arm up before moving
    arm_motor.spin(FORWARD)
    wait(1, SECONDS)
    arm_motor.stop()

# VR threads — Do not delete
vr_thread(main)

变异体#

设置位置#

set_position sets a motor’s or motor group’s encoder position to the given position value.

用法:
此方法可以使用两种可用的电机对象之一,如下所示:

发动机

命令

arm_motor

arm_motor.set_position(position, units) — Arm Motor

pusher_motor

pusher_motor.set_position(position, units) — Pusher Motor

参数

描述

position

要设置的电机编码器的具体整数值。

units

The unit that represents the angle to rotate to:

  • DEGREES
  • TURNS
def main():
    # Make the raised Arm as the new 0 degrees position
    arm_motor.spin_to_position(400, DEGREES)
    arm_motor.set_position(0, DEGREES)

# VR threads — Do not delete
vr_thread(main)

设置速度#

set_velocity sets the speed of a motor or motor group.

用法:
此方法可以使用两种可用的电机对象之一,如下所示:

发动机

命令

arm_motor

arm_motor.set_velocity(velocity, units) — Arm Motor

pusher_motor

pusher_motor.set_velocity(velocity, units) — Pusher Motor

参数

描述

velocity

V5 电机的转速,范围从 0 到 100。

units

The unit that represents the new velocity:

  • PERCENT
def main():
    # Lift the Arm up before moving
    arm_motor.set_velocity(100, PERCENT)
    arm_motor.spin_to_position(400, DEGREES)

# VR threads — Do not delete
vr_thread(main)

设置超时#

set_timeout sets a time limit for a motor’s or motor group’s movement commands. This prevents Motion commands that do not reach their intended position from preventing subsequent commands from running.

用法:
此方法可以使用两种可用的电机对象之一,如下所示:

发动机

命令

arm_motor

arm_motor.set_timeout(value, units) — Arm Motor

pusher_motor

pusher_motor.set_timeout(value, units) — Pusher Motor

参数

描述

value

电机停止前等待的时间。

units

The unit to represent the timeout:

  • SECONDS
  • MSEC — milliseconds
def main():
    # Lift the Arm up before moving
    arm_motor.set_timeout(1, SECONDS)
    arm_motor.spin_for(FORWARD, 3, TURNS)

# VR threads — Do not delete
vr_thread(main)

获取器#

已完成#

is_done returns a Boolean indicating whether the specified motor or motor group is not spinning.

  • True – The specified motor is not spinning.

  • False – The specified motor is spinning.

用法:
此方法可以使用两种可用的电机对象之一,如下所示:

发动机

命令

arm_motor

arm_motor.is_done() — Arm Motor

pusher_motor

pusher_motor.is_done() — Pusher Motor

参数

描述

此方法没有参数。

正在旋转#

is_spinning returns a Boolean indicating whether the specified motor or motor group is spinning.

  • True – The specified motor is spinning.

  • False – The specified motor is not spinning.

用法:
此方法可以使用两种可用的电机对象之一,如下所示:

发动机

命令

arm_motor

arm_motor.is_spinning() — Arm Motor

pusher_motor

pusher_motor.is_spinning() — Pusher Motor

参数

描述

此方法没有参数。

位置#

position returns the total distance the specified motor or motor group has rotated.

用法:
此方法可以使用两种可用的电机对象之一,如下所示:

发动机

命令

arm_motor

arm_motor.position(units) — Arm Motor

pusher_motor

pusher_motor.position(units) — Pusher Motor

参数

描述

units

The units that represent the motor’s position:

  • DEGREES
  • TURNS

速度#

velocity returns the current rotational speed of the motor or motor group.

用法:
此方法可以使用两种可用的电机对象之一,如下所示:

发动机

命令

arm_motor

arm_motor.velocity(units) — Arm Motor

pusher_motor

pusher_motor.velocity(units) — Pusher Motor

参数

描述

units

The unit that represent the motor’s position:

  • PERCENT

人工智能视觉#

获取器#

拍摄快照#

take_snapshot filters the data from the AI Vision Sensor frame to return a tuple.

该元组按宽度从大到小排序存储对象,索引从 0 开始。每个对象的属性 (#properties) 可以通过其索引访问。如果没有检测到匹配的对象,则返回空元组。

Usage:
ai_vision.take_snapshot(signature)

参数

描述

signature

Which signature to get data of. The only available signature is:

  • AiVision.ALL_AIOBJS - Detects Mobile Goals, Red Rings, and Blue Rings

def main():
    # Lift the Arm to not block the AI Vision Sensor's field of view
    arm_motor.spin_for(FORWARD, 350, DEGREES)
    while True:
        brain.screen.clear_screen()

        # Display the data of the largest detected Game Element
        ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)

        if len(ai_objects) is not 0:
            brain.screen.print("Center X: ", ai_objects[0].centerX)
            brain.screen.next_row()

            brain.screen.print("Center Y: ", ai_objects[0].centerY)
            brain.screen.next_row()

        else:
            brain.screen.print("No object detected.")
                
        wait(0.2, SECONDS)

# VR threads — Do not delete
vr_thread(main)

特性#

There are seven properties that are included with each object stored in a tuple after take_snapshot is used.

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

。宽度#

.width returns the width of the detected object in pixels, which is an integer between 1 and 320.

def main():
    # Lift the Arm to not block the AI Vision Sensor's view
    arm_motor.spin_for(FORWARD, 350, DEGREES)

    # Display the width of the largest Game Element
    ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)

    if len(ai_objects) is not 0:
        brain.screen.print(ai_objects[0].width)

# VR threads — Do not delete
vr_thread(main)

。高度#

.height returns the height of the detected object in pixels, which is an integer between 1 and 240.

def main():
    # Lift the Arm to not block the AI Vision Sensor's view
    arm_motor.spin_for(FORWARD, 350, DEGREES)

    # Display the height of the largest Game Element
    ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)

    if len(ai_objects) is not 0:
        brain.screen.print(ai_objects[0].height)

# VR threads — Do not delete
vr_thread(main)

.centerX#

.centerX returns the x-coordinate of the detected object’s center in pixels, which is an integer between 0 and 320.

def main():
    # Lift the Arm to not block the AI Vision Sensor's view
    arm_motor.spin_for(FORWARD, 350, DEGREES)

    # Display the centerX of the largest Game Element
    ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)

    if len(ai_objects) is not 0:
        brain.screen.print(ai_objects[0].centerX)

# VR threads — Do not delete
vr_thread(main)

.centerY#

.centerY returns the y-coordinate of the detected object’s center in pixels, which is an integer between 0 and 240.

def main():
    # Lift the Arm to not block the AI Vision Sensor's view
    arm_motor.spin_for(FORWARD, 350, DEGREES)

    # Display the centerY of the largest Game Element
    ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)

    if len(ai_objects) is not 0:
        brain.screen.print(ai_objects[0].centerY)

# VR threads — Do not delete
vr_thread(main)

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

def main():
    # Lift the Arm to not block the AI Vision Sensor's view
    arm_motor.spin_for(FORWARD, 350, DEGREES)

    # Display the originX of the largest Game Element
    ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)

    if len(ai_objects) is not 0:
        brain.screen.print(ai_objects[0].originX)

# VR threads — Do not delete
vr_thread(main)

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

def main():
    # Lift the Arm to not block the AI Vision Sensor's view
    arm_motor.spin_for(FORWARD, 350, DEGREES)

    # Display the originY of the largest Game Element
    ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)

    if len(ai_objects) is not 0:
        brain.screen.print(ai_objects[0].originY)

# VR threads — Do not delete
vr_thread(main)

。ID#

.id returns the ID of the detected AI Classification as an integer.

人工智能分类

ID

签名

移动目标

0

GameElements.MOBILE_GOAL

红环

1

GameElements.RED_RING

蓝环

2

GameElements.BLUE_RING

def main():
    # Lift the Arm to not block the AI Vision Sensor's view
    arm_motor.spin_for(FORWARD, 350, DEGREES)

    # Display if a Mobile Goal is detected
    ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)

    if len(ai_objects) is not 0:

        if ai_objects[0].id == GameElements.MOBILE_GOAL:
            brain.screen.print("This is a Mobile Goal.")
        else:
            brain.screen.print("This is not a Mobile Goal.")

# VR threads — Do not delete
vr_thread(main)

传感#

光学的#

靠近对象#

is_near_object returns a Boolean indicating whether or not the Optical Sensor detects an object close to the sensor.

  • True – The object is close to the Optical Sensor.

  • False – The object is not close to the Optical Sensor.

Usage:
front_optical.is_near_object()

参数

描述

此方法没有参数。

def main():
    # Display if the Optical Sensor is detecting an object
    brain.screen.print(front_optical.is_near_object())

# VR threads — Do not delete
vr_thread(main)

颜色#

color returns the color detected by the Optical Sensor.

返回颜色:

  • NONE – No color detected.
  • RED
  • GREEN
  • BLUE
  • YELLOW
  • ORANGE
  • PURPLE
  • CYAN

Usage:
front_optical.color()

参数

描述

此方法没有参数。

def main():
    # Display the color of the ring on the Arm
    brain.screen.print(front_optical.color())

# VR threads — Do not delete
vr_thread(main)

亮度#

brightness returns the brightness value detected by the Optical Sensor as a percent from 0% to 100%.

Usage:
front_optical.brightness()

参数

描述

此方法没有参数。

色调#

hue returns the hue detected by the Optical Sensor.

色调值范围从 0 到 359 度,对应于下图所示色轮上的位置。

一个圆形色轮,显示完整的色调光谱,边缘标有度数,从顶部的 0° 到 360°,以 30° 为增量递增。

Usage:
front_optical.hue()

参数

描述

此方法没有参数。

def main():
    # Display the hue of the ring on the Arm.
    brain.screen.print("Hue: ", optical.hue())

# VR threads — Do not delete
vr_thread(main)

检测到目标#

object_detected registers a callback function for when the Optical Sensor detects an object.

Usage:
front_optical.object_detected(callback, arg)

参数

描述

callback

当检测到物体时将调用的函数。

arg

可选。用于向回调函数传递参数的元组。

丢失对象#

object_lost registers a callback function for when the Optical Sensor loses a previously detected object.

Usage:
front_optical.object_lost(callback, arg)

参数

描述

callback

当检测到的物体丢失时,将调用该函数。

arg

可选。用于向回调函数传递参数的元组。

旋转#

设置位置#

set_position sets the current position of the Rotation Sensor to a value in degrees.

Usage:
pusher_rotation.set_position(position, units)

参数

描述

位置

旋转传感器的设置位置。

单位

Optional. The unit of measurement:

  • DEGREES (default)
  • TURNS

角度#

angle returns the current angle of the sensor as a float.

Usage:
pusher_rotation.angle(units)

参数

描述

单位

Optional. The unit of measurement:

  • DEGREES (default) – 0 to 359.99
  • TURNS

位置#

position returns the total rotational position.

Usage:
pusher_rotation.position(units)

参数

描述

单位

Optional. The unit of measurement:

  • DEGREES (default) – 0 to 359 as an integer
  • TURNS – As a float

全球定位系统#

x_position#

x_position returns the current x coordinate of a GPS (Game Positioning System™) Sensor on the field.

Usage:
gps.x_position(units)

参数

描述

单位

The unit of the offset value:

  • INCHES
  • MM

y 位置#

y_position returns the current y coordinate of a GPS (Game Positioning System™) Sensor on the field.

Usage:
gps.y_position(units)

参数

描述

单位

The unit of the offset value:

  • INCHES
  • MM

标题#

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.

Usage:
gps.heading()

参数

描述

此方法没有参数。