Python Khusus Robot#

Perkenalan#

Robot Hero, Flop, mencakup IntakeMotor, ArmMotor, dan IQ AI Vision Sensor.

Semua perintah Python VEXcode VR standar tersedia untuk digunakan di IQ 26-27 Level Up Playground.

Berikut adalah daftar semua perintah Python khusus robot yang tersedia:

Gerakan – Gerakkan dan lacak motor robot.

  • Tindakan

    • spin – Memutar motor ke satu arah selamanya.

    • spin_for – Memutar motor untuk sejumlah derajat atau putaran tertentu.

    • spin_to_position – Memutar motor ke posisi tertentu.

    • stop – Menghentikan putaran motor.

  • Pengaturan

    • set_velocity – Mengatur seberapa cepat motor akan berputar.

    • set_timeout – Mengatur berapa lama motor akan mencoba menyelesaikan suatu gerakan.

    • set_position – Mengubah posisi motor saat ini ke nilai baru.

  • Nilai-nilai

    • is_done – Mengembalikan nilai boolean yang menunjukkan apakah motor sudah selesai bergerak.

    • is_spinning – Mengembalikan nilai boolean yang menunjukkan apakah motor sedang berputar.

    • posisi – Mengembalikan posisi motor saat ini.

    • velocity – Mengembalikan seberapa cepat motor berputar.

AI Vision – Tangkap dan analisis objek menggunakan Sensor AI Vision IQ.

  • Penangkap

    • take_snapshot – Memfilter frame sensor saat ini ke tanda tangan tertentu dan mengembalikan tuple objek yang terdeteksi.

  • Properti

    • .width – Mengembalikan lebar objek yang terdeteksi dalam piksel.

    • .height – Mengembalikan tinggi objek yang terdeteksi dalam piksel.

    • .centerX – Mengembalikan koordinat x dari pusat objek yang terdeteksi.

    • .centerY – Mengembalikan koordinat y dari pusat objek yang terdeteksi.

    • .originX – Mengembalikan koordinat x dari sudut kiri atas kotak pembatas objek yang terdeteksi.

    • .originY – Mengembalikan koordinat y dari sudut kiri atas kotak pembatas objek yang terdeteksi.

    • .id – Mengembalikan ID Klasifikasi AI yang terdeteksi.

Contoh-contoh pada halaman ini menggunakan posisi awal Playground default.

Gerakan#

Flop memiliki dua motor khusus robot: intake_motor dan arm_motorKeduanya menggunakan perintah motor standar.

Konstanta arah:

  • intake_motor: FORWARD = masuk (mengumpulkan); REVERSE = keluar (mengeluarkan)

  • arm_motor: FORWARD = naik (mengangkat); REVERSE = turun (menurunkan)

putaran#

Perintah spin memutar motor ke arah yang diberikan selamanya. Motor akan terus berputar hingga diberi perintah lain.

Usage:
motor.spin(direction)

Parameter

Keterangan

direction

Arah putaran: FORWARD atau 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)

putar_untuk#

spin_for memutar motor sejauh jarak tertentu. Proyek menunggu hingga motor selesai berputar sebelum perintah berikutnya dijalankan kecuali jika wait=False dilewatkan.

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

Parameter

Keterangan

direction

Arah putaran: FORWARD atau REVERSE.

amount

Jarak putaran. Ini bisa berupa bilangan bulat atau desimal.

unit

Satuan pengukuran: DEGREES atau 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)

putar_ke_posisi#

spin_to_position memutar motor ke posisi tertentu. Proyek menunggu hingga motor selesai sebelum perintah berikutnya dijalankan kecuali wait=False dilewatkan.

Usage:
motor.spin_to_position(position, unit)

Parameter

Keterangan

position

Posisi yang akan diputar. Ini bisa berupa bilangan bulat atau desimal.

unit

Satuan pengukuran: DEGREES atau 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)

berhenti#

stop menghentikan motor agar tidak berputar.

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)

atur_kecepatan#

