Рух#

Вступ#

Двигуни контролюють рух частин робота. Двигуни можна використовувати для підняття руки, повороту кігтя, обертання колеса або переміщення іншої частини конструкції. Два двигуни можуть працювати разом як трансмісія для переміщення та повороту всього робота.

Кожен двигун налаштовується у вікні «Пристрої». Залежно від збірки, назви двигунів можуть змінюватися. Наприклад, збірка Competition Advanced 2.0 має двигун з назвою arm_motorКористувацький робот може використовувати різні назви двигунів.

За замовчуванням, FORWARD обертає двигун проти годинникової стрілки, а REVERSE обертає двигун за годинниковою стрілкою. Якщо у вікні «Пристрої» для двигуна налаштовано реверс, ці напрямки будуть переключені.

Двигун VEX GO, що показує напрямок руху вперед, позначений знаком плюс та стрілкою, що вказує на обертання ліворуч або проти годинникової стрілки. Двигун VEX GO, що показує зворотний напрямок обертання, позначений знаком мінус та стрілкою, що вказує на те, що він обертається праворуч або за годинниковою стрілкою.

Існує багато способів кодування двигунів. Нижче наведено список усіх методів руху:

Дії — Зупинити та розкрутити двигуни.

  • spin — Обертає двигун вперед або назад нескінченно.

  • spin_for — Обертає двигун на певну відстань.

  • spin_to_position — Розкручує двигун у певне положення.

  • stop — Зупиняє обертання двигуна.

Мутатори — налаштування параметрів двигуна.

  • set_velocity — Вказує двигуну, з якою швидкістю обертатися.

  • set_max_torque — Встановлює, наскільки сильно двигун може обертатися.

  • set_position — Змінює поточне положення двигуна на нове значення.

  • set_stopping — Встановлює спосіб зупинки двигуна: гальмуванням, рухом на вильоті або утримуванням.

  • set_timeout — Встановлює, скільки часу двигун намагатиметься завершити рух.

Геттери — Перевірка стану двигуна.

  • get_position — Повертає поточне положення двигуна.

  • get_velocity — Повертає швидкість обертання двигуна у відсотках від -100% до 100%.

  • get_current — Повертає кількість енергії, яку двигун використовує від акумулятора, у відсотках від 0% до 100%.

  • is_stopped — Повертає, чи завершив рух двигуна, у вигляді логічного значення.

  • is_moving — Повертає, чи обертається двигун, у вигляді логічного значення.

Дії#

spin#

spin обертає двигун вперед або назад нескінченно. Двигун продовжуватиме обертатися, доки йому не буде надано іншу дію, наприклад, обертання в іншому напрямку або зупинка.

Usage:
arm_motor.spin(direction)

Параметри

Опис

direction

Напрямок обертання двигуна: FORWARD або REVERSE.

# Build Used: Competition Advanced 2.0
def main():
    # Raise the ArmMotor, then stop
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

spin_for#

spin_for обертає двигун на певну відстань. Обертання залежить від поточного положення двигуна. Проект чекатиме, поки двигун завершить обертання, перш ніж буде виконано наступний рядок коду.

Usage:
arm_motor.spin_for(direction, angle, units, wait)

Параметри

Опис

direction

Напрямок обертання двигуна: FORWARD або REVERSE.

angle

Відстань, на яку обертається двигун. DEGREES – використання цілих чисел. TURNS – використання цілих чисел або десяткових дробів.

units

Необов’язково. Одиниця вимірювання відстані: DEGREES (за замовчуванням) або TURNS.

wait

Необов’язково. wait=True (за замовчуванням) змушує проект чекати, поки двигун не завершить обертання, перш ніж виконувати наступний рядок коду. wait=False змушує наступний рядок коду виконуватися негайно.

# Build Used: Competition Advanced 2.0
def main():
    # Raise and lower the ArmMotor
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    arm_motor.spin_for(FORWARD, 180, DEGREES)

# Start threads — Do not delete
start_thread(main)

spin_to_position#

spin_to_position обертає двигун у певне положення.

Положення двигуна – це відстань його обертання, що вимірюється в DEGREES або TURNSОдин оберт дорівнює 360 градусам. На початку проекту положення двигуна встановлюється на 0 градусів. Положення двигуна також можна встановити за допомогою методу set_position.

Значення положення є абсолютними. Це означає, що напрямок обертання залежить від поточного положення двигуна.

Наприклад, якщо двигун запускається при 0 градусах і обертається до положення 720 градусів, він обертається вперед на два оберти. Якщо він потім обертається до положення 360 градусів, він обертається назад на один оберт, оскільки 360 менше за 720.

Usage:
arm_motor.spin_to_position(angle, units, wait)

Параметри

Опис

angle

Значення положення, до якого обертатиметься двигун. DEGREES – використання цілих чисел. TURNS – використання цілих чисел або десяткових знаків.

units

Необов’язково. Одиниця вимірювання положення: DEGREES (за замовчуванням) або TURNS.

wait

