نظام نقل الحركة#

مقدمة#

يتحكم نظام الحركة في كيفية قيادة الروبوت الواقع الافتراضي وانعطافه. يمكن لنظام الحركة التحرك للأمام أو للخلف، والانعطاف يمينًا أو يسارًا، والانعطاف باتجاهات محددة، وتتبع دورانه.

توجد طرق عديدة لبرمجة نظام نقل الحركة. فيما يلي قائمة بجميع طرق برمجة نظام نقل الحركة:

الإجراءات — تحريك الروبوت وتدويره.

  • 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 — يخبر الروبوت بمدى سرعة الدوران.

أجهزة الاستشعار — تحقق من حالة نظام نقل الحركة.

  • heading — يعيد اتجاه الروبوت الحالي من 0 إلى 359.99 درجة.

  • rotation — يعيد الدوران الحالي للروبوت.

  • is_done — تُرجع ما إذا كان الروبوت قد انتهى من الحركة، كقيمة منطقية.

  • is_moving — تُرجع ما إذا كان الروبوت يتحرك، كقيمة منطقية.

الإجراءات#

drive#

يُحرّك الأمر drive الروبوت للأمام أو للخلف باستمرار. سيستمر الروبوت في الحركة حتى يُعطى أمرًا آخر، مثل الانعطاف أو التوقف.

Usage:
drivetrain.drive(direction)

حدود

وصف

direction

اتجاه حركة الروبوت: FORWARD أو REVERSE.

def main():
    # Drive forward then stop
    drivetrain.drive(FORWARD)
    wait(2, SECONDS)
    drivetrain.stop()

# VR threads — Do not delete
vr_thread(main)

drive_for#

يُحرّك drive_for الروبوت للأمام أو للخلف لمسافة محددة. سينتظر البرنامج حتى ينتهي الروبوت من الحركة قبل تنفيذ السطر التالي من التعليمات البرمجية.

Usage:
drivetrain.drive_for(direction, distance, units, wait)

حدود

وصف

direction

اتجاه حركة الروبوت: FORWARD أو REVERSE.

distance

المسافة التي يقطعها الروبوت. يمكن أن تكون هذه القيمة integer أو عدد عشري (float).

units

اختياري. وحدة المسافة: INCHES (افتراضي) أو MM (ملليمترات).

wait

اختياري. wait=True (افتراضي) يجعل المشروع ينتظر حتى ينتهي الروبوت من الحركة قبل تنفيذ سطر التعليمات البرمجية التالي. wait=False يجعل سطر التعليمات البرمجية التالي يُنفذ فورًا.

def main():
    # Drive forward and backward
    drivetrain.drive_for(FORWARD, 200, MM)
    drivetrain.drive_for(REVERSE, 200, MM)

# VR threads — Do not delete
vr_thread(main)

turn#

يؤدي الضغط على زر turn إلى تدوير الروبوت يمينًا أو يسارًا بشكل دائم. سيستمر الروبوت في الدوران حتى يتم إعطاؤه إجراءً آخر، مثل القيادة أو التوقف.

Usage:
drivetrain.turn(direction)

حدود

وصف

direction

اتجاه دوران الروبوت: LEFT أو RIGHT.

def main():
    # Turn right and left, then stop
    drivetrain.turn(RIGHT)
    wait(2, SECONDS)
    drivetrain.turn(LEFT)
    wait(2, SECONDS)
    drivetrain.stop()

# VR threads — Do not delete
vr_thread(main)

turn_for#

يُدير turn_for الروبوت يسارًا أو يمينًا بزاوية محددة. وتُحسب زاوية الدوران بالنسبة إلى الموضع الحالي للروبوت. سينتظر البرنامج حتى ينتهي الروبوت من الدوران قبل تنفيذ السطر التالي من التعليمات البرمجية.

Usage:
drivetrain.turn_for(direction, angle, units, wait)

حدود

وصف

direction

اتجاه دوران الروبوت: LEFT أو RIGHT.

angle

عدد الدرجات التي يدور بها الروبوت. يمكن أن يكون هذا العدد integer أو عشريًا (float).

units

اختياري. وحدة الدوران: DEGREES (افتراضي).

wait

اختياري. wait=True (افتراضي) يجعل المشروع ينتظر حتى ينتهي الروبوت من الدوران قبل تنفيذ سطر التعليمات البرمجية التالي. wait=False يجعل سطر التعليمات البرمجية التالي يُنفذ فورًا.

