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

direction

Směr otáčení: FORWARD nebo 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)

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

direction

Směr otáčení: FORWARD nebo REVERSE.

amount

Vzdálenost, o kterou se má otočit. Může to být celé číslo nebo desetinné číslo.

unit

Jednotka měření: DEGREES nebo 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)

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

position

Pozice, na kterou se má otočit. Může to být celé číslo nebo desetinné číslo.

unit

Jednotka měření: DEGREES nebo 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)

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

velocity

Rychlost motoru v procentech od 0 do 100.

unit

Jednotka měření: 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)

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

timeout

Počet sekund, po které se motor pokusí dokončit pohyb.

unit

Jednotka měření: 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)

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

position

Nová hodnota pozice.

unit

Jednotka měření: DEGREES nebo 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)

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

unit

Jednotka měření: DEGREES nebo 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)

rychlost#

velocity vrací aktuálně otáčky motoru v procentech od -100 do 100.

Usage:
motor.velocity(unit)

Parametry

Popis

unit

Jednotka měření: 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)

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

signature

Filtruje datovou sadu tak, aby zahrnovala pouze data daného podpisu. Dostupné podpisy jsou:

  • AiVision.ALL_AIOBJS - Detekuje všechny fazolové vaky.
  • AiVision.ALL_TAGS - Detekuje AprilTags, které se nacházejí po stranách branek.

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)