لغة بايثون الخاصة بالروبوتات#

مقدمة#

يشتمل الروبوت البطل، فلوب، على محرك سحب، ومحرك ذراع، ومستشعر رؤية ذكاء اصطناعي.

جميع أوامر VEXcode VR Python القياسية متاحة للاستخدام في IQ 26-27 Level Up Playground.

فيما يلي قائمة بجميع أوامر بايثون المتاحة الخاصة بالروبوت:

الحركة – تحريك وتتبع محركات الروبوت.

  • الإجراءات

    • spin – يدور المحرك في اتجاه واحد إلى الأبد.

    • spin_for – يقوم بتدوير المحرك لعدد محدد من الدرجات أو الدورات.

    • spin_to_position – يقوم بتدوير المحرك إلى موضع محدد.

    • stop – يوقف دوران المحرك.

  • إعدادات

    • set_velocity – يحدد مدى سرعة دوران المحرك.

    • set_timeout – يحدد المدة التي سيحاول فيها المحرك إنهاء الحركة.

    • set_position – يغير موضع المحرك الحالي إلى قيمة جديدة.

  • قيم

    • is_done – تُرجع ما إذا كان المحرك قد انتهى من الحركة.

    • is_spinning – تُرجع ما إذا كان المحرك يدور أم لا.

    • position – يعيد الموضع الحالي للمحرك.

    • السرعة – تُرجع مدى سرعة دوران المحرك.

الرؤية بالذكاء الاصطناعي - التقاط وتحليل الأشياء باستخدام مستشعر الرؤية بالذكاء الاصطناعي من IQ.

  • المُنجزون

    • take_snapshot – يقوم بتصفية الإطار الحالي للمستشعر إلى توقيع محدد ويعيد مجموعة من الكائنات المكتشفة.

  • ملكيات

    • .width – تُرجع عرض الكائن المكتشف بالبكسل.

    • .height – تُرجع ارتفاع الكائن المكتشف بالبكسل.

    • .centerX – تُرجع إحداثيات x لمركز الكائن المكتشف.

    • .centerY – تُرجع إحداثيات y لمركز الكائن المكتشف.

    • .originX – تُرجع إحداثيات x للزاوية العلوية اليسرى للمربع المحيط بالكائن المكتشف.

    • .originY – تُرجع إحداثيات y للزاوية العلوية اليسرى من المربع المحيط بالكائن المكتشف.

    • .id – يُرجع معرف تصنيف الذكاء الاصطناعي المكتشف.

تستخدم الأمثلة الموجودة في هذه الصفحة موضع البداية الافتراضي في ساحة اللعب.

حركة#

يحتوي Flop على محركين خاصين بالروبوت: intake_motor و arm_motorيستخدم كلاهما أوامر المحرك القياسية.

ثوابت الاتجاه:

  • intake_motor: FORWARD = سحب (يجمع)؛ REVERSE = إخراج (يقذف)

  • arm_motor: FORWARD = لأعلى (يرفع)؛ REVERSE = لأسفل (يخفض)

يلف#

spin المحرك في الاتجاه المحدد إلى الأبد. سيستمر المحرك في الدوران حتى يتم إعطاؤه أمرًا آخر.

Usage:
motor.spin(direction)

حدود

وصف

direction

اتجاه الدوران: FORWARD أو 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 يُدير المحرك لمسافة محددة. ينتظر البرنامج حتى ينتهي المحرك من الدوران قبل تنفيذ الأمر التالي، إلا إذا تم تمرير wait=False.

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

حدود

وصف

direction

اتجاه الدوران: FORWARD أو REVERSE.

amount

المسافة اللازمة للدوران. يمكن أن تكون هذه المسافة عددًا صحيحًا أو عددًا عشريًا.

unit

وحدة القياس: DEGREES أو 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 يُدير المحرك إلى موضع محدد. ينتظر البرنامج حتى ينتهي المحرك من الدوران قبل تنفيذ الأمر التالي، إلا إذا تم تمرير wait=False.

Usage:
motor.spin_to_position(position, unit)

حدود

وصف

position

الموضع الذي يجب الدوران إليه. يمكن أن يكون هذا عددًا صحيحًا أو عددًا عشريًا.

unit

وحدة القياس: DEGREES أو 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 يوقف دوران المحرك.

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 يحدد مدى سرعة دوران المحرك كنسبة مئوية من 0 إلى 100.