Необов’язково. wait=True (за замовчуванням) змушує проект чекати, поки двигун не завершить обертання, перш ніж виконувати наступний рядок коду. wait=False змушує наступний рядок коду виконуватися негайно.

# Build Used: Competition Advanced 2.0
def main():
    # Return ArmMotor to 0 degrees after raising
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    arm_motor.spin_to_position(0, DEGREES)

# Start threads — Do not delete
start_thread(main)

stop#

stop зупиняє обертання двигуна.

Usage:
arm_motor.stop()

Параметри

Опис

Цей метод не має параметрів.

# Build Used: Competition Advanced 2.0
def main():
    # Raise the ArmMotor
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

Мутатори#

set_velocity#

set_velocity вказує двигуну, як швидко обертатися. Вищий відсоток змушує двигун обертатися швидше, а нижчий відсоток — повільніше.

Кожен проект починається з того, що кожен двигун обертається зі швидкістю 50% за замовчуванням.

Примітка: Вища швидкість робить двигун обертанням швидше, але це може бути менш точно. Нижча швидкість робить двигун обертанням повільніше, але це може бути точнішим.

Usage:
arm_motor.set_velocity(velocity)

Параметри

Опис

velocity

Швидкість обертання від 0% до 100%. Це може бути integer або десяткове число (float з плаваючою комою).

# Build Used: Competition Advanced 2.0
def main():
    # Move the ArmMotor at different velocities
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    # Move slow
    arm_motor.set_velocity(20)
    arm_motor.spin_for(FORWARD, 180, DEGREES)
    wait(1, SECONDS)
    # Move fast
    arm_motor.set_velocity(100)
    arm_motor.spin_for(REVERSE, 180, DEGREES)

# Start threads — Do not delete
start_thread(main)

set_max_torque#

Крутний момент – це сила обертання. Він показує, з якою силою двигун може штовхати або тягнути під час обертання.

set_max_torque встановлює максимальний крутний момент, який може використовувати двигун.

Вищий відсоток дозволяє двигуну працювати сильніше, наприклад, під час підняття важкого предмета. Нижчий відсоток обмежує силу натискання двигуна. Це може допомогти захистити робота, якщо двигун застрягне або досягне межі можливостей для переміщення.

Кожен проект починається з крутного моменту кожного двигуна, встановленого за замовчуванням на рівні 50%.

Usage:
arm_motor.set_max_torque(value)

Параметри

Опис

value

Максимальний крутний момент, який може використовувати двигун, від 0% до 100%. Це може бути integer або десяткове число (float з плаваючою комою).

# Build Used: Competition Advanced 2.0
def main():
    # Move the ArmMotor at different torques
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    # Move with less torque
    arm_motor.set_max_torque(20)
    arm_motor.spin_for(FORWARD, 180, DEGREES)
    wait(1, SECONDS)
    # Move with maximum torque
    arm_motor.set_max_torque(100)
    arm_motor.spin_for(REVERSE, 180, DEGREES)

# Start threads — Do not delete
start_thread(main)

set_position#

Положення двигуна — це те, наскільки він обертувався, вимірюється в DEGREES або TURNSОдин оберт дорівнює 360 градусам. set_position змінює поточне положення двигуна на нове значення.

Наприклад, якщо двигун обертався на 180 градусів, встановлення положення на 0 градусів скине це положення зі 180 на 0 градусів. Потім двигун може обертатися в положення на основі цього нового значення.

Usage:
arm_motor.set_position(position, units)

Параметри

Опис

position

Значення положення, яке потрібно встановити для двигуна. DEGREES – цілі числа. TURNS – цілі або десяткові числа.

units

Необов’язково. Одиниця вимірювання положення: DEGREES (за замовчуванням) або TURNS.

# Build Used: Competition Advanced 2.0
def main():
    # Return ArmMotor to 0 degrees after raising
    arm_motor.set_position(0, DEGREES)
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    wait(1, SECONDS)
    arm_motor.spin_to_position(0, DEGREES)

# Start threads — Do not delete
start_thread(main)

set_stopping#

set_stopping встановлює спосіб зупинки двигуна: гальмуванням, рухом на вибігу або утримуванням.

Usage:
arm_motor.set_stopping(mode)

Параметри

Опис

mode

Як зупиняється двигун:

  • BRAKE — Негайна зупинка.
  • COAST — Уповільнення до повної зупинки.
  • HOLD — Негайна зупинка та утримування двигуна в заданому положенні.

Наприклад, якщо використовується збірка Competition Advanced 2.0 і для параметра arm_motor встановлено значення HOLD, двигун утримуватиме руку в поточному положенні, доки не відбудеться інший рух руки. Це означає, що двигун працюватиме проти сили тяжіння, щоб утримувати руку в повітрі, якщо двигун був зупинений з піднятою рукою.

Якщо цей метод не використовується, двигун використовуватиме BRAKE під час зупинки.

# Build Used: Competition Advanced 2.0
def main():
    # Move the ArmMotor, then coast to a stop
    arm_motor.set_velocity(20)
    arm_motor.set_stopping(COAST)
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

set_timeout#

