Robottikohtainen Python#

Johdanto#

Sankaribotti Flop sisältää imumoottorin, käsimoottorin ja IQ AI -näköanturin.

Kaikki VEXcode VR Python -vakiokomennot ovat käytettävissä IQ 26-27 Level Up -leikkikentällä.

Alla on luettelo kaikista käytettävissä olevista robottikohtaisista Python-komennoista:

Liike – Liikuta ja seuraa robotin moottoreita.

  • Toiminnot

    • spin – Pyörittää moottoria yhteen suuntaan ikuisesti.

    • spin_for – Pyörittää moottoria tietyn määrän asteita tai kierroksia.

    • spin_to_position – Pyörittää moottorin tiettyyn asentoon.

    • stop – Pysäyttää moottorin pyörimisen.

  • Asetukset

    • set_velocity – Määrittää moottorin pyörimisnopeuden.

    • set_timeout – Määrittää, kuinka kauan moottori yrittää suorittaa liikkeen loppuun.

    • set_position – Muuttaa moottorin nykyisen sijainnin uuteen arvoon.

  • Arvot

    • is_done – Palauttaa, onko moottorin liike päättynyt.

    • is_spinning – Palauttaa, pyöriikö moottori.

    • position – Palauttaa moottorin nykyisen sijainnin.

    • nopeus – Palauttaa moottorin pyörimisnopeuden.

Tekoälynäkö – Kaappaa ja analysoi esineitä IQ AI -näköanturilla.

  • Getters

    • take_snapshot – Suodattaa anturin nykyisen kehyksen tietyn tunnisteen mukaan ja palauttaa havaittujen objektien tuplen.

  • Kiinteistöt

    • .width – Palauttaa havaitun objektin leveyden pikseleinä.

    • .height – Palauttaa havaitun objektin korkeuden pikseleinä.

    • .centerX – Palauttaa havaitun objektin keskipisteen x-koordinaatin.

    • .centerY – Palauttaa havaitun objektin keskipisteen y-koordinaatin.

    • .originX – Palauttaa havaitun objektin rajaavan laatikon vasemman yläkulman x-koordinaatin.

    • .originY – Palauttaa havaitun objektin rajaavan laatikon vasemman yläkulman y-koordinaatin.

    • .id – Palauttaa havaitun tekoälyluokituksen tunnuksen.

Tämän sivun esimerkeissä käytetään leikkikentän oletusarvoista aloituskohtaa.

Liike#

Flopissa on kaksi robottikohtaista moottoria: intake_motor ja arm_motorMolemmat käyttävät moottorin vakiokomentoja.

Suuntavakiot:

  • intake_motor: FORWARD = imu (kerää); REVERSE = ulostulo (poistaa)

  • arm_motor: FORWARD = ylös (nostaa); REVERSE = alas (laskee)

pyörähdys#

spin pyörittää moottoria annettuun suuntaan ikuisesti. Moottori jatkaa pyörimistä, kunnes sille annetaan uusi komento.

Usage:
motor.spin(direction)

Parametrit

Kuvaus

direction

Pyörimissuunta: FORWARD tai 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 pyörittää moottoria tietyn matkan. Projekti odottaa, kunnes moottori on valmis, ennen seuraavan komennon suorittamista, ellei anneta arvoa wait=False.

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

Parametrit

Kuvaus

direction

Pyörimissuunta: FORWARD tai REVERSE.

amount

Pyörimismatka. Tämä voi olla kokonaisluku tai desimaaliluku.

unit

Mittayksikkö: DEGREES tai 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)

pyöritä_asentoon#

spin_to_position pyörittää moottoria tiettyyn asentoon. Projekti odottaa, kunnes moottori on valmis, ennen seuraavan komennon suorittamista, ellei anneta arvoa wait=False.

Usage:
motor.spin_to_position(position, unit)

Parametrit

Kuvaus

position

Pyörimiskohta. Tämä voi olla kokonaisluku tai desimaaliluku.

unit

Mittayksikkö: DEGREES tai 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 pysäyttää moottorin pyörimisen.

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 asettaa moottorin pyörimisnopeuden prosentteina väliltä 0 - 100.

Usage:
motor.set_velocity(velocity, unit)

Parametrit

Kuvaus

velocity

Moottorin nopeus prosentteina välillä 0 - 100.

