حركة#

مقدمة#

يستخدم روبوت VEX AIM للبرمجة نظام حركة هولونومي للتحرك للأمام والخلف واليسار واليمين، أو بزاوية، مع قدرته على الدوران بشكل مستقل. تتحكم طرق الحركة في كيفية تحرك الروبوت ودورانه، وسرعته، وكيفية تتبع موقعه على المحورين السيني والصادي.

قرص بوصلة دائري من 0 إلى 315 درجة يحيط بشاشة رمادية داكنة مع خلفية زرقاء داكنة. الجزء الأمامي من الروبوت يواجه 0 درجة على قرص البوصلة.

فيما يلي قائمة بالطرق المتاحة:

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

  • move_at — يحرك الروبوت بزاوية محددة إلى الأبد.

  • move_for — يحرك الروبوت بزاوية محددة لمسافة محددة.

  • move_with_vectors — يحرك الروبوت باستخدام قيم x و y والدوران المستندة إلى المتجهات.

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

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

  • turn_to — يقوم بتدوير الروبوت لمواجهة اتجاه محدد.

  • stop_all_movement — يوقف جميع حركات الروبوت.

المُعدِّلات — ضبط قيم حركة الروبوت.

  • set_move_velocity — يخبر الروبوت بمدى سرعة تحركه.

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

  • set_xy_position — يغير موضع x و y الحالي للروبوت إلى قيم جديدة.

الدوال المُسترجعة — تُعيد حالة الروبوت وموقعه.

  • get_x_position — تُرجع إحداثيات x الحالية للروبوت.

  • get_y_position — يعيد إحداثيات y الحالية للروبوت.

  • is_move_active — تُرجع ما إذا كان الروبوت يتحرك.

  • is_turn_active — تُرجع ما إذا كان الروبوت يدور أم لا.

  • is_stopped — تُرجع ما إذا كان الروبوت لا يتحرك ولا يدور.

الإجراءات#

move_at#

move_at moves the robot forever at a specific angle. The angle is relative to the current position of the robot. The robot will continue to move until it is given another action, like moving at a different angle, turning, or stopping.

طريقة الاستخدام:

robot.move_at(angle, velocity, units)

حدود

وصف

angle

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

velocity

اختياري. السرعة المراد التحرك بها تتراوح من 0% إلى 100% عند استخدام PERCENT، أو من 0 إلى 200 مليمتر في الثانية عند استخدام MMPSيمكن أن تكون هذه القيمة عددًا صحيحًا أو عشريًا (float). إذا لم يتم تحديد سرعة، يتحرك الروبوت بالسرعة الحالية.

units

اختياري. وحدة السرعة: PERCENT (افتراضي) أو MMPS (مليمتر في الثانية).

# Move right, then move forward and stop.
robot.move_at(90)
wait(1,SECONDS)
robot.move_at(0)
wait(1,SECONDS)
robot.stop_all_movement()

# Move right slowly, move in reverse quickly and stop.
robot.move_at(90, 25)
wait(2, SECONDS)
robot.move_at(180, 100, PERCENT)
wait(1, SECONDS)
robot.stop_all_movement()

# Move diagonally to the right and stop.
robot.move_at(45.33)
wait(1,SECONDS)
robot.stop_all_movement()

move_for#

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

طريقة الاستخدام:

robot.move_for(distance, angle, velocity, units, wait)

حدود

وصف

distance

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

angle

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

velocity

اختياري. السرعة المراد التحرك بها تتراوح من 0% إلى 100% عند استخدام PERCENT، أو من 0 إلى 200 مليمتر في الثانية عند استخدام MMPSيمكن أن تكون هذه القيمة عددًا صحيحًا أو عشريًا (float). إذا لم يتم تحديد سرعة، يتحرك الروبوت بالسرعة الحالية.

units

اختياري. وحدة السرعة: PERCENT (افتراضي) أو MMPS (مليمتر في الثانية).

wait

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

# Move right, then move forward.
robot.move_for(50, 90)
robot.move_for(100, 0)

