로봇 전용 파이썬#
소개#
히어로 봇인 플롭에는 흡기 모터, 팔 모터 및 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 – 센서의 현재 프레임을 특정 시그니처로 필터링하고 감지된 객체의 튜플을 반환합니다.
속성
이 페이지의 예제는 Playground의 기본 시작 위치를 사용합니다.
운동#
Flop에는 로봇 전용 모터가 두 개 있습니다. intake_motor 과 arm_motor. 두 모터 모두 표준 모터 명령을 사용합니다.
방향 상수:
intake_motor:FORWARD= 흡기(흡입);REVERSE= 배출(배출)arm_motor:FORWARD= 위로 올림;REVERSE= 아래로 내림
회전#
spin 다른 명령이 내려질 때까지 모터를 계속 회전시킵니다.
Usage:
motor.spin(direction)
매개변수 |
설명 |
|---|---|
|
회전 방향: |
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)
매개변수 |
설명 |
|---|---|
|
회전 방향: |
|
회전 거리. 정수 또는 소수일 수 있습니다. |
|
측정 단위: |
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)
매개변수 |
설명 |
|---|---|
|
회전할 위치입니다. 정수 또는 소수일 수 있습니다. |
|
측정 단위: |
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)
매개변수 |
설명 |
|---|---|
|
모터의 속도를 0%에서 100%까지의 백분율로 나타낸 값입니다. |
|
측정 단위: |
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)
매개변수 |
설명 |
|---|---|
|
모터가 동작을 완료하려고 시도하는 시간(초)입니다. |
|
측정 단위: |
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)
매개변수 |
설명 |
|---|---|
|
새로운 위치 값. |
|
측정 단위: |
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)
매개변수 |
설명 |
|---|---|
|
측정 단위: |
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)
매개변수 |
설명 |
|---|---|
|
측정 단위: |
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)
매개변수 |
설명 |
|---|---|
|
지정된 서명에 해당하는 데이터만 포함하도록 데이터셋을 필터링합니다. 사용 가능한 서명은 다음과 같습니다:
|
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)