set_timeout встановлює час, протягом якого двигун намагатиметься завершити рух. Якщо двигун не зможе завершити рух за цей час, він припинить спроби та перейде до наступного рядка коду. Це запобігає зависанню двигуна на русі.

Usage:
arm_motor.set_timeout(value, units)

Параметри

Опис

value

Кількість часу, протягом якого двигун може намагатися завершити рух. Це може бути додатне ціле число integer або десяткове число (float).

units

Необов’язково. Одиниця часу: SECONDS (за замовчуванням) або MSEC (мілісекунди).

# Build Used: Competition Advanced 2.0
def main():
    # Move ArmMotor as far as possible for 1 second before resetting
    arm_motor.set_position(0, DEGREES)
    arm_motor.set_timeout(1, SECONDS)
    arm_motor.spin_for(REVERSE, 180, DEGREES)
    arm_motor.spin_to_position(0, DEGREES)

# Start threads — Do not delete
start_thread(main)

Геттери#

get_position#

Положення двигуна — це те, наскільки він обертувався, вимірюється в DEGREES або TURNSОдин оберт дорівнює 360 градусам. get_position повертає поточне положення двигуна.

На початку проекту положення двигуна встановлюється на 0 градусів. Якщо двигун обертається на один оберт вперед, положення становитиме 360 градусів або 1 оберт. Якщо двигун обертається в іншому напрямку, положення буде від’ємним.

Usage:
arm_motor.get_position(units)

Параметри

Опис

units

Необов’язково. Одиниця вимірювання для повернення положення двигуна: DEGREES (за замовчуванням) або TURNS.

# Build Used: Competition Advanced 2.0
def main():
    # Display how far the ArmMotor moves after one second
    arm_motor.set_position(0, DEGREES)
    console.print("Start: ")
    console.print(arm_motor.get_position(DEGREES))
    console.new_line()
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    arm_motor.stop()
    console.print("After: ")
    console.print(arm_motor.get_position(DEGREES))

# Start threads — Do not delete
start_thread(main)

get_velocity#

get_velocity повертає швидкість обертання двигуна у відсотках від -100% до 100%.

Додатне значення означає, що двигун обертається вперед. Від’ємне значення означає, що двигун обертається назад.

Usage:
arm_motor.get_velocity()

Параметри

Опис

Цей метод не має параметрів.

# Build Used: Competition Advanced 2.0
def main():
    # Display the ArmMotor's velocity when it moves
    console.print("Resting: ")
    console.print(arm_motor.get_velocity())
    console.new_line()
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    console.print("Moving: ")
    console.print(arm_motor.get_velocity())
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

get_current#

get_current повертає кількість енергії, яку двигун використовує від акумулятора, у відсотках від 0% до 100%.

Вище значення струму означає, що двигун використовує більше потужності. Це може статися, коли двигун піднімає щось важке, штовхає об’єкт або намагається рухатися, коли він застряг.

Usage:
arm_motor.get_current()

Параметри

Опис

Цей метод не має параметрів.

# Build Used: Competition Advanced 2.0
def main():
    # Display the motor's current when it moves
    console.print("Resting: ")
    console.print(arm_motor.get_current())
    console.new_line()
    arm_motor.spin(REVERSE)
    wait(1, SECONDS)
    console.print("Moving: ")
    console.print(arm_motor.get_current())
    arm_motor.stop()

# Start threads — Do not delete
start_thread(main)

is_stopped#

is_stopped повертає, чи завершив рух двигуна, у вигляді логічного значення. Це можна використовувати для керування часом інших дій на основі руху двигуна.

  • True — Двигун завершив рух.

  • False — Двигун все ще рухається.

Цей метод працює разом із наступними методами руху, які мають параметр wait : spin_for та spin_to_position.

Usage:
arm_motor.is_stopped()

Параметри

Опис

Цей метод не має параметрів.

# Build Used: Competition Advanced 2.0
def main():
    # Turn the Eye Sensor's light on while ArmMotor is moving
    arm_motor.spin_for(REVERSE, 180, DEGREES, wait=False)
    wait(0.1, SECONDS)
    while True:
        if arm_motor.is_stopped():
            eye.set_light(OFF)
        else:
            eye.set_light(ON)

# Start threads — Do not delete
start_thread(main)

is_moving#

is_moving повертає, чи обертається двигун, у вигляді логічного значення. Це можна використовувати для керування часом інших дій на основі руху двигуна.

  • True — Двигун обертається.

  • False — Двигун не обертається.

Цей метод працює разом із наступними методами руху, які мають параметр wait : spin_for та spin_to_position.

Usage:
arm_motor.is_moving()

Параметри

Опис

Цей метод не має параметрів.

# Build Used: Competition Advanced 2.0
def main():
    # Turn the Eye Sensor's light on while ArmMotor is moving
    arm_motor.spin_for(REVERSE, 180, DEGREES, wait=False)
    wait(0.1, SECONDS)
    while True:
        if arm_motor.is_moving():
            eye.set_light(ON)
        else:
            eye.set_light(OFF)

# Start threads — Do not delete
start_thread(main)