def main():
    # Turn the robot right and left
    drivetrain.turn_for(RIGHT, 90, DEGREES)
    wait(1, SECONDS)
    drivetrain.turn_for(LEFT, 90, DEGREES)

# VR threads — Do not delete
vr_thread(main)

turn_to_heading#

الاتجاه هو المسار الذي يواجهه الروبوت، ويُقاس بالدرجات. يُشير الأمر turn_to_heading إلى توجيه الروبوت نحو اتجاه محدد من -359 إلى 359 درجة. سيسلك الروبوت أقصر مسار للوصول إلى الاتجاه المستهدف.

اتجاه بدء الروبوت هو 0 درجة.

سينتظر المشروع حتى ينتهي الروبوت من الدوران قبل تشغيل سطر التعليمات البرمجية التالي.

Usage:
drivetrain.turn_to_heading(angle, units, wait)

حدود

وصف

angle

الاتجاه الذي يجب أن يواجهه الروبوت، بالدرجات. يمكن أن يكون هذا الاتجاه عددًا integer ) أو عددًاfloat) يتراوح بين -359 و359.

units

اختياري. وحدة الدوران: DEGREES (افتراضي).

wait

اختياري. wait=True (افتراضي) يجعل المشروع ينتظر حتى ينتهي الروبوت من الدوران قبل تنفيذ سطر التعليمات البرمجية التالي. wait=False يجعل سطر التعليمات البرمجية التالي يُنفذ فورًا.

def main():
    # Turn to face the cardinal directions
    drivetrain.turn_to_heading(90, DEGREES)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(180, DEGREES)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(270, DEGREES)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(0, DEGREES)

# VR threads — Do not delete
vr_thread(main)

turn_to_rotation#

turn_to_rotation يقوم بتدوير الروبوت إلى دوران محدد.

الدوران هو مقدار دوران الروبوت، ويُقاس بالدرجات. في بداية المشروع، تُضبط قيمة الدوران على صفر درجة. كما يمكن ضبط الدوران باستخدام الدالة set_rotation.

قيم الدوران مطلقة. وهذا يعني أن اتجاه الدوران يعتمد على دوران الروبوت الحالي. الدوران إلى اليمين يزيد من الدوران، والدوران إلى اليسار يقلل منه.

على سبيل المثال، إذا بدأ الروبوت من زاوية صفر درجة، ثم قمت بتدويره بزاوية 720 درجة، فسيدور إلى اليمين مرتين. وإذا قمت بعد ذلك بتدويره بزاوية 360 درجة، فسيدور إلى اليسار مرة واحدة، لأن 360 درجة أقل من 720 درجة.

سينتظر المشروع حتى ينتهي الروبوت من الدوران قبل تشغيل سطر التعليمات البرمجية التالي.

Usage:
drivetrain.turn_to_rotation(angle, units, wait)

حدود

وصف

angle

قيمة الدوران، بالدرجات، التي سيدور إليها الروبوت. يمكن أن تكون هذه القيمة عددًا integer أو عددًا عشريًا (float).

units

اختياري. وحدة الدوران: DEGREES (افتراضي).

wait

اختياري. wait=True (افتراضي) يجعل المشروع ينتظر حتى ينتهي الروبوت من الدوران قبل تنفيذ سطر التعليمات البرمجية التالي. wait=False يجعل سطر التعليمات البرمجية التالي يُنفذ فورًا.

def main():
    # Turn left, then spin in a circle
    # clockwise and face right
    drivetrain.turn_to_rotation(-90, DEGREES)
    wait(1, SECONDS)
    drivetrain.turn_to_rotation(450, DEGREES)

# VR threads — Do not delete
vr_thread(main)

stop#

stop يوقف حركة الروبوت.

Usage:
drivetrain.stop()

حدود

وصف

لا تحتوي هذه الطريقة على أي معلمات.

def main():
    # Drive forward then stop
    drivetrain.drive(FORWARD)
    wait(2, SECONDS)
    drivetrain.stop()

# VR threads — Do not delete
vr_thread(main)

المتحولون#

set_heading#

الاتجاه هو المسار الذي يواجهه الروبوت، ويُقاس بالدرجات. يُغيّر set_heading الاتجاه الحالي للروبوت إلى قيمة اتجاه جديدة.

