لغة بايثون الخاصة بالروبوتات#
مقدمة#
يشتمل الروبوت البطل، فليكس، على محرك مخلب، ومحرك ذراع، ومستشعر رؤية ذكاء اصطناعي، ومستشعر مسافة، ومستشعر نظام تحديد المواقع في اللعبة (GPS).
جميع طرق VEXcode VR القياسية متاحة للاستخدام في V5 26-27 Override Playground.
فيما يلي قائمة بجميع الطرق المتاحة الخاصة بالروبوت:
نظام الحركة – تحريك الروبوت وتدويره.
الإجراءات
drive— يحرك الروبوت للأمام أو للخلف إلى الأبد.drive_for— يحرك الروبوت للأمام أو للخلف لمسافة محددة.turn— يقوم بتدوير الروبوت إلى اليسار أو اليمين إلى الأبد.turn_for— يقوم بتدوير الروبوت إلى اليسار أو اليمين لعدد محدد من الدرجات.turn_to_heading— يقوم بتدوير الروبوت لمواجهة اتجاه محدد من -359 إلى 359 درجة.turn_to_rotation— يقوم بتدوير الروبوت إلى دوران محدد.stop— يوقف حركة الروبوت.
المُحَوِّرون
set_heading— يغير اتجاه الروبوت الحالي إلى اتجاه جديد.set_rotation— يغير دوران الروبوت الحالي إلى دوران جديد.set_timeout— يحدد مقدار الوقت الذي سيحاول فيه الروبوت إنهاء الحركة.set_drive_velocity— يخبر الروبوت بالسرعة التي يجب أن يقود بها.set_turn_velocity— يخبر الروبوت بمدى سرعة الدوران.
المُنجزون
الحركة – تحريك وتتبع محركات الروبوت.
الإجراءات
spin— يدور المحرك للأمام أو للخلف إلى الأبد.spin_for— يدور محركًا لمسافة محددة.spin_to_position— يدور المحرك إلى موضع محدد.stop— يوقف المحرك عن الدوران.
المُحَوِّرون
set_position— يغير موضع المحرك الحالي إلى قيمة جديدة.set_velocity— يخبر المحرك بمدى سرعة دورانه.set_timeout— يحدد مقدار الوقت الذي سيحاول فيه المحرك إنهاء الحركة.
المُنجزون
is_done— تُرجع ما إذا كان المحرك قد انتهى من الحركة، كقيمة منطقية.is_spinning— تُرجع ما إذا كان المحرك يدور، كقيمة منطقية.position— يعيد الموضع الحالي للمحرك.velocity— تُرجع مدى سرعة دوران المحرك.
الرؤية بالذكاء الاصطناعي - التقاط وتحليل الأشياء باستخدام مستشعر الرؤية بالذكاء الاصطناعي.
المُنجزون
take_snapshot– تُرجع مجموعة من الكائنات المكتشفة لتوقيع معين.
ملكيات
.width– عرض الكائن المكتشف بالبكسل..height– ارتفاع الكائن المكتشف بالبكسل..centerX– موضع مركز الكائن على المحور X بالبكسل..centerY– موضع مركز الكائن على المحور Y بالبكسل..originX– موضع الزاوية العلوية اليسرى للكائن بالبكسل..originY– موضع الزاوية العلوية اليسرى للكائن بالبكسل..id– معرف تصنيف الكائن المكتشف.
وحدة التحكم – اطبع على وحدة التحكم وراقب القيم.
مطبعة
brain.screen.print— يعرض النص أو الأرقام أو قيم المتغيرات في وحدة التحكم.brain.screen.next_row— ينقل مؤشر وحدة التحكم إلى بداية الصف التالي.brain.screen.clear_screen— يمسح جميع الصفوف من وحدة التحكم.
شاشة
monitor_variable— يضيف متغيرًا واحدًا أو أكثر من المتغيرات المحددة مسبقًا إلى علامة التبويب Monitor.monitor_sensor— يضيف قيمة واحدة أو أكثر من قيم المستشعر إلى علامة التبويب Monitor.
الاستشعار – استخدم أجهزة الاستشعار المختلفة للروبوت.
مسافة
found_object– تُرجع ما إذا كان مستشعر المسافة يكتشف وجود جسم ضمن النطاق.object_distance– تُرجع المسافة بين مستشعر المسافة وأقرب جسم تم اكتشافه.
نظام تحديد المواقع العالمي (GPS)
x_position– تُرجع الإحداثي السيني الحالي لجهاز استشعار نظام تحديد المواقع العالمي (GPS) في الحقل.y_position– تُرجع إحداثيات y الحالية لجهاز استشعار GPS في الحقل.heading– تُرجع الاتجاه الذي يواجهه الروبوت حاليًا بناءً على مستشعر نظام تحديد المواقع العالمي (GPS).
تستخدم الأمثلة الموجودة في هذه الصفحة موقع البداية C من قائمة التحقق قبل المباراة الخاصة بالملعب.
نظام نقل الحركة#
يتحكم نظام الحركة في كيفية قيادة الروبوت الواقع الافتراضي وانعطافه. يمكن لنظام الحركة التحرك للأمام أو للخلف، والانعطاف يمينًا أو يسارًا، والانعطاف باتجاهات محددة، وتتبع دورانه.
الإجراءات#
يقود#
يُحرّك الأمر drive الروبوت للأمام أو للخلف باستمرار. سيستمر الروبوت في الحركة حتى يُعطى أمرًا آخر، مثل الانعطاف أو التوقف.
Usage:
drivetrain.drive(direction)
حدود |
وصف |
|---|---|
|
اتجاه حركة الروبوت: |
def main():
# Raise the Arm, drive to the Goal, release the Pin
arm_motor.spin_for(FORWARD, 300, DEGREES)
drivetrain.drive(FORWARD)
wait(0.5, SECONDS)
drivetrain.stop()
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
drive_for#
يُحرّك drive_for الروبوت للأمام أو للخلف لمسافة محددة. سينتظر البرنامج حتى ينتهي الروبوت من الحركة قبل تنفيذ السطر التالي من التعليمات البرمجية.
Usage:
drivetrain.drive_for(direction, distance, units, wait)
حدود |
وصف |
|---|---|
|
اتجاه حركة الروبوت: |
|
المسافة التي يقطعها الروبوت. يمكن أن تكون هذه القيمة |
|
اختياري. وحدة المسافة: |
|
اختياري. |
def main():
# Raise the Arm, drive to the Goal, release the Pin
arm_motor.spin_for(FORWARD, 300, DEGREES)
drivetrain.drive_for(FORWARD, 10, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
دور#
يؤدي الضغط على زر turn إلى تدوير الروبوت يمينًا أو يسارًا بشكل دائم. سيستمر الروبوت في الدوران حتى يتم إعطاؤه إجراءً آخر، مثل القيادة أو التوقف.
Usage:
drivetrain.turn(direction)
حدود |
وصف |
|---|---|
|
اتجاه دوران الروبوت: |
def main():
# Score a Pin in a Neutral Goal
drivetrain.turn(LEFT)
wait(0.78, SECONDS)
drivetrain.stop()
arm_motor.spin_for(FORWARD, 800, DEGREES)
drivetrain.drive_for(FORWARD, 25, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
turn_for#
يُدير turn_for الروبوت يسارًا أو يمينًا بزاوية محددة. وتُحسب زاوية الدوران بالنسبة إلى الموضع الحالي للروبوت. سينتظر البرنامج حتى ينتهي الروبوت من الدوران قبل تنفيذ السطر التالي من التعليمات البرمجية.
Usage:
drivetrain.turn_for(direction, angle, units, wait)
حدود |
وصف |
|---|---|
|
اتجاه دوران الروبوت: |
|
عدد الدرجات التي يدور بها الروبوت. يمكن أن يكون هذا العدد |
|
اختياري. وحدة الزاوية: |
|
اختياري. |
def main():
# Score a Pin in a Neutral Goal
drivetrain.turn_for(LEFT, 110, DEGREES)
arm_motor.spin_for(FORWARD, 800, DEGREES)
drivetrain.drive_for(FORWARD, 25, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
انتقل إلى العنوان#
الاتجاه هو المسار الذي يواجهه الروبوت، ويُقاس بالدرجات. يُشير الأمر turn_to_heading إلى توجيه الروبوت نحو اتجاه محدد من -359 إلى 359 درجة. سيسلك الروبوت أقصر مسار للوصول إلى الاتجاه المستهدف.
اتجاه البداية هو صفر درجة.
Usage:
drivetrain.turn_to_heading(heading, units, wait)
حدود |
وصف |
|---|---|
|
الاتجاه الذي يجب أن يواجهه الروبوت، من -359 إلى 359 درجة. |
|
اختياري. وحدة الزاوية: |
|
اختياري. |
def main():
# Score a Pin in a Neutral Goal
drivetrain.turn_to_heading(-110, DEGREES)
arm_motor.spin_for(FORWARD, 800, DEGREES)
drivetrain.drive_for(FORWARD, 25, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
قم بالتدوير#
turn_to_rotation يقوم بتدوير الروبوت إلى دوران محدد.
الدوران هو مقدار دوران الروبوت، ويُقاس بالدرجات. في بداية المشروع، تُضبط قيمة الدوران على صفر درجة. الدوران إلى اليمين يزيد الدوران، بينما الدوران إلى اليسار يُقلله.
على سبيل المثال، إذا بدأ الروبوت من زاوية صفر درجة ثم دار بزاوية 720 درجة، فسيدور يمينًا مرتين. وإذا دار بعد ذلك بزاوية 360 درجة، فسيدور يسارًا مرة واحدة، لأن 360 درجة أقل من 720 درجة.
Usage:
drivetrain.turn_to_rotation(rotation, units, wait)
حدود |
وصف |
|---|---|
|
قيمة الدوران، بالدرجات، التي سيدور إليها الروبوت. يمكن أن تكون هذه القيمة عددًا |
|
اختياري. وحدة الزاوية: |
|
اختياري. |
def main():
# Score a Pin in a Neutral Goal
drivetrain.turn_to_rotation(-110, DEGREES)
arm_motor.spin_for(FORWARD, 800, DEGREES)
drivetrain.drive_for(FORWARD, 25, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
قف#
stop يوقف حركة الروبوت.
Usage:
drivetrain.stop()
حدود |
وصف |
|---|---|
لا تحتوي هذه الطريقة على أي معلمات. |
def main():
# Score a Pin in a Neutral Goal
drivetrain.turn(LEFT)
wait(0.78, SECONDS)
drivetrain.stop()
arm_motor.spin_for(FORWARD, 800, DEGREES)
drivetrain.drive_for(FORWARD, 25, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
المتحولون#
تعيين_العنوان#
الاتجاه هو المسار الذي يواجهه الروبوت، ويُقاس بالدرجات. يُغيّر set_heading الاتجاه الحالي للروبوت إلى قيمة اتجاه جديدة.
على سبيل المثال، إذا استدار الروبوت ليواجه اليمين، فإن ضبط اتجاهه على صفر درجة يجعل وضعية مواجهة اليمين هي الصفر الجديدة. بعد ذلك، يمكن للروبوت أن يستدير إلى أوضاع أخرى بناءً على هذا الاتجاه الجديد.
Usage:
drivetrain.set_heading(heading, units)
حدود |
وصف |
|---|---|
|
قيمة الاتجاه، بالدرجات، التي سيتم ضبطها للروبوت. |
|
اختياري. وحدة الزاوية: |
def main():
# Make facing the Neutral Goal the new heading
drivetrain.set_heading(110, DEGREES)
drivetrain.turn_to_heading(0, DEGREES)
# VR threads — Do not delete
vr_thread(main)
ضبط الدوران#
الدوران هو مقدار دوران الروبوت، ويُقاس بالدرجات. set_rotation يُغير دوران الروبوت الحالي إلى قيمة جديدة.
Usage:
drivetrain.set_rotation(rotation, units)
حدود |
وصف |
|---|---|
|
قيمة الدوران، بالدرجات، التي سيتم ضبطها للروبوت. يمكن أن تكون هذه القيمة عددًا |
|
اختياري. وحدة الزاوية: |
def main():
# Make facing the Neutral Goal the new rotation
drivetrain.set_rotation(110, DEGREES)
drivetrain.turn_to_rotation(0, DEGREES)
# VR threads — Do not delete
vr_thread(main)
set_timeout#
يُحدد set_timeout عدد الثواني التي سيحاول فيها الروبوت إكمال حركة معينة. إذا لم يتمكن الروبوت من إكمالها خلال هذا الوقت، فسيتوقف عن المحاولة وينتقل إلى سطر التعليمات البرمجية التالي. هذا يمنع الروبوت من التوقف في حركة معينة.
Usage:
drivetrain.set_timeout(time, units)
حدود |
وصف |
|---|---|
|
عدد الثواني التي يمكن للروبوت خلالها محاولة إنهاء حركة ما. يمكن أن يكون هذا العدد موجبًا |
|
اختياري. وحدة الوقت: |
def main():
# Turn to face the Neutral Goal
drivetrain.set_timeout(0.8, SECONDS)
drivetrain.turn_for(LEFT, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
ضبط سرعة القيادة#
يُحدد set_drive_velocity سرعة قيادة الروبوت. كلما زادت النسبة المئوية، زادت سرعة الروبوت، وكلما انخفضت، قلت سرعته.
يبدأ كل مشروع بالروبوت وهو يقود بسرعة 50% بشكل افتراضي.
ملاحظة: السرعة العالية تجعل الروبوت يتحرك بسرعة أكبر، لكنها قد تكون أقل دقة. السرعة المنخفضة تجعل الروبوت يتحرك ببطء، لكنها قد تكون أكثر دقة.
Usage:
drivetrain.set_drive_velocity(velocity, units)
حدود |
وصف |
|---|---|
|
السرعة التي يجب القيادة بها تتراوح من 0% إلى 100%. يمكن أن تكون هذه القيمة عددًا |
|
اختياري. وحدة السرعة: |
def main():
# Score a Pin in a Neutral Goal
drivetrain.turn_for(LEFT, 110, DEGREES)
arm_motor.spin_for(FORWARD, 800, DEGREES)
drivetrain.set_drive_velocity(100, PERCENT)
drivetrain.drive_for(FORWARD, 25, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
ضبط سرعة الدوران#
يُحدد set_turn_velocity سرعة دوران الروبوت. كلما زادت النسبة المئوية، زادت سرعة الدوران، وكلما انخفضت، قلت السرعة.
يبدأ كل مشروع بالروبوت وهو يدور بسرعة 50% بشكل افتراضي.
ملاحظة: السرعة العالية تجعل الروبوت يدور بشكل أسرع، لكنها قد تكون أقل دقة. السرعة المنخفضة تجعل الروبوت يدور بشكل أبطأ، لكنها قد تكون أكثر دقة.
Usage:
drivetrain.set_turn_velocity(velocity, units)
حدود |
وصف |
|---|---|
|
سرعة الدوران من 0% إلى 100%. يمكن أن تكون هذه القيمة عددًا |
|
اختياري. وحدة السرعة: |
def main():
# Turn to face the Neutral Goal faster
drivetrain.set_turn_velocity(100, PERCENT)
drivetrain.turn_for(LEFT, 110, DEGREES)
# VR threads — Do not delete
vr_thread(main)
المحصلون#
عنوان#
الاتجاه هو المسار الذي يواجهه الروبوت، ويُقاس بالدرجات. يُعيد الأمر heading اتجاه الروبوت الحالي من 0 إلى 359.99 درجة.
اتجاه بدء الروبوت هو 0 درجة.
Usage:
drivetrain.heading(units)
حدود |
وصف |
|---|---|
|
اختياري. وحدة العنوان: |
def main():
# Turn to the Goal, then show heading
drivetrain.turn_for(LEFT, 110, DEGREES)
brain.screen.print("Heading: ")
brain.screen.print(drivetrain.heading(DEGREES))
# VR threads — Do not delete
vr_thread(main)
تناوب#
الدوران هو مقدار دوران الروبوت، ويُقاس بالدرجات. في بداية المشروع، تُضبط قيمة الدوران على صفر درجة. يُشير rotation إلى الدوران الحالي للروبوت.
يؤدي الانعطاف يمينًا إلى زيادة الدوران، بينما يؤدي الانعطاف يسارًا إلى تقليله. على سبيل المثال، يؤدي القيام بدورتين كاملتين إلى اليمين إلى دوران مقداره 720 درجة.
Usage:
drivetrain.rotation(units)
حدود |
وصف |
|---|---|
|
اختياري. وحدة الدوران: |
def main():
# Spin to find a Pin, then show rotation
drivetrain.turn_for(RIGHT, 450, DEGREES)
brain.screen.print("Rotation: ")
brain.screen.print(drivetrain.rotation(DEGREES))
# VR threads — Do not delete
vr_thread(main)
تم الانتهاء#
تُشير القيمة المنطقية is_done إلى ما إذا كان الروبوت قد انتهى من الحركة. ويمكن استخدام هذه القيمة للتحكم في توقيت سلوكيات أخرى بناءً على حركة الروبوت.
True— انتهى الروبوت من الحركة.False— الروبوت لا يزال يتحرك.
تعمل هذه الطريقة جنبًا إلى جنب مع طرق Drivetrain التالية التي تحتوي على المعلمة wait : drive_for, turn_for, turn_to_heading, و turn_to_rotation.
Usage:
drivetrain.is_done()
حدود |
وصف |
|---|---|
لا تحتوي هذه الطريقة على أي معلمات. |
def main():
# Score a Pin in a Neutral Goal
drivetrain.turn_for(LEFT, 110, DEGREES)
arm_motor.spin_for(FORWARD, 800, DEGREES)
drivetrain.drive_for(FORWARD, 25, INCHES, wait=False)
wait(0.5, SECONDS)
while not drivetrain.is_done():
wait(5, MSEC)
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
is_moving#
تُشير القيمة المنطقية is_moving . ويمكن استخدام هذه القيمة للتحكم في توقيت سلوكيات أخرى بناءً على حركة الروبوت.
True— الروبوت يتحرك.False— الروبوت لا يتحرك.
Usage:
drivetrain.is_moving()
حدود |
وصف |
|---|---|
لا تحتوي هذه الطريقة على أي معلمات. |
def main():
# Raise the Arm once stopped near the Goal
drivetrain.turn_for(LEFT, 110, DEGREES)
drivetrain.drive_for(FORWARD, 25, INCHES, wait=False)
wait (0.5, SEC)
while drivetrain.is_moving():
wait(5, MSEC)
arm_motor.spin_for(FORWARD, 800, DEGREES)
# VR threads — Do not delete
vr_thread(main)
سرعة#
velocity تُرجع مدى سرعة قيادة الروبوت، كنسبة مئوية من -100% إلى 100%.
Usage:
drivetrain.velocity(units)
حدود |
وصف |
|---|---|
|
اختياري. وحدة السرعة: |
def main():
# Show speed while driving to the Goal
drivetrain.drive_for(FORWARD, 150, MM)
brain.screen.print("Velocity: ")
brain.screen.print(drivetrain.velocity(PERCENT))
# VR threads — Do not delete
vr_thread(main)
حركة#
يستخدم Flex محرك الذراع لرفع وخفض الذراع، ومحرك المخلب لفتح وإغلاق المخلب.
لكل محرك سلوك اتجاهي خاص به. تشرح أوصاف الاتجاهات كيفية تحريك هذا المحرك في كل اتجاه على منصة فليكس.
الإجراءات#
يلف#
spin يُدير المحرك في أحد اتجاهين إلى الأبد. سيستمر المحرك في الدوران حتى يتم إعطاؤه إجراءً آخر، مثل الدوران في اتجاه مختلف أو التوقف.
طريقة الاستخدام:
يمكن استخدام أحد كائنَي المحرك المتاحين مع هذه الطريقة، كما هو موضح أدناه:
محرك |
يأمر |
|---|---|
|
|
|
|
حدود |
وصف |
|---|---|
|
اتجاه دوران المحرك:
|
def main():
# Raise the Arm before driving toward a Pin
arm_motor.spin(FORWARD)
wait(1, SECONDS)
arm_motor.stop()
# VR threads — Do not delete
vr_thread(main)
spin_for#
spin_for spins a motor for a specific distance. The spin is relative to the current position of the motor. The project will wait until the motor is done spinning before the next line of code runs.
طريقة الاستخدام:
يمكن استخدام أحد كائنَي المحرك المتاحين مع هذه الطريقة، كما هو موضح أدناه:
محرك |
يأمر |
|---|---|
|
|
|
|
حدود |
وصف |
|---|---|
|
اتجاه دوران المحرك:
|
|
المسافة التي يدورها المحرك. |
|
اختياري. وحدة المسافة: |
|
اختياري.
|
def main():
# Raise the Arm to carry the Pin to the Goal
arm_motor.spin_for(FORWARD, 800, DEGREES)
# VR threads — Do not delete
vr_thread(main)
spin_to_position#
spin_to_position يقوم بتدوير المحرك إلى موضع محدد.
A motor’s position is how far it has spun, measured in DEGREES or TURNS. One turn is equal to 360 degrees. At the beginning of a project, the Arm Motor’s position is set to 0 degrees. The Claw Motor is the exception — it starts at 467 degrees (fully closed). The motor position can also be set using the set_position method.
قيم الموضع مطلقة. وهذا يعني أن اتجاه الدوران يعتمد على الموضع الحالي للمحرك.
على سبيل المثال، إذا بدأ المحرك من زاوية صفر درجة ثم دار إلى زاوية 720 درجة، فسيدور دورتين للأمام. وإذا دار بعد ذلك إلى زاوية 360 درجة، فسيدور دورة واحدة للخلف، لأن 360 درجة أقل من 720 درجة.
طريقة الاستخدام:
يمكن استخدام أحد كائنَي المحرك المتاحين مع هذه الطريقة، كما هو موضح أدناه:
محرك |
يأمر |
|---|---|
|
|
|
|
حدود |
وصف |
|---|---|
|
قيمة الموضع الذي سيدور إليه المحرك. |
|
اختياري. وحدة تحديد الموضع: |
|
اختياري.
|
def main():
# Raise the Arm, then release the Pin
arm_motor.spin_to_position(800, DEGREES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
قف#
stop يوقف دوران المحرك.
طريقة الاستخدام:
يمكن استخدام أحد كائنَي المحرك المتاحين مع هذه الطريقة، كما هو موضح أدناه:
محرك |
يأمر |
|---|---|
|
|
|
|
حدود |
وصف |
|---|---|
لا تحتوي هذه الطريقة على أي معلمات. |
def main():
# Raise the Arm partway to hold the Pin
arm_motor.spin(FORWARD)
wait(1, SECONDS)
arm_motor.stop()
# VR threads — Do not delete
vr_thread(main)
المتحولون#
تحديد_الموضع#
موضع المحرك هو مقدار دورانه، ويُقاس بالدرجات DEGREES أو TURNS. الدورة الواحدة تساوي 360 درجة. يُغيّر set_position موضع المحرك الحالي إلى قيمة جديدة.
على سبيل المثال، إذا دار المحرك بزاوية 180 درجة، فإن ضبط الموضع على 0 درجة سيعيد ضبط هذا الموضع من 180 إلى 0 درجة. بعد ذلك، يمكن للمحرك أن يدور إلى مواضع بناءً على هذه القيمة الجديدة.
طريقة الاستخدام:
يمكن استخدام أحد كائنَي المحرك المتاحين مع هذه الطريقة، كما هو موضح أدناه:
محرك |
يأمر |
|---|---|
|
|
|
|
حدود |
وصف |
|---|---|
|
قيمة الموضع المراد ضبطها للمحرك. |
|
اختياري. وحدة تحديد الموضع: |
def main():
# Reset encoder, raise Arm, place Pin
arm_motor.set_position(0, DEGREES)
arm_motor.spin_to_position(800, DEGREES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
ضبط السرعة#
يُحدد set_velocity سرعة دوران المحرك. كلما زادت النسبة المئوية، زادت سرعة دوران المحرك، وكلما انخفضت، قلت سرعته.
يبدأ كل مشروع بدوران كل محرك بسرعة 50% بشكل افتراضي.
ملاحظة: السرعة العالية تجعل المحرك يدور أسرع، لكنها قد تكون أقل دقة. السرعة المنخفضة تجعل المحرك يدور أبطأ، لكنها قد تكون أكثر دقة.
طريقة الاستخدام:
يمكن استخدام أحد كائنَي المحرك المتاحين مع هذه الطريقة، كما هو موضح أدناه:
محرك |
يأمر |
|---|---|
|
|
|
|
حدود |
وصف |
|---|---|
|
سرعة الدوران من 0% إلى 100%. يمكن أن تكون هذه القيمة عددًا |
|
وحدة السرعة: |
def main():
# Raise the Arm fast to release the Pin
arm_motor.set_velocity(100, PERCENT)
arm_motor.spin_for(FORWARD, 800, DEGREES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
set_timeout#
يُحدد set_timeout المدة الزمنية التي سيحاول فيها المحرك إكمال الحركة. إذا لم يتمكن المحرك من إكمالها خلال هذه المدة، فسيتوقف عن المحاولة وينتقل إلى السطر التالي من التعليمات البرمجية. هذا يمنع المحرك من التوقف أثناء الحركة.
طريقة الاستخدام:
يمكن استخدام أحد كائنَي المحرك المتاحين مع هذه الطريقة، كما هو موضح أدناه:
محرك |
يأمر |
|---|---|
|
|
|
|
حدود |
وصف |
|---|---|
|
مقدار الوقت الذي يمكن للمحرك أن يحاول فيه إنهاء الحركة. يمكن أن يكون هذا عددًا صحيحًا موجبًا |
|
وحدة الزمن: |
def main():
# Score a Pin in a Neutral Goal
drivetrain.turn_for(LEFT, 110, DEGREES)
arm_motor.set_timeout(1, SECONDS)
arm_motor.spin_for(FORWARD, 1800, DEGREES)
drivetrain.drive_for(FORWARD, 25, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
المحصلون#
تم الانتهاء#
تُشير القيمة المنطقية is_done إلى ما إذا كان المحرك قد انتهى من الحركة. ويمكن استخدام هذه القيمة للتحكم في توقيت سلوكيات أخرى بناءً على حركة المحرك.
True— انتهى المحرك من الحركة.False— المحرك لا يزال يتحرك.
تعمل هذه الطريقة جنبًا إلى جنب مع طرق الحركة التالية التي تحتوي على المعلمة wait : spin_for و spin_to_position.
طريقة الاستخدام:
يمكن استخدام أحد كائنَي المحرك المتاحين مع هذه الطريقة، كما هو موضح أدناه:
محرك |
يأمر |
|---|---|
|
|
|
|
حدود |
وصف |
|---|---|
لا تحتوي هذه الطريقة على أي معلمات. |
def main():
# Raise the Arm while driving to the Goal
arm_motor.spin_to_position(800, DEGREES, wait=False)
wait(0.1, SECONDS)
while not arm_motor.is_done():
drivetrain.drive(FORWARD)
wait(5, MSEC)
drivetrain.stop()
# VR threads — Do not delete
vr_thread(main)
is_spinning#
تُشير القيمة المنطقية is_spinning . ويمكن استخدام هذه القيمة للتحكم في توقيت سلوكيات أخرى بناءً على حركة المحرك.
True— المحرك يدور.False— المحرك لا يدور.
تعمل هذه الطريقة جنبًا إلى جنب مع طرق الحركة التالية التي تحتوي على المعلمة wait : spin_for و spin_to_position.
طريقة الاستخدام:
يمكن استخدام أحد كائنَي المحرك المتاحين مع هذه الطريقة، كما هو موضح أدناه:
محرك |
يأمر |
|---|---|
|
|
|
|
حدود |
وصف |
|---|---|
لا تحتوي هذه الطريقة على أي معلمات. |
def main():
# Raise the Arm while driving to the Goal, then release the Pin
arm_motor.spin_to_position(800, DEGREES, wait=False)
wait(0.1, SECONDS)
while arm_motor.is_spinning():
drivetrain.drive_for(FORWARD, 25, MM)
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
موضع#
موضع المحرك هو مقدار دورانه، ويُقاس DEGREES أو TURNS. الدورة الواحدة تساوي 360 درجة. يُعيد الموضع position موضع المحرك الحالي.
في بداية المشروع، تُضبط زاوية محرك الذراع على صفر درجة. أما محرك المخلب فهو الاستثناء، إذ يبدأ بزاوية 467 درجة (مغلق تمامًا). إذا دار المحرك دورة كاملة للأمام، تزداد الزاوية. وإذا دار في الاتجاه المعاكس، تنقص الزاوية.
طريقة الاستخدام:
يمكن استخدام أحد كائنَي المحرك المتاحين مع هذه الطريقة، كما هو موضح أدناه:
محرك |
يأمر |
|---|---|
|
|
|
|
حدود |
وصف |
|---|---|
|
الوحدة لإعادة موضع المحرك في: |
def main():
# Raise the Arm, then release the Pin
while arm_motor.position(DEGREES) < 800:
arm_motor.spin(FORWARD)
wait(2, MSEC)
arm_motor.stop()
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
سرعة#
السرعة velocity تُشير إلى مدى سرعة دوران المحرك.
تشير القيمة الموجبة إلى أن المحرك يدور للأمام. وتشير القيمة السالبة إلى أن المحرك يدور للخلف.
طريقة الاستخدام:
يمكن استخدام أحد كائنَي المحرك المتاحين مع هذه الطريقة، كما هو موضح أدناه:
محرك |
يأمر |
|---|---|
|
|
|
|
حدود |
وصف |
|---|---|
|
وحدة السرعة للعودة: |
def main():
# Show Arm Motor velocity while raising
arm_motor.set_velocity(100, PERCENT)
arm_motor.spin_to_position(800, DEGREES, wait=False)
wait(0.2, SECONDS)
brain.screen.print(arm_motor.velocity(PERCENT))
# VR threads — Do not delete
vr_thread(main)
رؤية الذكاء الاصطناعي#
المحصلون#
التقاط_لقطة#
take_snapshot تقوم بتصفية البيانات من إطار مستشعر الرؤية بالذكاء الاصطناعي إلى توقيع واحد - وهو وصف محفوظ لشيء يمكن للمستشعر التعرف عليه، مثل عنصر اللعبة في الملعب - وتعيد مجموعة.
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)
حدود |
وصف |
|---|---|
|
يقوم هذا الإجراء بتصفية مجموعة البيانات بحيث لا تتضمن إلا البيانات التي تحمل التوقيع المحدد. التوقيعات المتاحة هي:
|
def main():
# Raise the Arm, drive to the Goal, release the Pin
arm_motor.spin_for(FORWARD, 300, DEGREES)
drivetrain.drive_for(FORWARD, 10, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
drivetrain.turn_for(LEFT, 70, DEGREES)
# Turn to face the Pin
drivetrain.set_turn_velocity(30, PERCENT)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
if ai_objects:
if ai_objects[0].centerX < 140:
drivetrain.turn(LEFT)
elif ai_objects[0].centerX > 180:
drivetrain.turn(RIGHT)
else:
drivetrain.stop()
break
# VR threads — Do not delete
vr_thread(main)
ملكيات#
هناك سبع خصائص يتم تضمينها مع كل كائن مخزن في مجموعة بعد استخدام take_snapshot.
تصف جميع قيم الخصائص، باستثناء .id موضع وحجم الكائن المكتشف في مجال رؤية مستشعر الرؤية بالذكاء الاصطناعي لحظة استخدام الأمر take_snapshot تُقاس هذه القيم بالبكسل، بناءً على دقة المستشعر البالغة 320 × 240 بكسل.
.عرض#
.width تُرجع عرض الكائن المكتشف بالبكسل، وهو عدد صحيح بين 1 و 320.
def main():
# Raise the Arm, drive to the Goal, release the Pin
arm_motor.spin_for(FORWARD, 300, DEGREES)
drivetrain.drive_for(FORWARD, 10, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
drivetrain.turn_for(LEFT, 70, DEGREES)
# Approach the next Cup and Pin
drivetrain.set_drive_velocity(30, PERCENT)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
if ai_objects:
if ai_objects[0].width > 140:
drivetrain.stop()
break
else:
drivetrain.drive(FORWARD)
# VR threads — Do not delete
vr_thread(main)
.ارتفاع#
.height تُرجع ارتفاع الكائن المكتشف بالبكسل، وهو عدد صحيح بين 1 و 240.
def main():
# Raise the Arm, drive to the Goal, release the Pin
arm_motor.spin_for(FORWARD, 300, DEGREES)
drivetrain.drive_for(FORWARD, 10, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
drivetrain.turn_for(LEFT, 70, DEGREES)
# Approach the next Cup and Pin
drivetrain.set_drive_velocity(30, PERCENT)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
if ai_objects:
if ai_objects[0].height > 200:
drivetrain.stop()
break
else:
drivetrain.drive(FORWARD)
# VR threads — Do not delete
vr_thread(main)
.centerX#
.centerX تُرجع الإحداثي السيني لمركز الكائن المكتشف بالبكسل، وهو عدد صحيح بين 0 و 320.
def main():
# Raise the Arm, drive to the Goal, release the Pin
arm_motor.spin_for(FORWARD, 300, DEGREES)
drivetrain.drive_for(FORWARD, 10, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
drivetrain.turn_for(LEFT, 70, DEGREES)
# Turn and approach the next Cup and Pin
drivetrain.set_turn_velocity(30, PERCENT)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
if ai_objects:
if ai_objects[0].centerX < 140:
drivetrain.turn_for(LEFT, 5, DEGREES)
else:
drivetrain.drive_for(FORWARD, 25, INCHES)
break
# VR threads — Do not delete
vr_thread(main)
.centerY#
.centerY تُرجع إحداثيات y لمركز الكائن المكتشف بالبكسل، وهو عدد صحيح بين 0 و 240.
def main():
# Raise the Arm, drive to the Goal, release the Pin
arm_motor.spin_for(FORWARD, 300, DEGREES)
drivetrain.drive_for(FORWARD, 10, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
drivetrain.turn_for(LEFT, 70, DEGREES)
# Approach the next Cup and Pin
drivetrain.set_drive_velocity(30, PERCENT)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
if ai_objects:
if ai_objects[0].centerY > 230:
drivetrain.stop()
break
else:
drivetrain.drive(FORWARD)
# VR threads — Do not delete
vr_thread(main)
.originX#
.originX تُرجع الإحداثي السيني للزاوية العلوية اليسرى من المربع المحيط بالكائن المكتشف بالبكسل، وهو عدد صحيح بين 0 و 320.
def main():
# Raise the Arm, drive to the Goal, release the Pin
arm_motor.spin_for(FORWARD, 300, DEGREES)
drivetrain.drive_for(FORWARD, 10, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
drivetrain.turn_for(LEFT, 70, DEGREES)
# Turn and approach the next Cup and Pin
drivetrain.set_turn_velocity(30, PERCENT)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
if ai_objects:
if ai_objects[0].originX < 100:
drivetrain.turn_for(LEFT, 5, DEGREES)
else:
drivetrain.drive_for(FORWARD, 25, INCHES)
break
# VR threads — Do not delete
vr_thread(main)
.originY#
.originY تُرجع إحداثيات y للزاوية العلوية اليسرى للمربع المحيط بالكائن المكتشف بالبكسل، وهو عدد صحيح بين 0 و 240.
def main():
# Raise the Arm, drive to the Goal, release the Pin
arm_motor.spin_for(FORWARD, 300, DEGREES)
drivetrain.drive_for(FORWARD, 10, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
drivetrain.turn_for(LEFT, 70, DEGREES)
# Approach the next Cup and Pin
drivetrain.set_drive_velocity(30, PERCENT)
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
if ai_objects:
if ai_objects[0].originY > 140:
drivetrain.stop()
break
else:
drivetrain.drive(FORWARD)
# VR threads — Do not delete
vr_thread(main)
.بطاقة تعريف#
.id تُرجع معرف تصنيف الذكاء الاصطناعي المكتشف كرقم صحيح.
تصنيف الذكاء الاصطناعي |
بطاقة تعريف |
إمضاء |
|---|---|---|
دبوس أحمر أزرق |
0 |
|
دبوس أزرق أصفر |
1 |
|
دبوس أحمر أصفر |
2 |
|
يلوبين |
3 |
|
كوب |
4 |
|
def main():
# Raise the Arm, drive to the Goal, release the Pin
arm_motor.spin_for(FORWARD, 300, DEGREES)
drivetrain.drive_for(FORWARD, 10, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
drivetrain.turn_for(LEFT, 70, DEGREES)
# Display the ID of the next closest object
while True:
ai_objects = ai_vision.take_snapshot(AiVision.ALL_AIOBJS)
if ai_objects:
brain.screen.print(ai_objects[0].id)
break
# VR threads — Do not delete
vr_thread(main)
وحدة التحكم#
تعرض وحدة التحكم النصوص والأرقام وقيم المتغيرات أثناء تشغيل المشروع. كما يمكن لوظائف وحدة التحكم نقل المؤشر إلى صف جديد، ومسح وحدة التحكم، وإضافة متغيرات أو قيم مستشعرات إلى علامة تبويب المراقبة.
مطبعة#
طباعة على الشاشة#
brain.screen.print يعرض النص أو الأرقام أو قيم المتغيرات في وحدة التحكم باستخدام موضع المؤشر الحالي.
استخدم brain.screen.next_row عندما تريد أن تبدأ القيمة المطبوعة التالية في صف جديد.
Usage:
brain.screen.print(value)
حدود |
وصف |
|---|---|
|
النص أو الرقم أو قيمة المتغير المراد عرضها في وحدة التحكم. |
def main():
# Display a message in the Console
brain.screen.print("Hello, robot!")
# VR threads — Do not delete
vr_thread(main)
brain.screen.next_row#
يؤدي الأمر brain.screen.next_row إلى نقل المؤشر إلى العمود 1 في الصف التالي في وحدة التحكم. ستظهر القيمة التالية المطبوعة في ذلك الصف.
Usage:
brain.screen.next_row()
حدود |
وصف |
|---|---|
لا تحتوي هذه الطريقة على أي معلمات. |
def main():
# Print on two rows
brain.screen.print("Row 1")
brain.screen.next_row()
brain.screen.print("Row 2")
# VR threads — Do not delete
vr_thread(main)
brain.screen.clear_screen#
brain.screen.clear_screen يمسح جميع الصفوف من وحدة التحكم ويعيد المؤشر إلى الصف 1.
Usage:
brain.screen.clear_screen()
حدود |
وصف |
|---|---|
لا تحتوي هذه الطريقة على أي معلمات. |
def main():
# Display text, then clear it after two seconds
brain.screen.print("This will disappear...")
wait(2, SECONDS)
brain.screen.clear_screen()
# VR threads — Do not delete
vr_thread(main)
شاشة#
متغير المراقبة#
يُضيف الأمر monitor_variable متغيرًا واحدًا أو أكثر من المتغيرات المُعرّفة مسبقًا إلى علامة التبويب “المراقبة” في VEXcode. يتيح لك هذا مراقبة تغير قيمة المتغير أثناء تشغيل المشروع.
يجب أن تكون المتغيرات monitor_variable نصية.
Usage:
monitor_variable(“variable”)
monitor_variable(“variable1”, “variable2”)
حدود |
وصف |
|---|---|
|
اسم متغير عام مُعرَّف مسبقًا للمراقبة، يُعطى كسلسلة نصية. لمراقبة أكثر من متغير، افصل بين أسماء المتغيرات بفاصلة. |
def main():
# Monitor the number of loops
global loops
monitor_variable("loops")
# Turn in a full circle 3 times
for loops in range(12):
drivetrain.turn_for(RIGHT, 90, DEGREES)
# VR threads — Do not delete
vr_thread(main)
مستشعر_المراقبة#
يُضيف الأمر monitor_sensor قيمة مستشعر واحد أو أكثر إلى علامة التبويب “المراقبة” في VEXcode. يتيح لك هذا مراقبة تغير قيم المستشعر أثناء تشغيل المشروع.
قم بتوفير قيمة كل مستشعر كسلسلة نصية.
Usage:
monitor_sensor(“sensor”)
monitor_sensor(“sensor1”, “sensor2”)
حدود |
وصف |
|---|---|
|
The sensor value to monitor, given as a string. To monitor more than one sensor value, separate each sensor value with a comma. Supported sensor identifiers include:
|
def main():
# Monitor the robot's heading
monitor_sensor("drivetrain.heading")
drivetrain.turn_for(RIGHT, 450, DEGREES)
# VR threads — Do not delete
vr_thread(main)
الاستشعار#
مسافة#
الكائن الموجود#
found_object تُرجع ما إذا كان مستشعر المسافة يكتشف حاليًا وجود جسم ضمن نطاق 2000 مم.
True— مستشعر المسافة يكتشف وجود جسم.False— لا يكتشف مستشعر المسافة وجود جسم.
Usage:
distance.found_object()
حدود |
وصف |
|---|---|
لا تحتوي هذه الطريقة على أي معلمات. |
def main():
# Turn until something is detected, then release the Pin
drivetrain.turn(RIGHT)
while True:
wait(5, MSEC)
if distance.found_object():
drivetrain.stop()
break
arm_motor.spin_for(FORWARD, 300, DEGREES)
drivetrain.drive_for(FORWARD, 10, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
مسافة الكائن#
object_distance تُرجع المسافة بين مستشعر المسافة وأقرب جسم تم اكتشافه.
Usage:
distance.object_distance(units)
حدود |
وصف |
|---|---|
|
وحدة المسافة: |
def main():
# Drive until 200 mm from the Goal, then release the Pin
while distance.object_distance(MM) > 200:
wait(5, MSEC)
drivetrain.drive(FORWARD)
drivetrain.stop()
arm_motor.spin_for(FORWARD, 300, DEGREES)
drivetrain.drive_for(FORWARD, 10, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
نظام تحديد المواقع العالمي (GPS)#
الموضع السيني#
x_position تُرجع الإحداثي السيني الحالي لجهاز استشعار GPS (نظام تحديد المواقع في اللعبة™) في الملعب.
Usage:
gps.x_position(units)
حدود |
وصف |
|---|---|
وحدات |
وحدة قيمة الإزاحة: |
def main():
# Raise the Arm, drive to the Goal, release the Pin
arm_motor.spin_for(FORWARD, 300, DEGREES)
drivetrain.drive(FORWARD)
while not gps.x_position(MM) > -1370:
wait(2, MSEC)
drivetrain.stop()
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
y_position#
y_position تُرجع الإحداثي y الحالي لجهاز استشعار GPS (نظام تحديد المواقع في اللعبة™) في الملعب.
Usage:
gps.y_position(units)
حدود |
وصف |
|---|---|
وحدات |
وحدة قيمة الإزاحة: |
def main():
# Raise the Arm, drive to the Goal, release the Pin
arm_motor.spin_for(FORWARD, 300, DEGREES)
drivetrain.drive(FORWARD)
while not gps.y_position(MM) < -450:
wait(2, MSEC)
drivetrain.stop()
claw_motor.spin_for(REVERSE, 180, DEGREES)
# VR threads — Do not delete
vr_thread(main)
عنوان#
heading يعيد الاتجاه الذي يواجهه الروبوت حاليًا بناءً على قراءات مستشعر نظام تحديد المواقع العالمي (GPS) من 0 إلى 359 درجة.
Usage:
gps.heading()
حدود |
وصف |
|---|---|
لا تحتوي هذه الطريقة على أي معلمات. |
def main():
# Raise the Arm, drive to the Goal, release the Pin
monitor_sensor("gps.heading")
arm_motor.spin_for(FORWARD, 300, DEGREES)
drivetrain.drive_for(FORWARD, 10, INCHES)
claw_motor.spin_for(REVERSE, 180, DEGREES)
# Turn left to face the Neutral Goal
drivetrain.set_turn_velocity(30, PERCENT)
drivetrain.turn(LEFT)
while not gps.heading() < 18:
wait(2, MSEC)
drivetrain.stop()
# VR threads — Do not delete
vr_thread(main)