unit

Mittayksikkö: 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)

asetettu_aikakatkaisu#

set_timeout määrittää, kuinka monta sekuntia moottori yrittää suorittaa liikkeen loppuun ennen pysähtymistä.

Usage:
motor.set_timeout(timeout, unit)

Parametrit

Kuvaus

timeout

Sekuntimäärä, jonka moottori yrittää suorittaa liikkeen loppuun.

unit

Mittayksikkö: 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)

asetettu_sijainti#

set_position muuttaa moottorin nykyisen sijainnin uuteen arvoon ja nollaa sen enkooderin.

Usage:
motor.set_position(position, unit)

Parametrit

Kuvaus

position

Uusi sijainnin arvo.

unit

Mittayksikkö: DEGREES tai 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)

on_valmis#

is_done palauttaa totuusarvon, joka ilmaisee, onko moottori lopettanut liikkeensä.

  • True – Moottori on lakannut liikkumasta.

  • False – Moottori liikkuu edelleen.

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)

pyörii#

is_spinning palauttaa totuusarvon, joka ilmaisee, pyöriikö moottori parhaillaan.

  • True – Moottori pyörii.

  • False – Moottori ei pyöri.

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)

asema#

position palauttaa moottorin nykyisen asennon.

Usage:
motor.position(unit)

Parametrit

Kuvaus

unit

Mittayksikkö: DEGREES tai 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)

nopeus#

velocity palauttaa moottorin nykyisen pyörimisnopeuden prosentteina väliltä -100 - 100.

Usage:
motor.velocity(unit)

Parametrit

Kuvaus

unit

Mittayksikkö: 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)

Tekoälyvisio#

ota_kuva#

take_snapshot suodattaa IQ AI -näköanturin kehyksen tiedot yhdeksi allekirjoitukseksi – tallennetuksi kuvaukseksi jostakin, jonka anturi tunnistaa, kuten kentällä olevasta pelielementistä – ja palauttaa tuplen.

Tuple tallentaa objektit leveyden mukaan suurimmasta pienimpään järjestettyinä alkaen indeksistä 0. Kunkin objektin properties-ominaisuuksiin pääsee käsiksi sen indeksin avulla. Jos vastaavia objekteja ei löydy, palautetaan tyhjä tuple.

Usage:
ai_vision.take_snapshot(signature)

Parametrit

Kuvaus

signature

Suodattaa tietojoukon sisältämään vain annetun allekirjoituksen tiedot. Käytettävissä olevat allekirjoitukset ovat:

  • AiVision.ALL_AIOBJS - Tunnistaa kaikki papupussit.
  • AiVision.ALL_TAGS - Tunnistaa tavoitteiden sivuilla olevat AprilTagit.

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)

Ominaisuudet#

Tupleen tallennetussa objektissa on seitsemän ominaisuutta take_snapshot -metodin käytön jälkeen.

Kaikki ominaisuusarvot paitsi .id kuvaavat havaitun kohteen sijainnin ja koon IQ AI -näköanturin näkymässä sillä hetkellä, kun take_snapshot take_snapshot käytettiin. Nämä arvot mitataan pikseleinä anturin 320 x 240 pikselin resoluution perusteella.

.leveys#

.width palauttaa havaitun objektin leveyden pikseleinä, joka on kokonaisluku väliltä 1–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)

.korkeus#

.height palauttaa havaitun objektin korkeuden pikseleinä, joka on kokonaisluku väliltä 1 ja 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 palauttaa havaitun objektin keskipisteen x-koordinaatin pikseleinä, joka on kokonaisluku väliltä 0–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 palauttaa havaitun objektin keskipisteen y-koordinaatin pikseleinä, joka on kokonaisluku väliltä 0–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 palauttaa havaitun objektin rajaavan laatikon vasemman yläkulman x-koordinaatin pikseleinä, joka on kokonaisluku väliltä 0–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 palauttaa havaitun objektin rajaavan laatikon vasemman yläkulman y-koordinaatin pikseleinä, joka on kokonaisluku väliltä 0–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-tiedosto#

.id palauttaa havaitun tekoälyluokituksen ID:n kokonaislukuna.

Tekoälyluokitus

tunnus

SininenPapuPussi

0

PunainenPapupussi

1

KeltainenPapupussi

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)