Robotspecifik Python#

Introduktion#

Hjälteboten Flop inkluderar en insugsmotor, en armmotor och en IQ AI-visionssensor.

Alla vanliga VEXcode VR Python-kommandon är tillgängliga för användning i IQ 26-27 Level Up Playground.

Nedan följer en lista över alla tillgängliga robotspecifika Python-kommandon:

Rörelse – Flytta och spåra robotens motorer.

  • Åtgärder

    • snurra – Snurrar en motor i en riktning för alltid.

    • spin_for – Snurrar en motor ett visst antal grader eller varv.

    • snurra_till_position – Snurrar en motor till en specifik position.

    • stopp – Stoppar en motor från att snurra.

  • Inställningar

    • set_velocity – Anger hur snabbt en motor snurrar.

    • set_timeout – Anger hur länge en motor ska försöka slutföra en rörelse.

    • set_position – Ändrar motorns aktuella position till ett nytt värde.

  • Värden

    • är_klar – Returnerar om motorn är klar med att röra sig.

    • snurrar_ – Returnerar om motorn snurrar.

    • position – Returnerar motorns aktuella position.

    • hastighet – Returnerar hur snabbt motorn snurrar.

AI Vision – Avbilda och analysera objekt med hjälp av IQ AI Vision-sensorn.

  • Hämtarna

    • take_snapshot – Filtrerar sensorns aktuella bildruta till en specifik signatur och returnerar en tupel av detekterade objekt.

  • Fastigheter

    • .width – Returnerar bredden på det detekterade objektet i pixlar.

    • .höjd – Returnerar höjden på det detekterade objektet i pixlar.

    • .centerX – Returnerar x-koordinaten för det detekterade objektets centrum.

    • .centerY – Returnerar y-koordinaten för det detekterade objektets centrum.

    • .originX – Returnerar x-koordinaten för det övre vänstra hörnet av det detekterade objektets avgränsningsram.

    • .originY – Returnerar y-koordinaten för det övre vänstra hörnet av det detekterade objektets avgränsningsram.

    • .id – Returnerar ID:t för den upptäckta AI-klassificeringen.

Exemplen på den här sidan använder standardstartpositionen för Playground.

Rörelse#

Floppen har två robotspecifika motorer: intake_motor och arm_motorBåda använder standardmotorkommandon.

Riktningskonstanter:

  • intake_motor: FORWARD = insug (samlar in); REVERSE = utsug (kastar ut)

  • arm_motor: FORWARD = upp (höjer); REVERSE = ner (sänker)

snurra#

spin snurrar en motor i den givna riktningen för alltid. Motorn fortsätter att snurra tills den får ett nytt kommando.

Usage:
motor.spin(direction)

Parametrar

Beskrivning

direction

Rotationsriktning: FORWARD eller 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 snurrar en motor ett visst avstånd. Projektet väntar tills motorn är klar innan nästa kommando körs, såvida inte wait=False skickas.

Usage:
motor.spin_for(direction, amount, unit)

Parametrar

Beskrivning

direction

Rotationsriktning: FORWARD eller REVERSE.

amount

Avståndet att snurra. Detta kan vara ett heltal eller ett decimaltal.

unit

Måttenhet: DEGREES eller 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)

snurra_till_position#

spin_to_position snurrar en motor till en specifik position. Projektet väntar tills motorn är klar innan nästa kommando körs, såvida inte wait=False skickas.

Usage:
motor.spin_to_position(position, unit)

Parametrar

Beskrivning

position

Positionen att rotera till. Detta kan vara ett heltal eller ett decimaltal.

unit

Måttenhet: DEGREES eller 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)

stopp#

stop stoppar en motor från att snurra.

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 anger hur snabbt en motor snurrar i procent från 0 till 100.

Usage:
motor.set_velocity(velocity, unit)

Parametrar

Beskrivning

velocity

Motorns hastighet i procent från 0 till 100.

unit

Måttenhet: 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 anger hur många sekunder en motor ska försöka avsluta en rörelse innan den stannar.

Usage:
motor.set_timeout(timeout, unit)

Parametrar

Beskrivning

timeout

Antalet sekunder som motorn försöker slutföra en rörelse.

unit

Måttenhet: 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 ändrar motorns aktuella position till ett nytt värde och återställer dess kodare.

Usage:
motor.set_position(position, unit)

Parametrar

Beskrivning

position

Det nya positionsvärdet.

unit

Måttenhet: DEGREES eller 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)

är_klar#

is_done returnerar ett booleskt värde som anger om motorn har avslutat sin rörelse.

  • True – Motorn har slutat röra sig.

  • False – Motorn rör sig fortfarande.

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)

snurrar#

is_spinning returnerar ett booleskt värde som anger om motorn för närvarande snurrar.

  • True – Motorn snurrar.

  • False – Motorn snurrar inte.

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)

placera#

position returnerar motorns aktuella position.

Usage:
motor.position(unit)

Parametrar

Beskrivning

unit

Måttenhet: DEGREES eller 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)

hastighet#

velocity returnerar hur snabbt motorn snurrar för närvarande i procent från -100 till 100.

Usage:
motor.velocity(unit)

Parametrar

Beskrivning

unit

Måttenhet: 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-vision#

ta_ögonblicksbild#

take_snapshot filtrerar data från IQ AI Vision Sensor-ramen till en enda signatur – en sparad beskrivning av något som sensorn kan känna igen, till exempel ett spelelement på planen – och returnerar en tupel.

Tupeln lagrar objekt sorterade från störst till minst efter bredd, med början vid index 0. Varje objekts egenskaper kan nås med hjälp av dess index. En tom tupel returneras om inga matchande objekt upptäcks.

Usage:
ai_vision.take_snapshot(signature)

Parametrar

Beskrivning

signature

Filtrerar datamängden för att endast inkludera data från den givna signaturen. Tillgängliga signaturer är:

  • AiVision.ALL_AIOBJS - Identifierar alla bönpåsar.
  • AiVision.ALL_TAGS - Identifierar AprilTags, som finns på sidorna av målen.

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)

Fastigheter#

Det finns sju egenskaper som ingår i varje objekt som lagras i en tupel efter att take_snapshot har använts.

Alla egenskapsvärden utom .id beskriver det detekterade objektets position och storlek i IQ AI Vision Sensors vy vid det ögonblick då take_snapshot användes. Dessa värden mäts i pixlar, baserat på sensorns upplösning på 320 x 240 pixlar.

.bredd#

.width returnerar bredden på det detekterade objektet i pixlar, vilket är ett heltal mellan 1 och 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)

.höjd#

.height returnerar höjden på det detekterade objektet i pixlar, vilket är ett heltal mellan 1 och 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 returnerar x-koordinaten för det detekterade objektets centrum i pixlar, vilket är ett heltal mellan 0 och 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 returnerar y-koordinaten för det detekterade objektets centrum i pixlar, vilket är ett heltal mellan 0 och 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 returnerar x-koordinaten för det övre vänstra hörnet av det detekterade objektets avgränsningsram i pixlar, vilket är ett heltal mellan 0 och 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)

.ursprungY#

.originY returnerar y-koordinaten för det övre vänstra hörnet av det detekterade objektets avgränsningsram i pixlar, vilket är ett heltal mellan 0 och 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 returnerar ID:t för den detekterade AI-klassificeringen som ett heltal.

AI-klassificering

id

BlåBönpåse

0

RödBönpåse

1

GulBönpåse

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)