로봇 전용 파이썬#

소개#

히어로 봇인 플롭에는 흡기 모터, 팔 모터 및 IQ AI 비전 센서가 포함되어 있습니다.

모든 표준 VEXcode VR Python 명령은 IQ 26-27 레벨 업 플레이그라운드에서 사용할 수 있습니다.

다음은 사용 가능한 모든 로봇 전용 파이썬 명령어 목록입니다.

모션 – 로봇 모터의 움직임과 추적을 제어합니다.

  • 행위

    • spin – 모터를 한 방향으로 영원히 회전시킵니다.

    • spin_for – 특정 각도 또는 회전 수만큼 모터를 회전시킵니다.

    • spin_to_position – 모터를 특정 위치로 회전시킵니다.

    • stop – 모터의 회전을 멈춥니다.

  • 설정

    • set_velocity – 모터가 회전할 속도를 설정합니다.

    • set_timeout – 모터가 동작을 완료하려고 시도하는 시간을 설정합니다.

    • set_position – 모터의 현재 위치를 새 값으로 변경합니다.

  • 값

    • is_done – 모터의 움직임이 완료되었는지 여부를 반환합니다.

    • is_spinning – 모터가 회전하는지 여부를 반환합니다.

    • 위치 – 모터의 현재 위치를 반환합니다.

    • velocity – 모터가 회전하는 속도를 반환합니다.

AI 비전 – IQ AI 비전 센서를 사용하여 사물을 포착하고 분석합니다.

  • 게터

    • take_snapshot – 센서의 현재 프레임을 특정 시그니처로 필터링하고 감지된 객체의 튜플을 반환합니다.

  • 속성

    • .width – 감지된 객체의 너비를 픽셀 단위로 반환합니다.

    • .height – 감지된 객체의 높이를 픽셀 단위로 반환합니다.

    • .centerX – 감지된 객체의 중심의 x좌표를 반환합니다.

    • .centerY – 감지된 객체의 중심의 y 좌표를 반환합니다.

    • .originX – 감지된 객체의 경계 상자의 왼쪽 상단 모서리의 x 좌표를 반환합니다.

    • .originY – 감지된 객체의 경계 상자의 왼쪽 상단 모서리의 y 좌표를 반환합니다.

    • .id – 감지된 AI 분류의 ID를 반환합니다.

이 페이지의 예제는 Playground의 기본 시작 위치를 사용합니다.

운동#

Flop에는 로봇 전용 모터가 두 개 있습니다. intake_motor 과 arm_motor. 두 모터 모두 표준 모터 명령을 사용합니다.

방향 상수:

  • intake_motor: FORWARD = 흡기(흡입); REVERSE = 배출(배출)

  • arm_motor: FORWARD = 위로 올림; REVERSE = 아래로 내림

회전#

spin 다른 명령이 내려질 때까지 모터를 계속 회전시킵니다.

Usage:
motor.spin(direction)

매개변수

설명

direction

회전 방향: FORWARD 또는 REVERSE.

def main():
    # Score a Bean Bag in a Blue Goal
    drivetrain.turn_for(LEFT, 90, DEGREES)
    drivetrain.drive_for(FORWARD, 35, INCHES)
    drivetrain.turn_for(RIGHT, 90, DEGREES)
    arm_motor.spin_for(FORWARD, 1, TURNS)
    drivetrain.drive_for(FORWARD, 40, INCHES)
    intake_motor.spin(REVERSE)

# VR threads — Do not delete
vr_thread(main)

스핀_포#

spin_for 모터를 특정 거리만큼 회전시킵니다. wait=False 전달되지 않는 한, 프로젝트는 다음 명령이 실행되기 전에 모터 회전이 완료될 때까지 기다립니다.

Usage:
motor.spin_for(direction, amount, unit)

매개변수

설명

direction

회전 방향: FORWARD 또는 REVERSE.

amount

회전 거리. 정수 또는 소수일 수 있습니다.

unit

측정 단위: DEGREES 또는 TURNS 회전.