set_velocity mengatur seberapa cepat motor akan berputar sebagai persentase dari 0 hingga 100.

Usage:
motor.set_velocity(velocity, unit)

Parameter

Keterangan

velocity

Kecepatan motor sebagai persentase dari 0 hingga 100.

unit

Satuan pengukuran: 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)

waktu habis#

set_timeout mengatur berapa detik motor akan mencoba menyelesaikan suatu gerakan sebelum berhenti.

Usage:
motor.set_timeout(timeout, unit)

Parameter

Keterangan

timeout

Jumlah detik yang akan dijalani motor untuk mencoba menyelesaikan suatu gerakan.

unit

Satuan pengukuran: 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)

posisi_tetap#

set_position mengubah posisi motor saat ini ke nilai baru, mereset encoder-nya.

Usage:
motor.set_position(position, unit)

Parameter

Keterangan

position

Nilai posisi baru.

unit

Satuan pengukuran: DEGREES atau 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)

selesai#

is_done mengembalikan nilai Boolean yang menunjukkan apakah motor telah menyelesaikan pergerakannya.

  • True – Motor telah selesai bergerak.

  • False – Motor masih bergerak.

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)

sedang berputar#

is_spinning mengembalikan nilai Boolean yang menunjukkan apakah motor saat ini sedang berputar.

  • True – Motor sedang berputar.

  • False – Motor tidak berputar.

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)

posisi#

position mengembalikan posisi motor saat ini.

Usage:
motor.position(unit)

Parameter

Keterangan

unit

Satuan pengukuran: DEGREES atau 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)

kecepatan#

velocity mengembalikan kecepatan putaran motor saat ini dalam persentase dari -100 hingga 100.

Usage:
motor.velocity(unit)

Parameter

Keterangan

unit

Satuan pengukuran: 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)

Visi AI#

ambil_foto#

take_snapshot menyaring data dari frame IQ AI Vision Sensor ke satu tanda tangan tunggal — deskripsi tersimpan dari sesuatu yang dapat dikenali sensor, seperti elemen permainan di lapangan — dan mengembalikan tuple.

Tuple menyimpan objek yang diurutkan dari lebar terbesar ke terkecil, dimulai dari indeks 0. Properti setiap objek dapat diakses menggunakan indeksnya. Tuple kosong akan dikembalikan jika tidak ada objek yang cocok yang terdeteksi.

Usage:
ai_vision.take_snapshot(signature)

Parameter

Keterangan

signature

Memfilter dataset agar hanya menyertakan data dengan tanda tangan yang diberikan. Tanda tangan yang tersedia adalah:

  • AiVision.ALL_AIOBJS - Mendeteksi semua Bean Bags.
  • AiVision.ALL_TAGS - Mendeteksi AprilTags, yang terdapat di sisi Goals.

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)

Properti#

Ada tujuh properti yang disertakan dengan setiap objek yang disimpan dalam tuple setelah take_snapshot digunakan.

Semua nilai properti kecuali .id menjelaskan posisi dan ukuran objek yang terdeteksi dalam tampilan IQ AI Vision Sensor pada saat take_snapshot digunakan. Nilai-nilai ini diukur dalam piksel, berdasarkan resolusi sensor 320 x 240 piksel.

.lebar#

.width mengembalikan lebar objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 1 dan 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)

.tinggi#

.height mengembalikan tinggi objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 1 dan 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 mengembalikan koordinat x dari pusat objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 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 mengembalikan koordinat y dari pusat objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 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 mengembalikan koordinat x dari sudut kiri atas kotak pembatas objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 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)

.asalY#

.originY mengembalikan koordinat y dari sudut kiri atas kotak pembatas objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 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)

.pengenal#

.id mengembalikan ID Klasifikasi AI yang terdeteksi sebagai bilangan bulat.

Klasifikasi AI

pengenal

Kantung Biru

0

Kantung Kacang Merah

1

Kantung Kacang Kuning

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)