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

مقدمة#

تتضمن مجموعة نقل الحركة عجلات ومحركات تتحكم في كيفية قيادة الروبوت وانعطافه. يمكن العثور على مجموعات نقل الحركة في نماذج مثل Code Base 2.0، وSuper Car، أو الروبوتات المصممة حسب الطلب.

Drivetrains use the Inertial Sensor in the Brain to detect crashes and help the robot move and turn precisely. At the start of each project, the drivetrain calibrates the Inertial Sensor automatically. Keep the robot still for about 2 seconds during calibration, so the robot can move and turn correctly.

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

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

  • drive — يحرك الروبوت للأمام أو للخلف إلى الأبد.

  • drive_for — يحرك الروبوت للأمام أو للخلف لمسافة محددة.

  • drive_until — يحرك الروبوت للأمام حتى يكتشف مستشعر العين جسمًا ما أو يكتشف الروبوت حدوث تصادم.

  • turn — يقوم بتدوير الروبوت إلى اليسار أو اليمين إلى الأبد.

  • turn_for — يقوم بتدوير الروبوت إلى اليسار أو اليمين لعدد محدد من الدرجات.

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

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

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

المُعدِّلات — اضبط إعدادات نظام نقل الحركة.

  • set_drive_velocity — يخبر الروبوت بالسرعة التي يجب أن يقود بها.

  • set_turn_velocity — يخبر الروبوت بمدى سرعة الدوران.

  • set_stopping — يحدد كيفية توقف الروبوت عن الحركة: عن طريق الكبح أو الانزلاق أو الثبات.

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

  • set_heading — يغير اتجاه الروبوت الحالي إلى اتجاه جديد.

  • set_rotation — يغير دوران الروبوت الحالي إلى دوران جديد.

المستلمون — تحقق من حالة الحركة.

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

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

  • get_velocity — تُرجع هذه الدالة مدى سرعة قيادة الروبوت، كنسبة مئوية من -100% إلى 100%.

  • get_yaw — يعيد قيمة الانحراف الحالي للروبوت.

  • get_roll — يعيد قيمة الرمية الحالية للروبوت.

  • get_pitch — يعيد درجة الصوت الحالية للروبوت.

  • get_crashed — تُرجع ما إذا كان الروبوت قد اكتشف حادث تحطم، كقيمة منطقية.

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

الإجراءات#

drive#

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

Usage:
drivetrain.drive(direction)

حدود

وصف

direction

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

# Build Used: Code Base 2.0
def main():
    # Drive forward then stop
    drivetrain.drive(FORWARD)
    wait(2, SECONDS)
    drivetrain.stop()

# Start threads — Do not delete
start_thread(main)

drive_for#

drive_for يحرك الروبوت للأمام أو للخلف لمسافة محددة.

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

حدود

وصف

direction

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

distance

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

units

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

wait

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

# Build Used: Code Base 2.0
def main():
    # Drive back and forth
    drivetrain.drive_for(FORWARD, 100, MM)
    drivetrain.drive_for(REVERSE, 4, INCHES)
    

# Start threads — Do not delete
start_thread(main)

drive_until#

drive_until يحرك الروبوت للأمام حتى يكتشف مستشعر العين جسمًا ما أو يكتشف الروبوت اصطدامًا.

Usage:
drivetrain.drive_until(condition, wait)

حدود

وصف

condition

الشرط الذي يوقف الروبوت: OBJECT أو CRASH.

wait

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

# Build Used: Code Base 2.0
def main():
    # Turn right after a crash
    drivetrain.drive_until(CRASH)
    drivetrain.turn_for(RIGHT, 90)

# Start threads — Do not delete
start_thread(main)

turn#

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

Usage:
drivetrain.turn(direction)

حدود

وصف

direction

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

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

# Start threads — Do not delete
start_thread(main)

turn_for#

turn_for turns the robot left or right for a specific number of degrees. The turn is relative to the current position of the robot.

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

حدود

وصف

direction

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

angle

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

wait

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

# Build Used: Code Base 2.0
def main():
    # Turn right then left
    drivetrain.turn_for(RIGHT, 90)
    drivetrain.turn_for(LEFT, 90)

# Start threads — Do not delete
start_thread(main)

turn_to_heading#

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

اتجاه البداية هو صفر درجة.

قاعدة بيانات أكواد VEX GO 2.0 توضح اتجاهات الحركة: 0 درجة للأمام، 90 درجة لليمين، 180 درجة للخلف، و270 درجة لليسار.

Usage:
drivetrain.turn_to_heading(angle, wait)

حدود

وصف

angle

الاتجاه الذي يجب أن يواجهه الروبوت كعدد صحيح، من -359 إلى 359 درجة.

wait

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

# Build Used: Code Base 2.0
def main():
    # Turn to face the cardinal directions
    drivetrain.turn_to_heading(90)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(180)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(270)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(0)

# Start threads — Do not delete
start_thread(main)

turn_to_rotation#

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

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

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

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