# Move in reverse slowly, then move forward quickly.
robot.move_for(100, 180, 25)
robot.move_for(100, 0, 100, PERCENT)

# Drive forward and blink all LEDs red.
robot.move_for(100, 0, wait=False)
robot.led.on(ALL_LEDS, RED)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, BLACK)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, RED)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, BLACK)

move_with_vectors#

المتجه هو طريقة لوصف سرعة حركة شيء ما واتجاهها. يُحرّك الأمر move_with_vectors الروبوت باستخدام الحركة المتجهة. يجمع الروبوت قيم السرعة الأمامية واليمينية والدورانية لإنشاء حركة سلسة. سيستمر الروبوت في الحركة باستخدام هذا المتجه حتى يُعطى إجراءً آخر، مثل التحرك بزاوية مختلفة أو الانعطاف أو التوقف.

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

طريقة الاستخدام:

robot.move_with_vectors(forward, rightward, rotation)

حدود

وصف

forward

سرعة الروبوت على طول المحور الصادي، من -100% إلى 100%. القيم السالبة تحرك الروبوت للخلف والقيم الموجبة تحركه للأمام.

rightward

سرعة الروبوت على طول المحور السيني، من -100% إلى 100%. القيم السالبة تحرك الروبوت إلى اليسار والقيم الموجبة تحركه إلى اليمين.

rotation

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

# Move at 15°
robot.move_with_vectors(48.3, 12.95, 0)
wait(2, SECONDS)
robot.stop_all_movement()

# Move at 45° while turning counterclockwise.
robot.move_with_vectors(50, 50, -30)
wait(2, SECONDS)
robot.stop_all_movement()

# Scaling movement using the controller joystick
while True:
    # Move forward (and backwards) slower than axis1 input
    forward   = controller.axis1.position() * 0.7
    
    # Move right (and left) faster than axis2 input
    rightward = controller.axis2.position() * 1.5    

    robot.move_with_vectors(forward, rightward, 0)

    wait(5, MSEC)

turn#

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

طريقة الاستخدام:

robot.turn(direction, velocity, units)

حدود

وصف

direction

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

velocity

اختياري. سرعة الدوران من 0% إلى 100% عند استخدام PERCENT، أو من 0 إلى 150 درجة في الثانية عند استخدام DPSيمكن أن تكون هذه القيمة عددًا صحيحًا أو عشريًا (float). إذا لم يتم تحديد سرعة، يدور الروبوت بسرعة الدوران الحالية.

units

اختياري. وحدة السرعة: DPS (درجات في الثانية، افتراضي) أو PERCENT.

# Turn left, then stop.
robot.turn(LEFT)
wait(1, SECONDS)
robot.stop_all_movement()

# Turn left quickly, turn right slowly, then stop.
robot.turn(LEFT, 80)
wait(2, SECONDS)
robot.turn(RIGHT, 20, PERCENT)
wait(3, SECONDS)
robot.stop_all_movement()

turn_for#

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

طريقة الاستخدام:

robot.turn_for(direction, angle, velocity, units, wait)

حدود

وصف

direction

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

angle

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

velocity

اختياري. سرعة الدوران من 0% إلى 100% عند استخدام PERCENT، أو من 0 إلى 150 درجة في الثانية عند استخدام DPSيمكن أن تكون هذه القيمة عددًا صحيحًا أو عشريًا (float). إذا لم يتم تحديد سرعة، يدور الروبوت بسرعة الدوران الحالية.

units

اختياري. وحدة السرعة: DPS (درجات في الثانية، افتراضي) أو PERCENT.

wait

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

# Turn left, then turn around to the right.
robot.turn_for(LEFT, 90)
robot.turn_for(RIGHT, 180)

# Turn left quickly, then turn right slowly.
robot.turn_for(LEFT, 90, 100)
robot.turn_for(RIGHT, 180, 15, PERCENT)

# Turn right and blink all LEDs blue.
robot.turn_for(RIGHT, 180, wait=False)
robot.led.on(ALL_LEDS, BLUE)
wait(0.5, SECONDS)
robot.led.off(ALL_LEDS)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, BLUE)
wait(0.5, SECONDS)
robot.led.off(ALL_LEDS)