على سبيل المثال، إذا استدار الروبوت ليواجه اليمين، فإن ضبط اتجاهه على صفر درجة يجعل وضعية مواجهة اليمين هي الصفر الجديدة. بعد ذلك، يمكن للروبوت أن يستدير إلى أوضاع أخرى بناءً على هذا الاتجاه الجديد.

Usage:
drivetrain.set_heading(heading, units)

حدود

وصف

heading

قيمة الاتجاه، بالدرجات، التي سيتم ضبطها للروبوت. يمكن أن تكون هذه القيمة عددًا integer أو عددًا عشريًا (float).

units

اختياري. وحدة العنوان: DEGREES (افتراضي).

def main():
    # Face the new 0 degrees
    drivetrain.set_heading(90, DEGREES)
    drivetrain.turn_to_heading(0, DEGREES)

# VR threads — Do not delete
vr_thread(main)

set_rotation#

الدوران هو مقدار دوران الروبوت، ويُقاس بالدرجات. في بداية المشروع، تُضبط قيمة الدوران على صفر درجة. يُغيّر set_rotation قيمة الدوران الحالية للروبوت إلى قيمة جديدة.

على سبيل المثال، إذا أكمل الروبوت دورتين كاملتين إلى اليمين، ستكون قيمة دورانه 720 درجة. ضبط قيمة الدوران على 0 درجة سيعيد ضبطها من 720 إلى 0 درجة. بعد ذلك، يمكن للروبوت الدوران وفقًا لهذه القيمة الجديدة.

Usage:
drivetrain.set_rotation(rotation, units)

حدود

وصف

rotation

قيمة الدوران، بالدرجات، التي سيتم ضبطها للروبوت. يمكن أن تكون هذه القيمة عددًا integer أو عددًا عشريًا (float).

units

اختياري. وحدة الدوران: DEGREES (افتراضي).

def main():
    # Spin counterclockwise two times
    drivetrain.set_rotation(720, DEGREES)
    drivetrain.turn_to_rotation(0, DEGREES)

# VR threads — Do not delete
vr_thread(main)

set_timeout#

يُحدد set_timeout المدة الزمنية التي سيحاول فيها الروبوت إنهاء حركة معينة. إذا لم يتمكن الروبوت من إكمال الحركة خلال هذه المدة، فسيتوقف عن المحاولة وينتقل إلى السطر التالي من التعليمات البرمجية. هذا يمنع الروبوت من التوقف في حركة معينة.

Usage:
drivetrain.set_timeout(value, units)

حدود

وصف

value

مقدار الوقت الذي يمكن للروبوت أن يحاول فيه إنهاء حركة ما. يمكن أن يكون هذا عددًا صحيحًا موجبًا integer ) أو عددًا عشريًا (float).

units

اختياري. وحدة الوقت: SECONDS (افتراضي) أو MSEC (مللي ثانية).

def main():
    # Turn right after driving forward
    drivetrain.set_timeout(1, SECONDS)
    drivetrain.drive_for(FORWARD, 25, INCHES)
    drivetrain.turn_for(RIGHT, 90)

# VR threads — Do not delete
vr_thread(main)

set_drive_velocity#

يُحدد set_drive_velocity سرعة قيادة الروبوت. كلما زادت النسبة المئوية، زادت سرعة الروبوت، وكلما انخفضت، قلت سرعته.

يبدأ كل مشروع بالروبوت وهو يقود بسرعة 50% بشكل افتراضي.

ملاحظة: السرعة العالية تجعل الروبوت يتحرك بسرعة أكبر، لكنها قد تكون أقل دقة. السرعة المنخفضة تجعل الروبوت يتحرك ببطء، لكنها قد تكون أكثر دقة.

Usage:
drivetrain.set_drive_velocity(velocity, units)

حدود

وصف

velocity

السرعة التي يجب القيادة بها تتراوح من 0% إلى 100%. يمكن أن تكون هذه القيمة عددًا integer أو عددًا عشريًا (float).

units

اختياري. وحدة السرعة: PERCENT (افتراضي).

def main():
    # Drive forward at different velocities
    # Default velocity
    drivetrain.drive_for(FORWARD, 150, MM)
    wait(1, SECONDS)
    # Drive slower
    drivetrain.set_drive_velocity(20, PERCENT)
    drivetrain.drive_for(FORWARD, 150, MM)
    wait(1, SECONDS)
    # Drive faster
    drivetrain.set_drive_velocity(100, PERCENT)
    drivetrain.drive_for(FORWARD, 150, MM)