def main():
    # Score a Bean Bag in a Blue Goal
    drivetrain.turn_for(LEFT, 90, DEGREES)
    drivetrain.drive_for(FORWARD, 35, INCHES)
    drivetrain.turn_for(RIGHT, 90, DEGREES)
    arm_motor.spin_for(FORWARD, 1, TURNS)
    drivetrain.drive_for(FORWARD, 40, INCHES)
    intake_motor.spin(REVERSE)

# VR threads — Do not delete
vr_thread(main)

스핀투위치#

spin_to_position 모터를 특정 위치로 회전시킵니다. wait=False 전달되지 않는 한, 프로젝트는 모터 회전이 완료될 때까지 기다린 후 다음 명령을 실행합니다.

Usage:
motor.spin_to_position(position, unit)

매개변수

설명

position

회전할 위치입니다. 정수 또는 소수일 수 있습니다.

unit

측정 단위: DEGREES 또는 TURNS 회전.

def main():
    # Score a Bean Bag in a Blue Goal
    drivetrain.turn_for(LEFT, 90, DEGREES)
    drivetrain.drive_for(FORWARD, 35, INCHES)
    drivetrain.turn_for(RIGHT, 90, DEGREES)
    arm_motor.spin_to_position(1, TURNS)
    drivetrain.drive_for(FORWARD, 40, INCHES)
    intake_motor.spin(REVERSE)

# VR threads — Do not delete
vr_thread(main)

멈추다#

stop 모터의 회전을 멈춥니다.

Usage:
motor.stop()

def main():
    # Score a Bean Bag in a Blue Goal
    drivetrain.turn_for(LEFT, 90, DEGREES)
    drivetrain.drive_for(FORWARD, 35, INCHES)
    drivetrain.turn_for(RIGHT, 90, DEGREES)
    arm_motor.spin_for(FORWARD, 1, TURNS)
    drivetrain.drive_for(FORWARD, 40, INCHES)
    intake_motor.spin(REVERSE)
    wait(1, SECONDS)
    intake_motor.stop()

# VR threads — Do not delete
vr_thread(main)

속도 설정#

set_velocity 모터의 회전 속도를 0에서 100 사이의 백분율로 설정합니다.

Usage:
motor.set_velocity(velocity, unit)

매개변수

설명

velocity

모터의 속도를 0%에서 100%까지의 백분율로 나타낸 값입니다.

unit

측정 단위: PERCENT.

def main():
    # Score a Bean Bag in a Blue Goal
    drivetrain.turn_for(LEFT, 90, DEGREES)
    drivetrain.drive_for(FORWARD, 35, INCHES)
    drivetrain.turn_for(RIGHT, 90, DEGREES)
    arm_motor.spin_for(FORWARD, 1, TURNS)
    drivetrain.drive_for(FORWARD, 40, INCHES)
    intake_motor.set_velocity(100, PERCENT)
    intake_motor.spin(REVERSE)

# VR threads — Do not delete
vr_thread(main)

set_timeout#

set_timeout 모터가 멈추기 전에 동작을 완료하려고 시도하는 시간을 초 단위로 설정합니다.

Usage:
motor.set_timeout(timeout, unit)

매개변수

설명

timeout

모터가 동작을 완료하려고 시도하는 시간(초)입니다.

unit

측정 단위: SECONDS.

def main():
    # Score a Bean Bag in a Blue Goal
    drivetrain.turn_for(LEFT, 90, DEGREES)
    drivetrain.drive_for(FORWARD, 35, INCHES)
    drivetrain.turn_for(RIGHT, 90, DEGREES)
    arm_motor.set_timeout(2, SECONDS)
    arm_motor.spin_for(FORWARD, 1, TURNS)
    drivetrain.drive_for(FORWARD, 40, INCHES)
    intake_motor.spin(REVERSE)

# VR threads — Do not delete
vr_thread(main)

위치 설정#

set_position 은 모터의 현재 위치를 새로운 값으로 변경하고 엔코더를 재설정합니다.

Usage:
motor.set_position(position, unit)

