Robotlara Özel Python#

giriiş#

Kahraman robot Flop, bir emme motoru, bir kol motoru ve bir IQ yapay zeka görüş sensörü içerir.

IQ 26-27 Seviye Yükseltme Oyun Alanında tüm standart VEXcode VR Python komutları kullanılabilir.

Aşağıda, robotlara özel tüm Python komutlarının listesi bulunmaktadır:

Hareket – Robotun motorlarını hareket ettirin ve takip edin.

  • İşlemler

    • döndür – Bir motoru sonsuza kadar tek yönde döndürür.

    • spin_for – Bir motoru belirli sayıda derece veya tur döndürür.

    • spin_to_position – Bir motoru belirli bir konuma döndürür.

    • durdur – Motorun dönmesini durdurur.

  • Ayarlar

    • set_velocity – Bir motorun ne kadar hızlı döneceğini ayarlar.

    • set_timeout – Bir motorun hareketi tamamlamaya çalışacağı süreyi ayarlar.

    • set_position – Motorun mevcut konumunu yeni bir değere değiştirir.

  • Değerler

    • is_done – Motorun hareketinin tamamlanıp tamamlanmadığını döndürür.

    • is_spinning – Motorun dönüp dönmediğini döndürür.

    • position – Motorun mevcut konumunu döndürür.

    • hız – Motorun ne kadar hızlı döndüğünü döndürür.

Yapay Zeka Görüntüleme – IQ Yapay Zeka Görüntüleme Sensörünü kullanarak nesneleri yakalayın ve analiz edin.

  • Alıcılar

    • take_snapshot – Sensörün mevcut karesini belirli bir imzaya göre filtreler ve algılanan nesnelerin bir demetini döndürür.

  • Özellikler

    • .width – Algılanan nesnenin piksel cinsinden genişliğini döndürür.

    • .height – Algılanan nesnenin yüksekliğini piksel cinsinden döndürür.

    • .centerX – Tespit edilen nesnenin merkezinin x koordinatını döndürür.

    • .centerY – Tespit edilen nesnenin merkezinin y koordinatını döndürür.

    • .originX – Tespit edilen nesnenin sınırlayıcı kutusunun sol üst köşesinin x koordinatını döndürür.

    • .originY – Tespit edilen nesnenin sınırlayıcı kutusunun sol üst köşesinin y koordinatını döndürür.

    • .id – Tespit edilen yapay zeka sınıflandırmasının kimliğini döndürür.

Bu sayfadaki örnekler, varsayılan Oyun Alanı başlangıç ​​konumunu kullanmaktadır.

Hareket#

Flop’un iki adet robota özgü motoru vardır: intake_motor ve arm_motorHer ikisi de standart motor komutlarını kullanır.

Yön sabitleri:

  • intake_motor: FORWARD = emme (toplar); REVERSE = emme (fırlatır)

  • arm_motor: FORWARD = yukarı (kaldırır); REVERSE = aşağı (indirir)

döndürmek#

spin komutu, motoru belirtilen yönde sonsuza kadar döndürür. Motor, başka bir komut verilene kadar dönmeye devam edecektir.

Usage:
motor.spin(direction)

Parametreler

Tanım

direction

Dönme yönü: FORWARD veya 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 komutu, bir motoru belirli bir mesafe boyunca döndürür. Proje, wait=False parametresi geçirilmediği sürece, bir sonraki komutu çalıştırmadan önce motorun dönmesini bekler.

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

Parametreler

Tanım

direction

Dönme yönü: FORWARD veya REVERSE.

amount

Dönme mesafesi. Bu bir tam sayı veya ondalık sayı olabilir.

unit

Ölçü birimi: DEGREES veya 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)

spin_to_position#

spin_to_position , bir motoru belirli bir konuma döndürür. Proje, wait=False parametresi geçirilmediği sürece, bir sonraki komutu çalıştırmadan önce motorun işini bitirmesini bekler.

Usage:
motor.spin_to_position(position, unit)

Parametreler

Tanım

position

Döndürülecek pozisyon. Bu bir tam sayı veya ondalık sayı olabilir.

unit

Ölçü birimi: DEGREES veya 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)

durmak#

stop durdurur, motorun dönmesini durdurur.

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)

hızı ayarla#

set_velocity , bir motorun dönüş hızını yüzde olarak 0 ile 100 arasında ayarlar.

Usage:
motor.set_velocity(velocity, unit)

Parametreler

Tanım

velocity

Motorun hızı, 0 ile 100 arasında yüzde olarak ifade edilir.

