Движение#
Введение#
Двигатели управляют движением частей робота. Двигатели могут использоваться для подъема манипулятора, вращения клешни, вращения колеса или перемещения другой части конструкции. Два двигателя могут работать вместе как привод для перемещения и поворота всего робота.
Каждый двигатель настраивается в окне «Устройства». В зависимости от сборки названия двигателей могут меняться. Например, в сборке Competition Advanced 2.0 двигатель называется arm_motorПользовательский робот может использовать другие названия двигателей.
По умолчанию, FORWARD вращает двигатель против часовой стрелки, а REVERSE вращает двигатель по часовой стрелке. Если в окне «Устройства» для двигателя задано реверсирование, направления вращения будут поменяны местами.
Существует множество способов программирования двигателей. Ниже приведён список всех методов Motion:
Действия — Остановка и вращение двигателей.
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 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 возвращает значение логического типа (Boolean), указывающее, завершилось ли движение двигателя. Это можно использовать для управления временем выполнения других действий в зависимости от движения двигателя.
True— Двигатель завершил движение.False— Двигатель все еще вращается.
Этот метод работает совместно со следующими методами Motion, имеющими параметр 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` возвращает значение логического типа (Boolean), указывающее, вращается ли двигатель. Это можно использовать для управления синхронизацией других действий в зависимости от движения двигателя.
True— Мотор вращается.False— Двигатель не вращается.
Этот метод работает совместно со следующими методами Motion, имеющими параметр 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)