Robotiem specifisks Python#

Ievads#

Varoņa robotam Flop ir iekļauts ieplūdes motors, rokas motors un IQ AI redzes sensors.

Visas standarta VEXcode VR Python komandas ir pieejamas lietošanai IQ 26-27 Level Up rotaļu laukumā.

Zemāk ir saraksts ar visām pieejamajām robotiem paredzētajām Python komandām:

Kustība — pārvietojiet un izsekojiet robota motorus.

  • Darbības

    • spin – Griež motoru vienā virzienā mūžīgi.

    • spin_for – Pagriež motoru par noteiktu grādu vai apgriezienu skaitu.

    • spin_to_position – Pagriež motoru noteiktā pozīcijā.

    • stop – Aptur motora griešanos.

  • Iestatījumi

    • set_velocity – Nosaka motora griešanās ātrumu.

    • set_timeout – Iestata, cik ilgi motors mēģinās pabeigt kustību.

    • set_position – Maina motora pašreizējo pozīciju uz jaunu vērtību.

  • Vērtības

    • is_done – Atgriež, vai motors ir beidzis kustību.

    • is_spinning – Atgriež, vai motors griežas.

    • position – Atgriež motora pašreizējo pozīciju.

    • ātrums – Atgriež motora griešanās ātrumu.

AI redze — uztveriet un analizējiet objektus, izmantojot IQ AI redzes sensoru.

  • Geters

    • take_snapshot – Filtrē sensora pašreizējo kadru pēc noteikta paraksta un atgriež noteiktu objektu sarakstu.

  • Īpašumi

    • .width – Atgriež noteiktā objekta platumu pikseļos.

    • .height – Atgriež noteiktā objekta augstumu pikseļos.

    • .centerX – Atgriež noteiktā objekta centra x koordinātu.

    • .centerY – Atgriež noteiktā objekta centra y koordinātu.

    • .originX – Atgriež noteiktā objekta ierobežojošā lodziņa augšējā kreisā stūra x koordinātu.

    • .originY – Atgriež noteiktā objekta ierobežojošā lodziņa augšējā kreisā stūra y koordinātu.

    • .id – Atgriež noteiktās AI klasifikācijas ID.

Šajā lapā esošajos piemēros tiek izmantota noklusējuma Playground sākuma pozīcija.

Kustība#

Flopam ir divi robotam specifiski motori: intake_motor un arm_motorAbi izmanto standarta motoru komandas.

Virziena konstantes:

  • intake_motor: FORWARD = ieplūde (savāc); REVERSE = izplūde (izstumj)

  • arm_motor: FORWARD = uz augšu (paceļas); REVERSE = uz leju (nolaižas)

grieziens#

spin griež motoru dotajā virzienā mūžīgi. Motors turpinās griezties, līdz tam tiks dota cita komanda.

Usage:
motor.spin(direction)

Parametri

Apraksts

direction

Griešanās virziens: FORWARD vai 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)

grieziena_priekšmets#

spin_for griež motoru noteiktu attālumu. Projekts gaida, līdz motors ir pabeigts, pirms tiek palaista nākamā komanda, ja vien netiek nodota vērtība wait=False.

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

Parametri

Apraksts

direction

Griešanās virziens: FORWARD vai REVERSE.

amount

Griešanās attālums. Tas var būt vesels skaitlis vai decimālskaitlis.

unit

Mērvienība: DEGREES vai 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)

griezt_līdz_pozīcijai#

spin_to_position griež motoru uz noteiktu pozīciju. Projekts gaida, līdz motors ir pabeigts, pirms tiek palaista nākamā komanda, ja vien netiek nodota vērtība wait=False.

Usage:
motor.spin_to_position(position, unit)

Parametri

Apraksts

position

Pozīcija, kurā griezties. Tas var būt vesels skaitlis vai decimālskaitlis.

unit

Mērvienība: DEGREES vai 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)

apstāties#

stop aptur motora griešanos.

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)

iestatīt_ātrumu#

set_velocity nosaka motora griešanās ātrumu procentos no 0 līdz 100.

Usage:
motor.set_velocity(velocity, unit)