turn_to#

A heading is the direction the robot is facing, measured in degrees. turn_to turns the robot to face a specific heading. The robot will turn the shortest direction to reach the target heading.

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

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

طريقة الاستخدام:

robot.turn_to(heading, velocity, units, wait)

حدود

وصف

heading

الاتجاه الذي يجب أن يواجهه الروبوت، من -360 إلى 360 درجة.

velocity

اختياري. سرعة الدوران من 0% إلى 100% عند استخدام PERCENT، أو من 0 إلى 150 درجة في الثانية عند استخدام DPSيمكن أن تكون هذه القيمة عددًا صحيحًا أو عشريًا (float). إذا لم يتم تحديد سرعة، يدور الروبوت بسرعة الدوران الحالية.

units

اختياري. وحدة السرعة: DPS (درجات في الثانية، افتراضي) أو PERCENT.

wait

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

# Turn to face each cardinal directions.
robot.turn_to(90)
wait(2, SECONDS)
robot.turn_to(180)
wait(2, SECONDS)
robot.turn_to(270)
wait(2, SECONDS)
robot.turn_to(0)

# Turn to face backward slowly, then face forward quickly.
robot.turn_to(180, 25)
wait(1, SECONDS)
robot.turn_to(0, 90, PERCENT)

# Turn around quickly and blink all LEDs green.
robot.turn_to(180, 100, wait=False)
robot.led.on(ALL_LEDS, GREEN)
wait(0.5, SECONDS)
robot.led.off(ALL_LEDS)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, GREEN)
wait(0.5, SECONDS)
robot.led.off(ALL_LEDS)

stop_all_movement#

stop_all_movement يوقف جميع حركات الروبوت.

طريقة الاستخدام:

robot.stop_all_movement()

حدود

وصف

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

# Turn right, then stop moving
robot.turn(RIGHT)
wait(1, SECONDS)
robot.stop_all_movement()

المتحولون#

set_move_velocity#

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

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

سرعة الحركة بنسبة 100% تعادل 200 مليمتر في الثانية.

طريقة الاستخدام:

robot.set_move_velocity(velocity, units)

حدود

وصف

velocity

السرعة المراد التحرك بها تتراوح من 0% إلى 100% عند استخدام PERCENT، أو من 0 إلى 200 مليمتر في الثانية عند استخدام MMPSيمكن أن يكون هذا عددًا صحيحًا أو عشريًا (float).

units

اختياري. وحدة السرعة: PERCENT (افتراضي) أو MMPS (مليمتر في الثانية).

# Move forward at the default velocity,
robot.set_move_velocity(50)
robot.move_for(100, 0)
wait(1, SECONDS)
# Move slower than the default velocity
robot.set_move_velocity(20)
robot.move_for(100, 0)
wait(1, SECONDS)
# Move faster than the default velocity
robot.set_move_velocity(100)
robot.move_for(100, 0)

set_turn_velocity#

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

يبدأ كل مشروع بالروبوت وهو يدور بسرعة 50% (75 درجة في الثانية) بشكل افتراضي.

طريقة الاستخدام:

robot.set_turn_velocity(velocity, units)

حدود

وصف

velocity

تتراوح سرعة الدوران من 0% إلى 100% عند استخدام PERCENT، أو من 0 إلى 150 درجة في الثانية عند استخدام DPSيمكن أن يكون هذا عددًا صحيحًا أو عشريًا (float).

units

اختياري. وحدة السرعة: DPS (درجات في الثانية، افتراضي) أو PERCENT.

# Turn around at default velocity
robot.set_turn_velocity(50)
robot.turn_for(RIGHT, 180)
wait(1, SECONDS)
# Turn around slower than the default velocity
robot.set_turn_velocity(20)
robot.turn_for(RIGHT, 180)
wait(1, SECONDS)
# Turn around faster than the default velocity
robot.set_turn_velocity(100)
robot.turn_for(RIGHT, 180)

set_xy_position#