매개변수

설명

position

새로운 위치 값.

unit

측정 단위: DEGREES 또는 TURNS 회전.

def main():
    # Score a Bean Bag in a Blue Goal
    drivetrain.turn_for(LEFT, 90, DEGREES)
    drivetrain.drive_for(FORWARD, 35, INCHES)
    drivetrain.turn_for(RIGHT, 90, DEGREES)
    arm_motor.set_position(0, DEGREES)
    arm_motor.spin_for(FORWARD, 1, TURNS)
    drivetrain.drive_for(FORWARD, 40, INCHES)
    intake_motor.spin(REVERSE)

# VR threads — Do not delete
vr_thread(main)

완료됨#

is_done 모터가 움직임을 완료했는지 여부를 나타내는 부울 값을 반환합니다.

  • True – 모터가 회전을 멈췄습니다.

  • False – 모터는 여전히 움직이고 있습니다.

Usage:
motor.is_done()

def main():
    # Score a Bean Bag in a Blue Goal
    drivetrain.turn_for(LEFT, 90, DEGREES)
    drivetrain.drive_for(FORWARD, 35, INCHES)
    drivetrain.turn_for(RIGHT, 90, DEGREES)
    arm_motor.spin_for(FORWARD, 1, TURNS, wait=False)
    while not arm_motor.is_done():
        wait(5, MSEC)
    drivetrain.drive_for(FORWARD, 40, INCHES)
    intake_motor.spin(REVERSE)

# VR threads — Do not delete
vr_thread(main)

회전하고 있습니다#

is_spinning 모터가 현재 회전 중인지 여부를 나타내는 부울 값을 반환합니다.

  • True – 모터가 회전하고 있습니다.

  • False – 모터가 회전하지 않습니다.

Usage:
motor.is_spinning()

def main():
    # Score a Bean Bag in a Blue Goal
    drivetrain.turn_for(LEFT, 90, DEGREES)
    drivetrain.drive_for(FORWARD, 35, INCHES)
    drivetrain.turn_for(RIGHT, 90, DEGREES)
    arm_motor.spin_for(FORWARD, 1, TURNS)
    drivetrain.drive_for(FORWARD, 40, INCHES)
    intake_motor.spin(REVERSE)
    while intake_motor.is_spinning():
        wait(5, MSEC)
    intake_motor.stop()

# VR threads — Do not delete
vr_thread(main)

위치#

position 모터의 현재 위치를 반환합니다.

Usage:
motor.position(unit)

매개변수

설명

unit

측정 단위: DEGREES 또는 TURNS 회전.

def main():
    # Score a Bean Bag in a Blue Goal
    drivetrain.turn_for(LEFT, 90, DEGREES)
    drivetrain.drive_for(FORWARD, 35, INCHES)
    drivetrain.turn_for(RIGHT, 90, DEGREES)
    while arm_motor.position(DEGREES) < 360:
        arm_motor.spin(FORWARD)
        wait(2, MSEC)
    arm_motor.stop()
    drivetrain.drive_for(FORWARD, 40, INCHES)
    intake_motor.spin(REVERSE)

# VR threads — Do not delete
vr_thread(main)

속도#

velocity 모터가 현재 회전하는 속도를 -100에서 100 사이의 백분율로 반환합니다.

Usage:
motor.velocity(unit)

매개변수

설명

unit

측정 단위: PERCENT.

def main():
    # Score a Bean Bag in a Blue Goal
    drivetrain.turn_for(LEFT, 90, DEGREES)
    drivetrain.drive_for(FORWARD, 35, INCHES)
    drivetrain.turn_for(RIGHT, 90, DEGREES)
    arm_motor.spin_for(FORWARD, 1, TURNS)
    drivetrain.drive_for(FORWARD, 40, INCHES)
    intake_motor.spin(REVERSE)
    wait(0.2, SECONDS)
    brain.screen.print(intake_motor.velocity(PERCENT))

# VR threads — Do not delete
vr_thread(main)

AI 비전#