# VR threads — Do not delete
vr_thread(main)

set_turn_velocity#

يُحدد set_turn_velocity سرعة دوران الروبوت. كلما زادت النسبة المئوية، زادت سرعة الدوران، وكلما انخفضت، قلت السرعة.

يبدأ كل مشروع بالروبوت وهو يدور بسرعة 50% بشكل افتراضي.

ملاحظة: السرعة العالية تجعل الروبوت يدور بشكل أسرع، لكنها قد تكون أقل دقة. السرعة المنخفضة تجعل الروبوت يدور بشكل أبطأ، لكنها قد تكون أكثر دقة.

Usage:
drivetrain.set_turn_velocity(velocity, units)

حدود

وصف

velocity

سرعة الدوران من 0% إلى 100%. يمكن أن تكون هذه القيمة عددًا integer أو عددًا عشريًا (float).

units

اختياري. وحدة السرعة: PERCENT (افتراضي).

def main():
    # Turn at different velocities
    # Default velocity
    drivetrain.turn_for(RIGHT, 120, DEGREES)
    wait(1, SECONDS)
    # Turn slower
    drivetrain.set_turn_velocity(20, PERCENT)
    drivetrain.turn_for(RIGHT, 120, DEGREES)
    wait(1, SECONDS)
    # Turn faster
    drivetrain.set_turn_velocity(100, PERCENT)
    drivetrain.turn_for(RIGHT, 120, DEGREES)

# VR threads — Do not delete
vr_thread(main)

المحصلون#

heading#

الاتجاه هو المسار الذي يواجهه الروبوت، ويُقاس بالدرجات. يُعيد الأمر heading اتجاه الروبوت الحالي من 0 إلى 359.99 درجة.

اتجاه بدء الروبوت هو 0 درجة.

Usage:
drivetrain.heading(units)

حدود

وصف

units

اختياري. وحدة العنوان: DEGREES (افتراضي).

def main():
    # Display the heading after turning
    drivetrain.turn_for(RIGHT, 450, DEGREES)
    brain.print("Heading: ")
    brain.print(drivetrain.heading(DEGREES))

# VR threads — Do not delete
vr_thread(main)

rotation#

الدوران هو مقدار دوران الروبوت، ويُقاس بالدرجات. في بداية المشروع، تُضبط قيمة الدوران على صفر درجة. يُشير rotation إلى الدوران الحالي للروبوت.

يؤدي الانعطاف يمينًا إلى زيادة الدوران، بينما يؤدي الانعطاف يسارًا إلى تقليله. على سبيل المثال، يؤدي القيام بدورتين كاملتين إلى اليمين إلى دوران مقداره 720 درجة.

Usage:
drivetrain.rotation(units)

حدود

وصف

units

اختياري. وحدة الدوران: DEGREES (افتراضي).

def main():
    # Display the rotation after turning
    drivetrain.turn_for(RIGHT, 450, DEGREES)
    brain.print("Rotation: ")
    brain.print(drivetrain.rotation(DEGREES))

# VR threads — Do not delete
vr_thread(main)

is_done#

تُشير القيمة المنطقية is_done إلى ما إذا كان الروبوت قد انتهى من الحركة. ويمكن استخدام هذه القيمة للتحكم في توقيت سلوكيات أخرى بناءً على حركة الروبوت.

  • True — انتهى الروبوت من الحركة.

  • False — الروبوت لا يزال يتحرك.

تعمل هذه الطريقة جنبًا إلى جنب مع طرق Drivetrain التالية التي تحتوي على المعلمة wait : drive_for, turn_for, turn_to_heading, و turn_to_rotation.

Usage:
drivetrain.is_done()

حدود

وصف

لا تحتوي هذه الطريقة على أي معلمات.

is_moving#

تُشير القيمة المنطقية is_moving . ويمكن استخدام هذه القيمة للتحكم في توقيت سلوكيات أخرى بناءً على حركة الروبوت.

  • True — الروبوت يتحرك.

  • False — الروبوت لا يتحرك.

Usage:
drivetrain.is_moving()

حدود

وصف

لا تحتوي هذه الطريقة على أي معلمات.