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

direction

A forgás iránya: FORWARD vagy 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)

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

direction

A forgás iránya: FORWARD vagy REVERSE.

amount

A forgási távolság. Ez lehet egész szám vagy tizedes tört.

unit

A mértékegység: DEGREES vagy 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)

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

position

A forgatás pozíciója. Ez lehet egész szám vagy tizedesjegy.

unit

A mértékegység: DEGREES vagy 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#

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

velocity

A motor sebessége százalékban, 0 és 100 között.

unit

A mértékegység: 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)

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

timeout

Az az időtartam másodpercben, ameddig a motor megpróbál befejezni egy mozgást.

unit

A mértékegység: 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)

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

position

Az új pozícióérték.

unit

A mértékegység: DEGREES vagy 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)

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

unit

A mértékegység: DEGREES vagy 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)

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

unit

A mértékegység: 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 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

signature

Úgy szűri az adathalmazt, hogy csak az adott aláírás adatait tartalmazza. Az elérhető aláírások:

  • AiVision.ALL_AIOBJS – Az összes babzsákot észleli.
  • AiVision.ALL_TAGS – Az AprilTags címkéket észleli, amelyek a célok oldalán találhatók.

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)