스냅샷을 찍다#

take_snapshot IQ AI 비전 센서 프레임의 데이터를 단일 시그니처(센서가 인식할 수 있는 대상에 대한 저장된 설명, 예를 들어 경기장의 게임 요소 등)로 필터링하고 튜플을 반환합니다.

튜플은 인덱스 0부터 시작하여 너비가 큰 순서부터 작은 순서로 정렬된 객체를 저장합니다. 각 객체의 속성은 해당 인덱스를 사용하여 접근할 수 있습니다. 일치하는 객체가 감지되지 않으면 빈 튜플이 반환됩니다.

Usage:
ai_vision.take_snapshot(signature)

매개변수

설명

signature

지정된 서명에 해당하는 데이터만 포함하도록 데이터셋을 필터링합니다. 사용 가능한 서명은 다음과 같습니다:

  • AiVision.ALL_AIOBJS - 모든 빈백을 감지합니다.
  • AiVision.ALL_TAGS - 골대 측면에 있는 AprilTags를 감지합니다.

def main():
    # Drop the preloaded Bean Bag
    intake_motor.spin_for(REVERSE, 180, DEGREES)
    drivetrain.turn_for(LEFT, 90, DEGREES)

    # Turn to face a red Bean Bag
    drivetrain.set_turn_velocity(30, PERCENT)
    while True:
        ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
        for ai_object in ai_objects:
            if ai_object.id == GameElements.RED_BEANBAG:
                if ai_object.centerX < 140:
                    drivetrain.turn(LEFT)
                elif ai_object.centerX > 180:
                    drivetrain.turn(RIGHT)
                else:
                    drivetrain.stop()
                    return
                break

# VR threads — Do not delete
vr_thread(main)

속성#

take_snapshot를 사용한 후 튜플에 저장된 각 객체에는 7개의 속성이 포함됩니다.

All property values except .id describe the detected object’s position and size in the IQ AI Vision Sensor’s view at the moment take_snapshot was used. These values are measured in pixels, based on the sensor’s 320 by 240 pixel resolution.

.너비#

.width 감지된 객체의 너비를 픽셀 단위로 반환하며, 이는 1에서 320 사이의 정수입니다.

def main():
    # Drop the preloaded Bean Bag
    intake_motor.spin_for(REVERSE, 180, DEGREES)
    drivetrain.turn_for(LEFT, 90, DEGREES)

    # Approach the Bean Bag, then pick it up
    drivetrain.set_drive_velocity(30, PERCENT)
    while True:
        ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
        for ai_object in ai_objects:
            if ai_object.id == GameElements.RED_BEANBAG:
                if ai_object.width > 200:
                    drivetrain.stop()
                    intake_motor.spin(FORWARD)
                    return
                else:
                    drivetrain.drive(FORWARD)
                break

# VR threads — Do not delete
vr_thread(main)

.키#

.height 감지된 객체의 높이를 픽셀 단위로 반환하며, 이는 1에서 240 사이의 정수입니다.

def main():
    # Drop the preloaded Bean Bag
    intake_motor.spin_for(REVERSE, 180, DEGREES)
    drivetrain.turn_for(LEFT, 90, DEGREES)

    # Approach the Bean Bag, then pick it up
    drivetrain.set_drive_velocity(30, PERCENT)
    while True:
        ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
        for ai_object in ai_objects:
            if ai_object.id == GameElements.RED_BEANBAG:
                if ai_object.height > 110:
                    drivetrain.stop()
                    intake_motor.spin(FORWARD)
                    return
                else:
                    drivetrain.drive(FORWARD)
                break

# VR threads — Do not delete
vr_thread(main)

.centerX#

.centerX 감지된 객체 중심의 x 좌표를 픽셀 단위로 반환하며, 이 값은 0에서 320 사이의 정수입니다.

