Robotams skirtas Python#

Įvadas#

Didvyriškasis robotas „Flop“ turi įsiurbimo variklį, rankos variklį ir IQ AI regėjimo jutiklį.

Visos standartinės „VEXcode VR Python“ komandos yra prieinamos IQ 26–27 lygio kėlimo žaidimų aikštelėje.

Žemiau pateikiamas visų galimų robotams skirtų Python komandų sąrašas:

Judėjimas – judinkite ir sekite roboto variklius.

  • Veiksmai

    • suktis – Suka variklį viena kryptimi amžinai.

    • spin_for – Suka variklį tam tikrą laipsnių arba apsisukimų skaičių.

    • spin_to_position – Suka variklį į konkrečią padėtį.

    • stop – Sustabdo variklio sukimąsi.

  • Nustatymai

    • set_velocity – Nustato variklio sukimosi greitį.

    • set_timeout – Nustato, kiek laiko variklis bandys užbaigti judesį.

    • set_position – Pakeičia dabartinę variklio padėtį į naują reikšmę.

  • Vertės

    • is_done – Grąžina, ar variklis baigė judėti.

    • is_spinning – Grąžina, ar variklis sukasi.

    • position – Grąžina dabartinę variklio padėtį.

    • greitis – Grąžina variklio sukasi greitį.

AI vizija – fiksuokite ir analizuokite objektus naudodami IQ AI vizijos jutiklį.

  • Getteriai

    • take_snapshot – Filtruoja dabartinį jutiklio kadrą pagal konkretų parašą ir grąžina aptiktų objektų rinkinį.

  • Ypatybės

    • .width – Grąžina aptikto objekto plotį pikseliais.

    • .height – Grąžina aptikto objekto aukštį pikseliais.

    • .centerX – Grąžina aptikto objekto centro x koordinatę.

    • .centerY – Grąžina aptikto objekto centro y koordinatę.

    • .originX – Grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo x koordinatę.

    • .originY – Grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo y koordinatę.

    • .id – Grąžina aptiktos dirbtinio intelekto klasifikacijos ID.

Šiame puslapyje pateiktuose pavyzdžiuose naudojama numatytoji „Playground“ pradžios pozicija.

Judesys#

„Flop“ turi du robotui būdingus variklius: intake_motor ir arm_motorAbu naudoja standartines variklių komandas.

Krypties konstantos:

  • intake_motor: FORWARD = įsiurbimas (surenka); REVERSE = išmetimas (išmeta)

  • arm_motor: FORWARD = aukštyn (kelia); REVERSE = žemyn (nuleidžia)

sukimasis#

spin suka variklį nurodyta kryptimi amžinai. Variklis suksis tol, kol jam bus duota kita komanda.

Usage:
motor.spin(direction)

Parametrai

Aprašymas

direction

Sukimosi kryptis: FORWARD arba 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)

sukimo_skirtas#

spin_for suka variklį tam tikrą atstumą. Projektas laukia, kol variklis bus baigtas, prieš paleidžiant kitą komandą, nebent būtų perduota wait=False.

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

Parametrai

Aprašymas

direction

Sukimosi kryptis: FORWARD arba REVERSE.

amount

Sukimosi atstumas. Tai gali būti sveikasis skaičius arba dešimtainė trupmena.

unit

Matavimo vienetas: DEGREES arba 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)

sukimo_į_poziciją#

spin_to_position suka variklį į konkrečią padėtį. Projektas laukia, kol variklis bus baigtas, prieš paleidžiant kitą komandą, nebent būtų perduota wait=False.

Usage:
motor.spin_to_position(position, unit)

Parametrai

Aprašymas

position

Sukimo vieta. Tai gali būti sveikasis skaičius arba dešimtainis skaičius.

unit

Matavimo vienetas: DEGREES arba 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)

sustoti#

stop sustabdo variklio sukimąsi.

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)

nustatytas_greitis#

set_velocity nustato variklio sukimosi greitį procentais nuo 0 iki 100.