Usage:
motor.set_velocity(velocity, unit)

حدود

وصف

velocity

سرعة المحرك كنسبة مئوية من 0 إلى 100.

unit

وحدة القياس: 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)

set_timeout#

set_timeout يحدد عدد الثواني التي سيحاول فيها المحرك إنهاء الحركة قبل التوقف.

Usage:
motor.set_timeout(timeout, unit)

حدود

وصف

timeout

عدد الثواني التي سيحاول فيها المحرك إنهاء الحركة.

unit

وحدة القياس: 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)

تحديد_الموضع#

set_position يغير موضع المحرك الحالي إلى قيمة جديدة، مما يؤدي إلى إعادة ضبط جهاز التشفير الخاص به.

Usage:
motor.set_position(position, unit)

حدود

وصف

position

قيمة الموضع الجديدة.

unit

وحدة القياس: DEGREES أو 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)

تم الانتهاء#

is_done تُرجع قيمة منطقية تشير إلى ما إذا كان المحرك قد أنهى حركته.

  • True – انتهى المحرك من الحركة.

  • False – المحرك لا يزال يتحرك.

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)

is_spinning#

is_spinning تُرجع قيمة منطقية تشير إلى ما إذا كان المحرك يدور حاليًا.

  • True – المحرك يدور.

  • False – المحرك لا يدور.

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)

موضع#

الوضع position يعيد الوضع الحالي للمحرك.

Usage:
motor.position(unit)

حدود

وصف

unit

وحدة القياس: DEGREES أو 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)

سرعة#

velocity تُرجع مدى سرعة دوران المحرك حاليًا كنسبة مئوية من -100 إلى 100.

Usage:
motor.velocity(unit)

حدود

وصف

unit

وحدة القياس: 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)

رؤية الذكاء الاصطناعي#

التقاط_لقطة#

take_snapshot تقوم بتصفية البيانات من إطار مستشعر الرؤية IQ AI إلى توقيع واحد - وهو وصف محفوظ لشيء يمكن للمستشعر التعرف عليه، مثل عنصر اللعبة في الملعب - وتعيد مجموعة.

The tuple stores objects ordered from largest to smallest by width, starting at index 0. Each object’s properties can be accessed using its index. An empty tuple is returned if no matching objects are detected.

Usage:
ai_vision.take_snapshot(signature)

حدود

وصف

signature

يقوم هذا الإجراء بتصفية مجموعة البيانات بحيث لا تتضمن إلا البيانات التي تحمل التوقيع المحدد. التوقيعات المتاحة هي:

  • AiVision.ALL_AIOBJS - يكشف جميع أكياس الفول.
  • AiVision.ALL_TAGS - يكشف علامات AprilTags الموجودة على جوانب الأهداف.

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)

ملكيات#

هناك سبع خصائص يتم تضمينها مع كل كائن مخزن في مجموعة بعد استخدام take_snapshot.

تصف جميع قيم الخصائص، باستثناء .id موضع وحجم الكائن المكتشف في مجال رؤية مستشعر IQ AI Vision لحظة استخدام الأمر take_snapshot تُقاس هذه القيم بالبكسل، بناءً على دقة المستشعر البالغة 320 × 240 بكسل.

.عرض#

.width تُرجع عرض الكائن المكتشف بالبكسل، وهو عدد صحيح بين 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)

.ارتفاع#

.height تُرجع ارتفاع الكائن المكتشف بالبكسل، وهو عدد صحيح بين 1 و 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 تُرجع الإحداثي السيني لمركز الكائن المكتشف بالبكسل، وهو عدد صحيح بين 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 تُرجع إحداثيات y لمركز الكائن المكتشف بالبكسل، وهو عدد صحيح بين 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 تُرجع الإحداثي السيني للزاوية العلوية اليسرى من المربع المحيط بالكائن المكتشف بالبكسل، وهو عدد صحيح بين 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 تُرجع إحداثيات y للزاوية العلوية اليسرى للمربع المحيط بالكائن المكتشف بالبكسل، وهو عدد صحيح بين 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 تُرجع معرف تصنيف الذكاء الاصطناعي المكتشف كرقم صحيح.

تصنيف الذكاء الاصطناعي

بطاقة تعريف

بلو بين باج

0

ريد بين باج

1

حقيبة فول صفراء

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)