Python specifický pro roboty#
Zavedení#
Hrdinský robot Flop obsahuje sací motor, ramenní motor a kamerový senzor IQ AI.
Všechny standardní příkazy VEXcode pro VR Python jsou k dispozici pro použití na hřišti IQ 26-27 Level Up.
Níže je uveden seznam všech dostupných příkazů Pythonu specifických pro roboty:
Pohyb – Pohybujte a sledujte motory robota.
Akce
spin – Roztočí motor jedním směrem navždy.
spin_for – Roztočí motor o určitý počet stupňů nebo otáček.
spin_to_position – Roztočí motor do určité polohy.
stop – Zastaví otáčení motoru.
Nastavení
set_velocity – Nastavuje rychlost otáčení motoru.
set_timeout – Nastavuje, jak dlouho se bude motor pokoušet dokončit pohyb.
set_position – Změní aktuální polohu motoru na novou hodnotu.
Hodnoty
is_done – Vrací, zda se motor rozhýbal.
is_spinning – Vrací, zda se motor otáčí.
pozice – Vrátí aktuální polohu motoru.
rychlost – Vrátí rychlost otáčení motoru.
AI Vision – Zachycujte a analyzujte objekty pomocí senzoru IQ AI Vision.
Získávači
take_snapshot – Filtruje aktuální snímek senzoru na specifickou signaturu a vrací n-tici detekovaných objektů.
Vlastnosti
.width – Vrátí šířku detekovaného objektu v pixelech.
.height – Vrátí výšku detekovaného objektu v pixelech.
.centerX – Vrátí souřadnici x středu detekovaného objektu.
.centerY – Vrací souřadnici y středu detekovaného objektu.
.originX – Vrátí souřadnici x levého horního rohu ohraničujícího rámečku detekovaného objektu.
.originY – Vrátí souřadnici y levého horního rohu ohraničujícího rámečku detekovaného objektu.
.id – Vrátí ID detekované klasifikace AI.
Příklady na této stránce používají výchozí počáteční pozici hřiště.
Pohyb#
Flop má dva motory specifické pro roboty: intake_motor a arm_motorOba používají standardní příkazy pro motory.
Směrové konstanty:
intake_motor:FORWARD= sání (sbírá);REVERSE= výfuk (vyhazuje)arm_motor:FORWARD= nahoru (zvedání);REVERSE= dolů (spouštění)
roztočit#
spin roztočí motor v daném směru navždy. Motor se bude otáčet, dokud nedostane další příkaz.
Usage:
motor.spin(direction)
Parametry |
Popis |
|---|---|
|
Směr otáčení: |
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#
spin_for roztočí motor o určitou vzdálenost. Projekt čeká, dokud není motor hotový, než se spustí další příkaz, pokud není předán wait=False.
Usage:
motor.spin_for(direction, amount, unit)
Parametry |
Popis |
|---|---|
|
Směr otáčení: |
|
Vzdálenost, o kterou se má otočit. Může to být celé číslo nebo desetinné číslo. |
|
Jednotka měření: |
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)
otočení_do_pozice#
spin_to_position otočí motor do určité polohy. Projekt čeká na dokončení otáčení motoru před spuštěním dalšího příkazu, pokud není předán parametr wait=False.
Usage:
motor.spin_to_position(position, unit)
Parametry |
Popis |
|---|---|
|
Pozice, na kterou se má otočit. Může to být celé číslo nebo desetinné číslo. |
|
Jednotka měření: |
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)
zastávka#
stop zastaví otáčení motoru.
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#
set_velocity nastavuje rychlost otáčení motoru v procentech od 0 do 100.
Usage:
motor.set_velocity(velocity, unit)
Parametry |
Popis |
|---|---|
|
Rychlost motoru v procentech od 0 do 100. |
|
Jednotka měření: |
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 nastavuje, po kolik sekund se bude motor pokusit dokončit pohyb, než se zastaví.
Usage:
motor.set_timeout(timeout, unit)
Parametry |
Popis |
|---|---|
|
Počet sekund, po které se motor pokusí dokončit pohyb. |
|
Jednotka měření: |
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 změní aktuální polohu motoru na novou hodnotu a resetuje jeho enkodér.
Usage:
motor.set_position(position, unit)
Parametry |
Popis |
|---|---|
|
Nová hodnota pozice. |
|
Jednotka měření: |
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)
je_hotovo#
is_done vrací booleovskou hodnotu označující, zda motor dokončil svůj pohyb.
True– Motor se roztočil.False– Motor se stále točí.
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)
se točí#
is_spinning vrací booleovskou hodnotu, která indikuje, zda se motor aktuálně otáčí.
True– Motor se točí.False– Motor se netočí.
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)
pozice#
position vrací aktuální polohu motoru.
Usage:
motor.position(unit)
Parametry |
Popis |
|---|---|
|
Jednotka měření: |
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)
rychlost#
velocity vrací aktuálně otáčky motoru v procentech od -100 do 100.
Usage:
motor.velocity(unit)
Parametry |
Popis |
|---|---|
|
Jednotka měření: |
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)
Vize umělé inteligence#
pořídit_snímek#
Funkce take_snapshot filtruje data z rámce senzoru IQ AI Vision do jediného podpisu – uloženého popisu něčeho, co senzor dokáže rozpoznat, například herního prvku na hřišti – a vrací n-tici.
N-tice ukládá objekty seřazené od největšího po nejmenší podle šířky, počínaje indexem 0. K vlastnostem properties každého objektu lze přistupovat pomocí jeho indexu. Pokud nejsou detekovány žádné odpovídající objekty, vrátí se prázdná n-tice.
Usage:
ai_vision.take_snapshot(signature)
Parametry |
Popis |
|---|---|
|
Filtruje datovou sadu tak, aby zahrnovala pouze data daného podpisu. Dostupné podpisy jsou:
|
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)
Nemovitosti#
Každý objekt uložený v n-tici po použití take_snapshot obsahuje sedm vlastností.
Všechny hodnoty vlastnosti kromě .id popisují polohu a velikost detekovaného objektu v pohledu senzoru IQ AI Vision v okamžiku použití funkce take_snapshot Tyto hodnoty se měří v pixelech na základě rozlišení senzoru 320 x 240 pixelů.
.šířka#
.width vrací šířku detekovaného objektu v pixelech, což je celé číslo mezi 1 a 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)
.výška#
.height vrací výšku detekovaného objektu v pixelech, což je celé číslo mezi 1 a 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 vrací souřadnici x středu detekovaného objektu v pixelech, což je celé číslo mezi 0 a 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 vrací souřadnici y středu detekovaného objektu v pixelech, což je celé číslo mezi 0 a 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 vrací souřadnici x levého horního rohu ohraničovacího rámečku detekovaného objektu v pixelech, což je celé číslo mezi 0 a 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 vrací souřadnici y levého horního rohu ohraničovacího rámečku detekovaného objektu v pixelech, což je celé číslo mezi 0 a 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 vrací ID detekované klasifikace AI jako celé číslo.
Klasifikace umělé inteligence |
identifikační číslo |
|---|---|
BlueBeanBag |
0 |
RedFazolovýPytel |
1 |
Žlutý fazolový vak |
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)