قاعدة بيانات أكواد VEX GO 2.0 تُظهر أسهمًا تدور إلى اليمين واليسار. يشير السهم الأيسر إلى "ناقص" ويشير السهم الأيمن إلى "زائد".

Usage:
drivetrain.turn_to_rotation(angle, wait)

حدود

وصف

angle

قيمة الدوران، بالدرجات، التي سيدور إليها الروبوت. يمكن أن تكون هذه القيمة عددًا صحيحًا.

wait

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

# Build Used: Code Base 2.0
def main():
    # Make one full turn to the right
    drivetrain.turn_to_rotation(360)
    # Make another full turn to the right
    drivetrain.turn_to_rotation(720)
    # Make one full turn to the left, returning to 360 degrees
    drivetrain.turn_to_rotation(360)
# Start threads — Do not delete
start_thread(main)

stop#

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

Usage:
drivetrain.stop()

حدود

وصف

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

# Build Used: Code Base 2.0
def main():
    # Drive forward then stop
    drivetrain.drive(FORWARD)
    wait(2, SECONDS)
    drivetrain.stop()

# Start threads — Do not delete
start_thread(main)

المتحولون#

set_drive_velocity#

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

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

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

Usage:
drivetrain.set_drive_velocity(velocity)

حدود

وصف

velocity

السرعة التي يتم القيادة بها تتراوح من 0% إلى 100%.

# Build Used: Code Base 2.0
def main():
    # Drive at different velocities
    drivetrain.drive_for(FORWARD, 100, MM)
    wait(1, SECONDS)
    # Drive slow
    drivetrain.set_drive_velocity(20)
    drivetrain.drive_for(FORWARD, 100, MM)
    wait(1, SECONDS)
    # Drive fast
    drivetrain.set_drive_velocity(100)
    drivetrain.drive_for(FORWARD, 100, MM)

# Start threads — Do not delete
start_thread(main)

set_turn_velocity#

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

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

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

Usage:
drivetrain.set_turn_velocity(velocity)

حدود

وصف

velocity

سرعة الانعطاف من 0% إلى 100%.

# Build Used: Code Base 2.0
def main():
    # Turn at different velocities
    drivetrain.turn_for(RIGHT, 180)
    wait(1, SECONDS)
    # Turn fast
    drivetrain.set_turn_velocity(100)
    drivetrain.turn_for(RIGHT, 180)

# Start threads — Do not delete
start_thread(main)

set_stopping#

set_stopping يحدد كيفية توقف الروبوت عن الحركة: عن طريق الكبح، أو الانزلاق، أو الثبات.

Usage:
drivetrain.set_stopping(brake)

حدود

وصف

brake

كيفية توقف الروبوت:

  • BRAKE — يتوقف فورًا.
  • COAST — يتباطأ حتى يتوقف.
  • HOLD — يتوقف فورًا ويثبت موضع العجلات.

إذا لم يتم استخدام هذه الطريقة، فسيستخدم الروبوت BRAKE عند التوقف.

# Build Used: Code Base 2.0
def main():
    # Drive, then coast to a stop
    drivetrain.set_drive_velocity(100)
    drivetrain.set_stopping(COAST)
    drivetrain.drive(FORWARD)
    wait(2, SECONDS)
    drivetrain.stop()

# Start threads — Do not delete
start_thread(main)

set_timeout#

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

Usage:
drivetrain.set_timeout(value, units)

حدود

وصف

value

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

units

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

# Build Used: Code Base 2.0
def main():
    # Drive as far as possible for 1 second before turning right
    drivetrain.set_timeout(1, SECONDS)
    drivetrain.drive_for(FORWARD, 25, INCHES)
    drivetrain.turn_for(RIGHT, 90)

# Start threads — Do not delete
start_thread(main)

set_heading#

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

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

Usage:
drivetrain.set_heading(value)

حدود

وصف

value

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

# Build Used: Code Base 2.0
def main():
    # Face the new 0 degree heading
    drivetrain.set_heading(90)
    drivetrain.turn_to_heading(0)

# Start threads — Do not delete
start_thread(main)

set_rotation#

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

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

Usage:
drivetrain.set_rotation(value)

حدود

وصف

value

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

# Build Used: Code Base 2.0
def main():
    # Spin counterclockwise two times
    drivetrain.set_rotation(720)
    drivetrain.turn_to_rotation(0)

# Start threads — Do not delete
start_thread(main)

المحصلون#

get_heading#

الاتجاه هو المسار الذي يواجهه دماغ الروبوت، ويُقاس بالدرجات. تُعيد get_heading هذا الاتجاه من 0 إلى 359 درجة.

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

دماغ VEX GO يوضح اتجاهات الحركة: 0 درجة للأمام، 90 درجة لليمين، 180 درجة للخلف، و270 درجة لليسار.

Usage:
drivetrain.get_heading()

حدود

وصف

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

# Build Used: Code Base 2.0
def main():
    # Display the heading while turning
    monitor_sensor("drivetrain.get_heading")
    drivetrain.turn_for(RIGHT, 450)


# Start threads — Do not delete
start_thread(main)

get_rotation#

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

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