Usage:
motor.set_velocity(velocity, unit)

Parametrai

Aprašymas

velocity

Variklio greitis procentais nuo 0 iki 100.

unit

Matavimo vienetas: 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)

nustatytas_laikas#

set_timeout nustato, kiek sekundžių variklis bandys užbaigti judesį prieš sustodamas.

Usage:
motor.set_timeout(timeout, unit)

Parametrai

Aprašymas

timeout

Sekundžių skaičius, kurį variklis bandys užbaigti judesį.

unit

Matavimo vienetas: 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)

nustatyta_pozicija#

set_position pakeičia dabartinę variklio padėtį į naują reikšmę, iš naujo nustatydamas jo kodavimo įrenginį.

Usage:
motor.set_position(position, unit)

Parametrai

Aprašymas

position

Nauja pozicijos vertė.

unit

Matavimo vienetas: DEGREES arba 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)

baigta#

is_done grąžina loginę reikšmę, nurodančią, ar variklis baigė judėti.

  • True – Variklis nustojo judėti.

  • False – Variklis vis dar juda.

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)

sukasi#

is_spinning grąžina loginę reikšmę, nurodančią, ar variklis šiuo metu sukasi.

  • True – Variklis sukasi.

  • False – Variklis nesisuka.

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)

pozicija#

position grąžina dabartinę variklio padėtį.

Usage:
motor.position(unit)

Parametrai

Aprašymas

unit

Matavimo vienetas: DEGREES arba 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)

greitis#

velocity grąžina variklio sukasi greitį procentais nuo -100 iki 100.

Usage:
motor.velocity(unit)

Parametrai

Aprašymas

unit

Matavimo vienetas: 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)

Dirbtinio intelekto vizija#

fotografuoti_momentinę nuotrauką#

take_snapshot filtruoja duomenis iš IQ AI regėjimo jutiklio kadro į vieną parašą – išsaugotą aprašymą to, ką jutiklis gali atpažinti, pvz., žaidimo elementą lauke, – ir grąžina rinkinį.

Šiame rinkinyje objektai saugomi surūšiuoti nuo didžiausio iki mažiausio pagal plotį, pradedant nuo indekso 0. Kiekvieno objekto properties galima pasiekti naudojant jo indeksą. Jei nerandama atitinkamų objektų, grąžinama tuščia rinkinio reikšmė.

Usage:
ai_vision.take_snapshot(signature)

Parametrai

Aprašymas

signature

Filtruoja duomenų rinkinį, kad būtų įtraukti tik nurodyto parašo duomenys. Galimi parašai:

  • AiVision.ALL_AIOBJS – aptinka visus „pupų maišus“.
  • AiVision.ALL_TAGS – aptinka „AprilTags“, esančius tikslų šonuose.

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)

Ypatybės#

Kiekvienam objektui, saugomam rinkinyje po take_snapshot, panaudojimo, priskiriamos septynios savybės.

Visos ypatybių reikšmės, išskyrus .id apibūdina aptikto objekto padėtį ir dydį IQ AI regėjimo jutiklio rodinyje tuo metu, kai buvo naudojamas take_snapshot Šios reikšmės matuojamos pikseliais, remiantis jutiklio 320 x 240 pikselių skiriamąja geba.

.plotis#

.width grąžina aptikto objekto plotį pikseliais, kuris yra sveikasis skaičius nuo 1 iki 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)

.aukštis#

.height grąžina aptikto objekto aukštį pikseliais, kuris yra sveikasis skaičius nuo 1 iki 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 grąžina aptikto objekto centro x koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 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 grąžina aptikto objekto centro y koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 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 grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo x koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 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 grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo y koordinatę pikseliais, kurie yra sveikasis skaičius nuo 0 iki 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 grąžina aptiktos dirbtinio intelekto klasifikacijos ID kaip sveikąjį skaičių.

DI klasifikacija

id

Mėlynųjų pupelių maišelis

0

RaudonpupųMaišas

1

Geltonpupų maišelis

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)