Python, специфічний для роботів#
Вступ#
Робот-герой Флоп включає в себе впускний двигун, двигун ArmMotor та датчик зору IQ AI.
Усі стандартні команди VEXcode VR Python доступні для використання на ігровому майданчику Підвищення рівня IQ 26-27.
Нижче наведено список усіх доступних команд Python, специфічних для Robot:
Рух – Переміщення та відстеження двигунів робота.
Дії
обертання – Обертає двигун в одному напрямку вічно.
spin_for – Обертає двигун на певну кількість градусів або обертів.
spin_to_position – Обертає двигун у певне положення.
стоп – Зупиняє обертання двигуна.
Налаштування
set_velocity – Встановлює швидкість обертання двигуна.
set_timeout – Встановлює час, протягом якого двигун намагатиметься завершити рух.
set_position – Змінює поточне положення двигуна на нове значення.
Значення
is_done – Повертає, чи завершив рух двигуна.
is_spinning – Повертає, чи обертається двигун.
позиція – Повертає поточне положення двигуна.
швидкість – Повертає швидкість обертання двигуна.
Штучний зір – захоплення та аналіз об’єктів за допомогою датчика зору IQ AI.
Геттери
take_snapshot – Фільтрує поточний кадр датчика за певною сигнатурою та повертає кортеж виявлених об’єктів.
Властивості
.width – Повертає ширину виявленого об’єкта в пікселях.
.height – Повертає висоту виявленого об’єкта в пікселях.
.centerX – Повертає x-координату центру виявленого об’єкта.
.centerY – Повертає y-координату центру виявленого об’єкта.
.originX – Повертає x-координату верхнього лівого кута рамки визначення виявленого об’єкта.
.originY – Повертає y-координату верхнього лівого кута рамки визначення виявленого об’єкта.
.id – Повертає ідентифікатор виявленої класифікації ШІ.
У прикладах на цій сторінці використовується початкова позиція ігрового майданчика за замовчуванням.
Рух#
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#
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)
Зір штучного інтелекту#
зробити_знімок#
take_snapshot фільтрує дані з кадру IQ AI Vision Sensor до єдиного підпису — збереженого опису чогось, що датчик може розпізнати, наприклад, ігрового елемента на полі — та повертає кортеж.
Кортеж зберігає об’єкти, відсортовані від найбільшого до найменшого за шириною, починаючи з індексу 0. Доступ до properties кожного об’єкта можна отримати за його індексом. Якщо не виявлено відповідних об’єктів, повертається порожній кортеж.
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.
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#
.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)
.centerY#
.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)
.originX#
.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)
.originY#
.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 повертає ідентифікатор виявленої класифікації ШІ як ціле число.
Класифікація ШІ |
ідентифікатор |
|---|---|
БлуБінБаг |
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)