Parametri

Apraksts

velocity

Motora ātrums procentos no 0 līdz 100.

unit

Mērvienība: 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)

iestatīts_laika_izslēgums#

set_timeout nosaka, cik sekundes motors mēģinās pabeigt kustību pirms apstāšanās.

Usage:
motor.set_timeout(timeout, unit)

Parametri

Apraksts

timeout

Sekunžu skaits, cik ilgi motors mēģinās pabeigt kustību.

unit

Mērvienība: 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)

iestatītā_pozīcija#

set_position maina motora pašreizējo pozīciju uz jaunu vērtību, atiestatot tā kodētāju.

Usage:
motor.set_position(position, unit)

Parametri

Apraksts

position

Jaunā pozīcijas vērtība.

unit

Mērvienība: DEGREES vai 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)

ir_pabeigts#

is_done atgriež Būla vērtību, kas norāda, vai motors ir pabeidzis kustību.

  • True – Motors ir beidzis kustību.

  • False – Motors joprojām kustas.

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)

griežas#

is_spinning atgriež Būla vērtību, kas norāda, vai motors pašlaik griežas.

  • True – Motors griežas.

  • False – Motors negriežas.

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īcija#

position atgriež motora pašreizējo pozīciju.

Usage:
motor.position(unit)

Parametri

Apraksts

unit

Mērvienība: DEGREES vai 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)

ātrums#

velocity atgriež motora pašreizējo griešanās ātrumu procentos no -100 līdz 100.

Usage:
motor.velocity(unit)

Parametri

Apraksts

unit

Mērvienība: 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)

Mākslīgā intelekta vīzija#

uzņemt_momentuzņēmumu#

take_snapshot filtrē datus no IQ AI redzes sensora kadra līdz vienam parakstam — saglabātam aprakstam par kaut ko, ko sensors var atpazīt, piemēram, spēles elementu laukumā — un atgriež kortežu.

Kortežs saglabā objektus, kas sakārtoti no lielākā līdz mazākajam pēc platuma, sākot ar indeksu 0. Katra objekta īpašībām var piekļūt, izmantojot tā indeksu. Ja netiek atrasti atbilstoši objekti, tiek atgriezts tukšs kortežs.

Usage:
ai_vision.take_snapshot(signature)

Parametri

Apraksts

signature

Filtrē datu kopu, lai iekļautu tikai dotā paraksta datus. Pieejamie paraksti ir:

  • AiVision.ALL_AIOBJS  — nosaka visus pupiņu maisus.
  • AiVision.ALL_TAGS  — nosaka AprilTags, kas atrodas mērķu sānos.

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)

Īpašumi#

Pēc take_snapshot izmantošanas katrā objektā, kas tiek glabāts kortežā, ir iekļautas septiņas īpašības.

Visas rekvizītu vērtības, izņemot .id apraksta noteiktā objekta pozīciju un izmēru IQ AI redzes sensora skatā brīdī, kad tika izmantots take_snapshot Šīs vērtības tiek mērītas pikseļos, pamatojoties uz sensora 320 x 240 pikseļu izšķirtspēju.

.platums#

.width atgriež noteiktā objekta platumu pikseļos, kas ir vesels skaitlis no 1 līdz 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)

.augstums#

.height atgriež noteiktā objekta augstumu pikseļos, kas ir vesels skaitlis no 1 līdz 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 atgriež noteiktā objekta centra x koordinātu pikseļos, kas ir vesels skaitlis no 0 līdz 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 atgriež noteiktā objekta centra y koordinātu pikseļos, kas ir vesels skaitlis no 0 līdz 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 atgriež noteiktā objekta ierobežojošā lodziņa augšējā kreisā stūra x koordinātu pikseļos, kas ir vesels skaitlis no 0 līdz 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 atgriež noteiktā objekta ierobežojošā lodziņa augšējā kreisā stūra y koordinātu pikseļos, kas ir vesels skaitlis no 0 līdz 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 atgriež noteiktās AI klasifikācijas ID kā veselu skaitli.

AI klasifikācija

id

BlueBeanBag

0

RedBeanBag

1

YellowBeanBag

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)