def main():
    # Drop the preloaded Bean Bag
    intake_motor.spin_for(REVERSE, 180, DEGREES)
    drivetrain.turn_for(LEFT, 90, DEGREES)

    # Steer to keep the Bean Bag centered
    drivetrain.set_turn_velocity(30, PERCENT)
    drivetrain.set_drive_velocity(30, PERCENT)
    while True:
        ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
        for ai_object in ai_objects:
            if ai_object.id == GameElements.RED_BEANBAG:
                if ai_object.centerX < 140:
                    drivetrain.turn_for(LEFT, 5, DEGREES)
                else:
                    drivetrain.drive_for(FORWARD, 150, MM)
                    intake_motor.spin(FORWARD)
                    return
                break

# VR threads — Do not delete
vr_thread(main)

.센터Y#

.centerY 감지된 객체 중심의 y 좌표를 픽셀 단위로 반환하며, 이 값은 0에서 240 사이의 정수입니다.

def main():
    # Drop the preloaded Bean Bag
    intake_motor.spin_for(REVERSE, 180, DEGREES)
    drivetrain.turn_for(LEFT, 90, DEGREES)

    # Print the y-position of the Bean Bag
    ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
    for ai_object in ai_objects:
        if ai_object.id == GameElements.RED_BEANBAG:
            brain.screen.print(ai_object.centerY)
            break

# VR threads — Do not delete
vr_thread(main)

.오리진X#

.originX 감지된 객체의 경계 상자의 왼쪽 상단 모서리의 x 좌표를 픽셀 단위로 반환하며, 이는 0에서 320 사이의 정수입니다.

def main():
    # Drop the preloaded Bean Bag
    intake_motor.spin_for(REVERSE, 180, DEGREES)
    drivetrain.turn_for(LEFT, 90, DEGREES)

    # Steer to keep the left edge centered
    drivetrain.set_turn_velocity(30, PERCENT)
    drivetrain.set_drive_velocity(30, PERCENT)
    while True:
        ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
        for ai_object in ai_objects:
            if ai_object.id == GameElements.RED_BEANBAG:
                if ai_object.originX < 100:
                    drivetrain.turn_for(LEFT, 5, DEGREES)
                else:
                    drivetrain.drive_for(FORWARD, 150, MM)
                    intake_motor.spin(FORWARD)
                    return
                break

# VR threads — Do not delete
vr_thread(main)

.오리진Y#

.originY 감지된 객체의 경계 상자의 왼쪽 상단 모서리의 y 좌표를 픽셀 단위로 반환하며, 이는 0에서 240 사이의 정수입니다.

def main():
    # Drop the preloaded Bean Bag
    intake_motor.spin_for(REVERSE, 180, DEGREES)
    drivetrain.turn_for(LEFT, 90, DEGREES)

    # Print the y-position of the Bean Bag's top edge
    ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
    for ai_object in ai_objects:
        if ai_object.id == GameElements.RED_BEANBAG:
            brain.screen.print(ai_object.originY)
            break

# VR threads — Do not delete
vr_thread(main)

.ID#

.id 감지된 AI 분류의 ID를 정수로 반환합니다.

AI 분류

ID

블루빈백

0

레드빈백

1

옐로우빈백

2

def main():
    # Drop the preloaded Bean Bag
    intake_motor.spin_for(REVERSE, 180, DEGREES)
    drivetrain.turn_for(LEFT, 90, DEGREES)

    # Pick up the Bean Bag if it's red
    drivetrain.set_drive_velocity(30, PERCENT)
    ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
    for ai_object in ai_objects:
        if ai_object.id == GameElements.RED_BEANBAG:
            intake_motor.spin(FORWARD)
            drivetrain.drive_for(FORWARD, 150, MM)
            break

# VR threads — Do not delete
vr_thread(main)


def main():
    # Stop when you see the Red Goal
    drivetrain.set_turn_velocity(30, PERCENT)
    drivetrain.turn(RIGHT)
    while True:
        ai_objects = ai_vision.take_snapshot(AiVision.ALL_TAGS)
        for ai_object in ai_objects:
            if ai_object.id == 1:
                drivetrain.stop()
                brain.screen.print("Found the Red Goal!")
                return

# VR threads — Do not delete
vr_thread(main)