Рух#
Вступ#
Двигуни контролюють рух частин робота. Двигуни можна використовувати для підняття руки, повороту кігтя, обертання колеса або переміщення іншої частини конструкції. Два двигуни можуть працювати разом як трансмісія для переміщення та повороту всього робота.
Кожен двигун налаштовується у вікні «Пристрої». Залежно від збірки, назви двигунів можуть змінюватися. Наприклад, збірка Competition Advanced 2.0 має двигун з назвою arm_motorКористувацький робот може використовувати різні назви двигунів.
За замовчуванням, FORWARD обертає двигун проти годинникової стрілки, а REVERSE обертає двигун за годинниковою стрілкою. Якщо у вікні «Пристрої» для двигуна налаштовано реверс, ці напрямки будуть переключені.
Існує багато способів кодування двигунів. Нижче наведено список усіх методів руху:
Дії — Зупинити та розкрутити двигуни.
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)
Параметри |
Опис |
|---|---|
|
Напрямок обертання двигуна: |
# 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)
Параметри |
Опис |
|---|---|
|
Напрямок обертання двигуна: |
|
Відстань, на яку обертається двигун. |
|
Необов’язково. Одиниця вимірювання відстані: |
|
Необов’язково. |
# 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)
Параметри |
Опис |
|---|---|
|
Значення положення, до якого обертатиметься двигун. |
|
Необов’язково. Одиниця вимірювання положення: |
|
Необов’язково. |
# 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)
Параметри |
Опис |
|---|---|
|
Швидкість обертання від 0% до 100%. Це може бути |
# 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)
Параметри |
Опис |
|---|---|
|
Максимальний крутний момент, який може використовувати двигун, від 0% до 100%. Це може бути |
# 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)
Параметри |
Опис |
|---|---|
|
Значення положення, яке потрібно встановити для двигуна. |
|
Необов’язково. Одиниця вимірювання положення: |
# 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)
Параметри |
Опис |
|---|---|
|
Як зупиняється двигун:
|
Наприклад, якщо використовується збірка 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)
Параметри |
Опис |
|---|---|
|
Кількість часу, протягом якого двигун може намагатися завершити рух. Це може бути додатне ціле число |
|
Необов’язково. Одиниця часу: |
# 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)
Параметри |
Опис |
|---|---|
|
Необов’язково. Одиниця вимірювання для повернення положення двигуна: |
# 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)