Robotspecifikus Python#
Bevezetés#
A Flop nevű hősbot tartalmaz egy szívómotort, egy karmotort és egy IQ AI látásérzékelőt.
Minden szabványos VEXcode VR Python parancs elérhető az IQ 26-27 Level Up Playgroundban.
Az alábbiakban felsoroljuk az összes elérhető robotspecifikus Python parancsot:
Mozgás – Mozgasd és kövesd a robot motorjait.
Műveletek
pörgés – Egy motort örökké egy irányba forgat.
spin_for – Meghatározott számú fokkal vagy fordulattal megpörgeti a motort.
spin_to_position – Megadott pozícióba forgatja a motort.
stop – Leállítja a motor forgását.
Beállítások
set_velocity – Beállítja, hogy milyen gyorsan forogjon a motor.
set_timeout – Beállítja, hogy a motor mennyi ideig próbálja befejezni a mozgást.
set_position – A motor aktuális pozícióját új értékre módosítja.
Értékek
is_done – Visszaadja, hogy a motor mozgása befejeződött-e.
is_spinning – Visszaadja, hogy a motor forog-e.
position – Visszaadja a motor aktuális pozícióját.
sebesség – Visszaadja a motor forgási sebességét.
AI Vision – Rögzítsen és elemezzen tárgyakat az IQ AI Vision érzékelővel.
Getterek
take_snapshot – A szenzor aktuális képkockáját egy adott aláírás alapján szűri, és a detektált objektumok egy tuple-jét adja vissza.
Ingatlanok
.width – Visszaadja az észlelt objektum szélességét pixelben.
.height – Visszaadja az észlelt objektum magasságát pixelben.
.centerX – Visszaadja az észlelt objektum középpontjának x koordinátáját.
.centerY – Visszaadja a detektált objektum középpontjának y koordinátáját.
.originX – Visszaadja az észlelt objektum határolókeretének bal felső sarkának x koordinátáját.
.originY – Visszaadja az észlelt objektum határolókeretének bal felső sarkának y koordinátáját.
.id – Visszaadja az észlelt AI osztályozás azonosítóját.
Az ezen az oldalon található példák az alapértelmezett Játszótér kezdőpozícióját használják.
Mozgás#
A Flop két robotspecifikus motorral rendelkezik: intake_motor és arm_motorMindkettő standard motorparancsokat használ.
Irányállandók:
intake_motor:FORWARD= szívó (összegyűjti);REVERSE= kimenet (kidobja)arm_motor:FORWARD= fel (emel);REVERSE= le (süllyeszt)
pörgés#
spin Az adott irányban örökké forgatja a motort. A motor addig forog, amíg újabb parancsot nem kap.
Usage:
motor.spin(direction)
Paraméterek |
Leírás |
|---|---|
|
A forgás iránya: |
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)
pörgetés_célra#
spin_for Megadott távolságig megpörgeti a motort. A projekt megvárja, amíg a motor forgása befejeződik, mielőtt a következő parancs futna, kivéve, ha wait=False értéket adjuk át.
Usage:
motor.spin_for(direction, amount, unit)
Paraméterek |
Leírás |
|---|---|
|
A forgás iránya: |
|
A forgási távolság. Ez lehet egész szám vagy tizedes tört. |
|
A mértékegység: |
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)
pörgetés_pozícióba#
spin_to_position Egy motort egy adott pozícióba forgat. A projekt megvárja, amíg a motor forgása befejeződik, mielőtt a következő parancs futna, kivéve, ha wait=False értéket adjuk át.
Usage:
motor.spin_to_position(position, unit)
Paraméterek |
Leírás |
|---|---|
|
A forgatás pozíciója. Ez lehet egész szám vagy tizedesjegy. |
|
A mértékegység: |
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#
stop leállítja a motor forgását.
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 A motor forgási sebességét adja meg százalékban 0 és 100 között.
Usage:
motor.set_velocity(velocity, unit)
Paraméterek |
Leírás |
|---|---|
|
A motor sebessége százalékban, 0 és 100 között. |
|
A mértékegység: |
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)
időkorlát beállítása#
set_timeout beállítja, hogy a motor hány másodpercig próbálja meg befejezni a mozgást a leállás előtt.
Usage:
motor.set_timeout(timeout, unit)
Paraméterek |
Leírás |
|---|---|
|
Az az időtartam másodpercben, ameddig a motor megpróbál befejezni egy mozgást. |
|
A mértékegység: |
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)
beállított_pozíció#
A set_position paraméterrel a motor aktuális pozíciója új értékre módosítható, ezzel visszaállítva az enkóderét.
Usage:
motor.set_position(position, unit)
Paraméterek |
Leírás |
|---|---|
|
Az új pozícióérték. |
|
A mértékegység: |
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)
kész#
is_done Visszaad egy logikai értéket, amely jelzi, hogy a motor befejezte-e a mozgását.
True– A motor mozgása befejeződött.False– A motor még mindig mozog.
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)
forog#
is_spinning Egy logikai értéket ad vissza, amely jelzi, hogy a motor jelenleg forog-e.
True– A motor forog.False– A motor nem forog.
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)
pozíció#
position a motor aktuális pozícióját adja vissza.
Usage:
motor.position(unit)
Paraméterek |
Leírás |
|---|---|
|
A mértékegység: |
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)
sebesség#
velocity a motor aktuális forgási sebességét adja vissza százalékban, -100 és 100 között.
Usage:
motor.velocity(unit)
Paraméterek |
Leírás |
|---|---|
|
A mértékegység: |
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 látás#
pillanatkép készítése#
take_snapshot Az IQ AI Vision Sensor keretrendszeréből származó adatokat egyetlen aláírásra szűri – egy mentett leírást valamiről, amit az érzékelő felismer, például egy játékelemet a pályán –, és egy tuple-t ad vissza.
A tuple a 0 indexszel kezdődően, szélesség szerint a legnagyobbtól a legkisebbig rendezve tárolja az objektumokat. Minden objektum properties tulajdonsága a hozzá tartozó index segítségével érhető el. Ha nem található egyező objektum, akkor egy üres tuple kerül visszaadásra.
Usage:
ai_vision.take_snapshot(signature)
Paraméterek |
Leírás |
|---|---|
|
Úgy szűri az adathalmazt, hogy csak az adott aláírás adatait tartalmazza. Az elérhető aláírások:
|
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)
Tulajdonságok#
A take_snapshot metódus használata után a tuple-ben tárolt objektumokhoz hét tulajdonság tartozik.
.id kivételével az összes tulajdonságérték az érzékelt objektum pozícióját és méretét írja le az IQ AI Vision Sensor nézetében take_snapshot használatának pillanatában. Ezeket az értékeket pixelben mérik, az érzékelő 320 x 240 pixeles felbontása alapján.
.szélesség#
.width Visszaadja a detektált objektum szélességét pixelben, ami egy 1 és 320 közötti egész szám.
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)
.magasság#
.height A detektált objektum magasságát adja vissza pixelben, ami egy 1 és 240 közötti egész szám.
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 Visszaadja a detektált objektum középpontjának x koordinátáját pixelben, ami egy 0 és 320 közötti egész szám.
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 Visszaadja a detektált objektum középpontjának y koordinátáját pixelben, ami egy 0 és 240 közötti egész szám.
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 visszaadja a detektált objektum határolókeretének bal felső sarkának x koordinátáját pixelben, ami egy 0 és 320 közötti egész szám.
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 visszaadja a detektált objektum határolókeretének bal felső sarkának y koordinátáját pixelben, ami egy 0 és 240 közötti egész szám.
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 Az észlelt AI osztályozás azonosítóját adja vissza egész számként.
AI osztályozás |
azonosító |
|---|---|
KékBabzsák |
0 |
Vörösbabzsák |
1 |
SárgaBabzsák |
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)