نظام نقل الحركة#
مقدمة#
تتضمن مجموعة نقل الحركة عجلات ومحركات تتحكم في كيفية قيادة الروبوت وانعطافه. يمكن العثور على مجموعات نقل الحركة في نماذج مثل 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)
حدود |
وصف |
|---|---|
|
اتجاه حركة الروبوت: |
# 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)
حدود |
وصف |
|---|---|
|
اتجاه حركة الروبوت: |
|
المسافة التي يقطعها الروبوت. يمكن أن تكون هذه المسافة عددًا صحيحًا أو عددًا عشريًا. |
|
اختياري. وحدة المسافة: |
|
اختياري. |
# 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)
حدود |
وصف |
|---|---|
|
الشرط الذي يوقف الروبوت: |
|
اختياري. |
# 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)
حدود |
وصف |
|---|---|
|
اتجاه دوران الروبوت: |
# 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)
حدود |
وصف |
|---|---|
|
اتجاه دوران الروبوت: |
|
عدد الدرجات التي يدور بها الروبوت. يمكن أن يكون هذا عددًا صحيحًا أو عددًا عشريًا. |
|
اختياري. |
# 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 درجة. سيسلك الروبوت أقصر مسار للوصول إلى الاتجاه المطلوب.
اتجاه البداية هو صفر درجة.

Usage:
drivetrain.turn_to_heading(angle, wait)
حدود |
وصف |
|---|---|
|
الاتجاه الذي يجب أن يواجهه الروبوت كعدد صحيح، من -359 إلى 359 درجة. |
|
اختياري. |
# 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 درجة.

Usage:
drivetrain.turn_to_rotation(angle, wait)
حدود |
وصف |
|---|---|
|
قيمة الدوران، بالدرجات، التي سيدور إليها الروبوت. يمكن أن تكون هذه القيمة عددًا صحيحًا. |
|
اختياري. |
# 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)
حدود |
وصف |
|---|---|
|
السرعة التي يتم القيادة بها تتراوح من 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)
حدود |
وصف |
|---|---|
|
سرعة الانعطاف من 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 عند التوقف.
# 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)
حدود |
وصف |
|---|---|
|
المدة الزمنية التي يمكن للروبوت خلالها محاولة إكمال حركة معينة. يمكن أن تكون هذه المدة عددًا صحيحًا أو عددًا عشريًا. |
|
اختياري. وحدة الوقت: |
# 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)
حدود |
وصف |
|---|---|
|
قيمة الاتجاه، بالدرجات، التي سيتم ضبطها للروبوت. يمكن أن تكون هذه القيمة عددًا صحيحًا من 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)
حدود |
وصف |
|---|---|
|
قيمة الدوران، بالدرجات، التي سيتم ضبطها للروبوت. يمكن أن تكون هذه القيمة عددًا صحيحًا. |
# 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 درجة.

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 درجة.

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)