set_xy_position يغير موضع x و y الحالي للروبوت إلى قيم جديدة.

على سبيل المثال، إذا تحرك الروبوت بعيدًا عن نقطة انطلاقه، فإن ضبط قيمتي x و y على صفر يجعل موقعه الحالي هو النقطة الجديدة (0، 0). وبذلك، يستطيع الروبوت تتبع مواقعه المستقبلية بناءً على هذه القيمة الجديدة.

طريقة الاستخدام:

robot.set_xy_position(x, y)

حدود

وصف

x

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

y

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

# Set the robot's current position
# Move forward and print the new coordinate
robot.set_xy_position(100, 50)
robot.move_for(150, 0)
robot.screen.print("X:", robot.get_x_position())
robot.screen.next_row()
robot.screen.print("Y:", robot.get_y_position())

المحصلون#

get_x_position#

get_x_position تُرجع إحداثيات x الحالية للروبوت بالملليمترات.

في بداية المشروع، يتم ضبط موضع x للروبوت على 0. يتغير موضع x مع تحرك الروبوت إلى اليسار أو اليمين ويمكن ضبطه باستخدام طريقة set_xy_position.

طريقة الاستخدام:

robot.get_x_position()

حدود

وصف

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

# Print the start and end x-value 
# of the robot's position after moving
robot.screen.print("Start X:", robot.get_x_position())
robot.move_for(200, 90)
robot.screen.next_row()
robot.screen.print("End X:", robot.get_x_position())

get_y_position#

get_y_position تُرجع إحداثيات y الحالية للروبوت بالملليمترات.

في بداية المشروع، يتم ضبط موضع y للروبوت على 0. يتغير موضع y مع تحرك الروبوت للأمام أو للخلف ويمكن ضبطه باستخدام طريقة set_xy_position.

طريقة الاستخدام:

robot.get_y_position()

حدود

وصف

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

# Print the start and end y-value 
# of the robot's position after moving
robot.screen.print("Start Y:", robot.get_y_position())
robot.move_for(200, 0)
robot.screen.next_row()
robot.screen.print("End Y:", robot.get_y_position())

is_move_active#

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

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

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

تعمل هذه الطريقة جنبًا إلى جنب مع طرق الحركة التي تحتوي على المعلمة wait ، مثل move_for.

طريقة الاستخدام:

robot.is_move_active()

حدود

وصف

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

# Blink all the LEDs when the robot is moving.
robot.move_for(200, 0, wait=False)

while robot.is_move_active():
    robot.led.on(ALL_LEDS, ORANGE)
    wait(0.5, SECONDS)
    robot.led.on(ALL_LEDS, CYAN)
    wait(0.5, SECONDS)

robot.led.off(ALL_LEDS)

is_turn_active#

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

  • True — الروبوت يدور.

  • False — الروبوت لا يدور.

تعمل هذه الطريقة جنبًا إلى جنب مع طرق الحركة التي تحتوي على المعلمة wait ، مثل turn_for و turn_to.

طريقة الاستخدام:

robot.is_turn_active()

حدود

وصف

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

# Blink all the LEDs while the robot is turning
robot.turn_for(RIGHT, 180, wait=False) 

while robot.is_turn_active():
    robot.led.on(ALL_LEDS, GREEN)
    wait(0.5, SECONDS)
    robot.led.on(ALL_LEDS, CYAN)
    wait(0.5, SECONDS)

robot.led.off(ALL_LEDS)

is_stopped#

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

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

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

طريقة الاستخدام:

robot.is_stopped()

حدود

وصف

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

# Blink all the LEDs while the robot is moving or turning

def light_show():
    # Flash LEDs while the robot is moving or turning
    while not robot.is_stopped():
        robot.led.on(ALL_LEDS, GREEN)
        wait(.5, SECONDS)
        robot.led.on(ALL_LEDS, PURPLE)
        wait(.5, SECONDS)

    robot.led.off(ALL_LEDS)

robot.move_for(200, 0, wait=False)
light_show()

robot.turn_for(RIGHT, 180, wait=False)
light_show()