unit

Ölçü birimi: % 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)

zaman aşımını ayarla#

set_timeout , bir motorun durmadan önce hareketi tamamlamaya çalışacağı saniye sayısını belirler.

Usage:
motor.set_timeout(timeout, unit)

Parametreler

Tanım

timeout

Motorun hareketi tamamlamaya çalışacağı saniye sayısı.

unit

Ölçü birimi: 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)

konum belirle#

set_position komutu, motorun mevcut konumunu yeni bir değere değiştirir ve kodlayıcısını sıfırlar.

Usage:
motor.set_position(position, unit)

Parametreler

Tanım

position

Yeni pozisyon değeri.

unit

Ölçü birimi: DEGREES veya 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)

tamamlandı#

is_done , motorun hareketini tamamlayıp tamamlamadığını gösteren bir Boolean değer döndürür.

  • True – Motor hareket etmeyi bitirdi.

  • False – Motor hala hareket halinde.

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)

dönüyor#

is_spinning , motorun şu anda dönüp dönmediğini gösteren bir Boolean değer döndürür.

  • True – Motor dönüyor.

  • False – Motor dönmüyor.

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)

konum#

position motorun mevcut konumunu döndürür.

Usage:
motor.position(unit)

Parametreler

Tanım

unit

Ölçü birimi: DEGREES veya 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)

hız#

velocity , motorun şu anda ne kadar hızlı döndüğünü -100 ile 100 arasında bir yüzde olarak döndürür.

Usage:
motor.velocity(unit)

Parametreler

Tanım

unit

Ölçü birimi: % 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)

Yapay Zeka Vizyonu#

fotoğraf çek#

take_snapshot , IQ AI Vision Sensor çerçevesindeki verileri tek bir imzaya (sensörün tanıyabileceği bir şeyin, örneğin sahadaki bir oyun öğesinin, kaydedilmiş bir açıklaması) filtreler ve bir demet döndürür.

Bu demet, 0 indeksinden başlayarak genişliğe göre en büyükten en küçüğe doğru sıralanmış nesneleri saklar. Her nesnenin özelliklerine indeksi kullanılarak erişilebilir. Eşleşen nesne bulunmazsa boş bir demet döndürülür.

Usage:
ai_vision.take_snapshot(signature)

Parametreler

Tanım

signature

Veri kümesini yalnızca belirtilen imzaya sahip verileri içerecek şekilde filtreler. Mevcut imzalar şunlardır:

  • AiVision.ALL_AIOBJS - Tüm Bean Bag’leri algılar.
  • AiVision.ALL_TAGS - Kalelerin kenarlarında bulunan AprilTags’leri algılar.

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)

Özellikler#

take_snapshot kullanıldıktan sonra bir demette saklanan her nesneyle birlikte yedi özellik dahil edilir.

.id hariç tüm özellik değerleri, take_snapshot kullanıldığı anda IQ AI Vision Sensor’ün görüş alanındaki algılanan nesnenin konumunu ve boyutunu tanımlar. Bu değerler, sensörün 320 x 240 piksel çözünürlüğüne bağlı olarak piksel cinsinden ölçülür.

.Genişlik#

.width algılanan nesnenin piksel cinsinden genişliğini döndürür; bu, 1 ile 320 arasında bir tam sayıdır.

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)

.yükseklik#

.height fonksiyonu, tespit edilen nesnenin piksel cinsinden yüksekliğini döndürür; bu değer 1 ile 240 arasında bir tamsayıdır.

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 tespit edilen nesnenin merkezinin x koordinatını piksel cinsinden döndürür; bu, 0 ile 320 arasında bir tam sayıdır.

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 fonksiyonu, tespit edilen nesnenin merkezinin y koordinatını piksel cinsinden döndürür; bu değer 0 ile 240 arasında bir tamsayıdır.

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 tespit edilen nesnenin sınırlayıcı kutusunun sol üst köşesinin x koordinatını piksel cinsinden döndürür; bu, 0 ile 320 arasında bir tam sayıdır.

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)

.orijinY#

.originY tespit edilen nesnenin sınırlayıcı kutusunun sol üst köşesinin y koordinatını piksel cinsinden döndürür; bu, 0 ile 240 arasında bir tam sayıdır.

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)

.İD#

.id tespit edilen yapay zeka sınıflandırmasının kimliğini tam sayı olarak döndürür.

Yapay Zeka Sınıflandırması

İD

Mavi Fasulye Torbası

0

Kırmızı Fasulye Torbası

1

SarıPuf

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)