قاعدة بيانات أكواد VEX GO 2.0 تُظهر أسهمًا تدور إلى اليمين واليسار. يشير السهم الأيسر إلى "ناقص" ويشير السهم الأيمن إلى "زائد".

Usage:
drivetrain.get_rotation()

حدود

وصف

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

# Build Used: Code Base 2.0
def main():
    # Display the rotation while turning
    monitor_sensor("drivetrain.get_rotation")
    drivetrain.turn_for(RIGHT, 450)


# Start threads — Do not delete
start_thread(main)

get_velocity#

get_velocity تُرجع مدى سرعة قيادة الروبوت، كنسبة مئوية من -100% إلى 100%.

تشير القيمة الموجبة إلى أن الروبوت يتحرك للأمام. وتشير القيمة السالبة إلى أن الروبوت يتحرك للخلف.

Usage:
drivetrain.get_velocity()

حدود

وصف

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

# Build Used: Code Base 2.0
def main():
    # Display the velocity of the robot before and while moving
    console.print("Start: ")
    console.print(drivetrain.get_velocity())
    console.new_line()
    drivetrain.drive(FORWARD)
    wait(0.5, SECONDS)
    console.print("Moving: ")
    console.print(drivetrain.get_velocity())
    drivetrain.stop()


# Start threads — Do not delete
start_thread(main)

get_yaw#

يُشير مصطلح “الانحراف” إلى مقدار دوران الروبوت يمينًا أو يسارًا من موضعه الابتدائي، ويُقاس بالدرجات. تُعيد get_yaw قيمة الانحراف الحالية للروبوت.

الانعطاف يميناً يزيد من قيمة الانحراف، والانعطاف يساراً يقلل من قيمة الانحراف.

Usage:
drivetrain.get_yaw()

حدود

وصف

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

# Build Used: Super Code Base 2.0
def main():
    # Change the LED color based on the yaw while
    # moving the robot by hand
    monitor_sensor("drivetrain.get_yaw")
    while True:
        if drivetrain.get_yaw() > 0:
            bumper.set_color(GREEN)
        elif drivetrain.get_yaw() < 0:
            bumper.set_color(RED)
        else:
            bumper.set_color(NONE)

# Start threads — Do not delete
start_thread(main)

get_roll#

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

عندما يكون الدماغ متجهًا للأمام، فإن الإمالة إلى اليسار تزيد من قيمة الدوران، والإمالة إلى اليمين تقلل من قيمة الدوران.

Usage:
drivetrain.get_roll()

حدود

وصف

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

# Build Used: Super Code Base 2.0
def main():
    # Change the LED color based on the roll while
    # moving the robot by hand
    monitor_sensor("drivetrain.get_roll")
    while True:
        if drivetrain.get_roll() > 0:
            bumper.set_color(GREEN)
        elif drivetrain.get_roll() < 0:
            bumper.set_color(RED)
        else:
            bumper.set_color(NONE)

# Start threads — Do not delete
start_thread(main)

get_pitch#

زاوية الميل هي مقدار ميل الروبوت للأمام أو للخلف، وتقاس بالدرجات. get_pitch تُعيد قيمة زاوية الميل الحالية للروبوت.

عندما يكون الدماغ متجهًا للأمام، فإن الميل للأمام يزيد من قيمة النغمة، والميل للخلف يقلل من قيمة النغمة.

Usage:
drivetrain.get_pitch()

حدود

وصف

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

# Build Used: Super Code Base 2.0
def main():
    # Change the LED color based on the pitch while
    # moving the robot by hand
    monitor_sensor("drivetrain.get_pitch")
    while True:
        if drivetrain.get_pitch() > 0:
            bumper.set_color(GREEN)
        elif drivetrain.get_pitch() < 0:
            bumper.set_color(RED)
        else:
            bumper.set_color(NONE)

# Start threads — Do not delete
start_thread(main)

get_crashed#

get_crashed تُرجع ما إذا كان الروبوت قد اكتشف حادثًا، كقيمة منطقية.

  • True — تم اكتشاف حادث تصادم.

  • False — لم يتم رصد أي حادث.

Usage:
drivetrain.get_crashed()

حدود

وصف

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

# Build Used: Super Code Base 2.0
def main():
    # Drive until a crash
    drivetrain.drive(FORWARD)
    while not drivetrain.get_crashed():
        wait(50, MSEC)
    drivetrain.stop()
    drivetrain.turn_for(RIGHT, 90)

# Start threads — Do not delete
start_thread(main)

is_stopped#

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

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

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

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

Usage:
drivetrain.is_stopped()

حدود

وصف

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

# Build Used: Code Base 2.0
def main():
    # Turn when the drivetrain is done moving forward
    drivetrain.drive_for(FORWARD, 100, MM, wait=False)
    wait(0.25, SECONDS)
    while True:
        if drivetrain.is_stopped():
            drivetrain.turn_for(RIGHT, 180)
            break
        else:
            console.print("Still moving...")
            wait(0.1, SECONDS)
            console.clear()

# Start threads — Do not delete
start_thread(main)