Движение#

Введение#

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

Каждый двигатель настраивается в окне «Устройства». В зависимости от сборки названия двигателей могут меняться. Например, в сборке Competition Advanced 2.0 двигатель называется arm_motorПользовательский робот может использовать другие названия двигателей.

По умолчанию, FORWARD вращает двигатель против часовой стрелки, а REVERSE вращает двигатель по часовой стрелке. Если в окне «Устройства» для двигателя задано реверсирование, направления вращения будут поменяны местами.

На схеме двигателя VEX GO направление вращения обозначено знаком «плюс», а стрелка указывает на вращение влево, или против часовой стрелки. На изображении двигателя VEX GO показано обратное направление вращения, обозначенное знаком минус, а стрелка указывает на вращение вправо, или по часовой стрелке.

Существует множество способов программирования двигателей. Ниже приведён список всех методов 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)

Параметры

Описание

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 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 (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 возвращает значение логического типа (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)