Трансмиссия#

Введение#

В состав приводной системы входят колеса и двигатели, которые управляют движением и поворотами робота. Приводные системы можно найти в таких моделях, как Code Base 2.0, Super Car или в роботах, созданных по индивидуальному заказу.

В приводах используется инерциальный датчик в «мозге» для обнаружения столкновений и обеспечения точного движения и поворота робота. В начале каждого проекта привод автоматически калибрует инерциальный датчик. Во время калибровки удерживайте робота неподвижно около 2 секунд, чтобы он мог правильно двигаться и поворачивать.

Существует множество способов программирования трансмиссии. Ниже приведён список всех методов программирования трансмиссии:

Действия — Перемещение и поворот робота.

  • drive — Двигает робота вперед или назад бесконечно.

  • drive_for — Перемещает робота вперед или назад на определенное расстояние.

  • drive_until — Двигает робота вперед до тех пор, пока датчик взгляда не обнаружит объект или робот не обнаружит столкновение.

  • turn — Поворачивает робота влево или вправо навсегда.

  • turn_for — Поворачивает робота влево или вправо на определенное количество градусов.

  • turn_to_heading — Поворачивает робота в заданном направлении от -359 до 359 градусов. Робот повернется по кратчайшему направлению, чтобы достичь целевого направления.

  • turn_to_rotation — Поворачивает робота на заданное направление.

  • stop — Останавливает движение робота.

Мутаторы — Настройка параметров трансмиссии.

  • set_drive_velocity — Указывает роботу, с какой скоростью двигаться.

  • set_turn_velocity — Указывает роботу, с какой скоростью нужно поворачивать.

  • set_stopping — Указывает, как робот остановится: с помощью торможения, движения по инерции или удержания.

  • set_timeout — Устанавливает, как долго робот будет пытаться завершить движение.

  • set_heading — Изменяет текущее направление движения робота на новое.

  • set_rotation — Изменяет текущее вращение робота на новое вращение.

Геттеры — Проверка статуса движения.

  • get_heading — Возвращает текущий курс робота от 0 до 359 градусов.

  • get_rotation — Возвращает текущее вращение робота.

  • get_velocity — Возвращает скорость движения робота в процентах от -100% до 100%.

  • get_yaw — Возвращает текущий угол рыскания робота.

  • get_roll — Возвращает текущий бросок робота.

  • get_pitch — Возвращает текущий угол наклона робота.

  • get_crashed — Возвращает значение логического значения, указывающее, обнаружил ли робот столкновение.

  • is_stopped — Возвращает значение логического значения, указывающее, завершил ли робот движение.

Действия#

drive#

Привод drive перемещает робота вперед или назад бесконечно. Робот будет продолжать движение, пока ему не будет дано другое действие, например, поворот или остановка.

Usage:
drivetrain.drive(direction)

Параметры

Описание

direction

Направление движения робота: FORWARD или REVERSE.

# Build Used: Code Base 2.0
def main():
    # Drive forward then stop
    drivetrain.drive(FORWARD)
    wait(2, SECONDS)
    drivetrain.stop()

# Start threads — Do not delete
start_thread(main)

drive_for#

drive_for перемещает робота вперед или назад на определенное расстояние.

Usage:
drivetrain.drive_for(direction, distance, units, wait)

Параметры

Описание

direction

Направление движения робота: FORWARD или REVERSE.

distance

Расстояние, которое проезжает робот. Это может быть целое число или десятичная дробь.

units

Дополнительно. Единица измерения расстояния: MM (миллиметры, по умолчанию) или INCHES.

wait

Необязательно. wait=True (по умолчанию) заставляет проект ждать, пока робот не закончит движение, прежде чем выполнить следующую строку кода. wait=False заставляет следующую строку кода выполниться немедленно.

# Build Used: Code Base 2.0
def main():
    # Drive back and forth
    drivetrain.drive_for(FORWARD, 100, MM)
    drivetrain.drive_for(REVERSE, 4, INCHES)
    

# Start threads — Do not delete
start_thread(main)

drive_until#

drive_until перемещает робота вперед до тех пор, пока датчик взгляда не обнаружит объект или робот не обнаружит столкновение.

Usage:
drivetrain.drive_until(condition, wait)

Параметры

Описание

condition

Состояние, при котором робот останавливается: OBJECT или CRASH.

wait

Необязательно. wait=True (по умолчанию) заставляет проект ждать, пока робот не закончит движение, прежде чем выполнить следующую строку кода. wait=False заставляет следующую строку кода выполниться немедленно.

# Build Used: Code Base 2.0
def main():
    # Turn right after a crash
    drivetrain.drive_until(CRASH)
    drivetrain.turn_for(RIGHT, 90)

# Start threads — Do not delete
start_thread(main)

turn#

turn поворачивает робота влево или вправо бесконечно. Робот будет продолжать поворачивать, пока ему не будет дано другое действие, например, движение или остановка.

Usage:
drivetrain.turn(direction)

Параметры

Описание

direction

Направление поворота робота: LEFT или RIGHT.

# Build Used: Code Base 2.0
def main():
    # Turn right and left, then stop
    drivetrain.turn(RIGHT)
    wait(2, SECONDS)
    drivetrain.turn(LEFT)
    wait(2, SECONDS)
    drivetrain.stop()

# Start threads — Do not delete
start_thread(main)

turn_for#

turn_for поворачивает робота влево или вправо на определенное количество градусов. Поворот осуществляется относительно текущего положения робота.

Usage:
drivetrain.turn_for(direction, angle, wait)

Параметры

Описание

direction

Направление поворота робота: LEFT или RIGHT.

angle

Количество градусов, на которое поворачивается робот. Это может быть целое число или десятичная дробь.

wait

Необязательно. wait=True (по умолчанию) заставляет проект ждать, пока робот не закончит вращение, прежде чем выполнить следующую строку кода. wait=False заставляет следующую строку кода выполниться немедленно.

# Build Used: Code Base 2.0
def main():
    # Turn right then left
    drivetrain.turn_for(RIGHT, 90)
    drivetrain.turn_for(LEFT, 90)

# Start threads — Do not delete
start_thread(main)

turn_to_heading#

Направление движения — это направление, в котором обращен мозг робота, измеряемое в градусах. turn_to_heading поворачивает робота в определенном направлении от -359 до 359 градусов. Робот повернется по кратчайшему направлению, чтобы достичь целевого направления.

Начальный курс — 0 градусов.

Кодовая база VEX GO 2.0, показывающая направления движения: 0 градусов вперед, 90 градусов вправо, 180 градусов назад и 270 градусов влево.

Usage:
drivetrain.turn_to_heading(angle, wait)

Параметры

Описание

angle

Направление, в котором должен быть повернут робот, задано целым числом от -359 до 359 градусов.

wait

Необязательно. wait=True (по умолчанию) заставляет проект ждать, пока робот не закончит вращение, прежде чем выполнить следующую строку кода. wait=False заставляет следующую строку кода выполниться немедленно.

# Build Used: Code Base 2.0
def main():
    # Turn to face the cardinal directions
    drivetrain.turn_to_heading(90)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(180)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(270)
    wait(1, SECONDS)
    drivetrain.turn_to_heading(0)

# Start threads — Do not delete
start_thread(main)

turn_to_rotation#

turn_to_rotation поворачивает робота на определенное расстояние.

Вращение — это величина поворота робота, измеряемая в градусах. В начале проекта значение вращения устанавливается равным 0 градусам. Вращение также можно установить с помощью set_rotation.

Значения вращения являются абсолютными. Это означает, что направление поворота зависит от текущего вращения робота. Поворот вправо увеличивает вращение, а поворот влево уменьшает его.

Например, если робот начинает движение с 0 градусов, а затем вы поворачиваетесь на 720 градусов, он дважды повернется вправо. Если же вы повернетесь на 360 градусов, он один раз повернется влево, потому что 360 меньше 720.

Кодовая база VEX GO 2.0, показывающая стрелки, вращающиеся вправо и влево. Левая стрелка показывает «минус», а правая — «плюс».

Usage:
drivetrain.turn_to_rotation(angle, wait)

Параметры

Описание

angle

Величина поворота в градусах, на которую повернется робот. Это может быть целое число.

wait

Необязательно. wait=True (по умолчанию) заставляет проект ждать, пока робот не закончит вращение, прежде чем выполнить следующую строку кода. wait=False заставляет следующую строку кода выполниться немедленно.

# Build Used: Code Base 2.0
def main():
    # Make one full turn to the right
    drivetrain.turn_to_rotation(360)
    # Make another full turn to the right
    drivetrain.turn_to_rotation(720)
    # Make one full turn to the left, returning to 360 degrees
    drivetrain.turn_to_rotation(360)
# Start threads — Do not delete
start_thread(main)

stop#

stop останавливает движение робота.

Usage:
drivetrain.stop()

Параметры

Описание

Этот метод не имеет параметров.

# Build Used: Code Base 2.0
def main():
    # Drive forward then stop
    drivetrain.drive(FORWARD)
    wait(2, SECONDS)
    drivetrain.stop()

# Start threads — Do not delete
start_thread(main)

Мутаторы#

set_drive_velocity#

Параметр set_drive_velocity указывает роботу, с какой скоростью двигаться. Более высокое значение в процентах увеличивает скорость движения робота, а более низкое — уменьшает.

Каждый проект начинается с того, что робот по умолчанию движется со скоростью, составляющей 50% от максимальной.

Примечание: Более высокая скорость увеличивает скорость движения робота, но может снизить его точность. Более низкая скорость замедляет движение робота, но повышает его точность.

Usage:
drivetrain.set_drive_velocity(velocity)

Параметры

Описание

velocity

Скорость движения от 0% до 100%.

# Build Used: Code Base 2.0
def main():
    # Drive at different velocities
    drivetrain.drive_for(FORWARD, 100, MM)
    wait(1, SECONDS)
    # Drive slow
    drivetrain.set_drive_velocity(20)
    drivetrain.drive_for(FORWARD, 100, MM)
    wait(1, SECONDS)
    # Drive fast
    drivetrain.set_drive_velocity(100)
    drivetrain.drive_for(FORWARD, 100, MM)

# Start threads — Do not delete
start_thread(main)

set_turn_velocity#

Параметр set_turn_velocity указывает роботу, с какой скоростью он должен поворачиваться. Более высокое значение в процентах приводит к более быстрому повороту робота, а более низкое — к более медленному.

Каждый проект начинается с того, что робот по умолчанию вращается со скоростью, составляющей 50% от его обычной скорости.

Примечание: Более высокая скорость приводит к более быстрому повороту робота, но может быть менее точной. Более низкая скорость приводит к более медленному повороту робота, но более точной его работе.

Usage:
drivetrain.set_turn_velocity(velocity)

Параметры

Описание

velocity

Скорость поворота от 0% до 100%.

# Build Used: Code Base 2.0
def main():
    # Turn at different velocities
    drivetrain.turn_for(RIGHT, 180)
    wait(1, SECONDS)
    # Turn fast
    drivetrain.set_turn_velocity(100)
    drivetrain.turn_for(RIGHT, 180)

# Start threads — Do not delete
start_thread(main)

set_stopping#

set_stopping задает способ остановки робота: торможение, движение по инерции или удержание.

Usage:
drivetrain.set_stopping(brake)

Параметры

Описание

brake

Как робот остановится:

  • BRAKE — Немедленно останавливается.
  • COAST — Замедляется до полной остановки.
  • HOLD — Немедленно останавливается и удерживает положение колес.

Если этот метод не используется, робот будет применять BRAKE при остановке.

# Build Used: Code Base 2.0
def main():
    # Drive, then coast to a stop
    drivetrain.set_drive_velocity(100)
    drivetrain.set_stopping(COAST)
    drivetrain.drive(FORWARD)
    wait(2, SECONDS)
    drivetrain.stop()

# Start threads — Do not delete
start_thread(main)

set_timeout#

Параметр set_timeout set_timeout задает время, в течение которого робот будет пытаться завершить движение. Если робот не сможет завершить движение за это время, он прекратит попытки и перейдет к следующей строке кода. Это предотвращает застревание робота на определенном этапе движения.

Usage:
drivetrain.set_timeout(value, units)

Параметры

Описание

value

Время, которое робот может потратить на завершение движения. Это может быть целое число или десятичная дробь.

units

Необязательно. Единица измерения времени: SECONDS (по умолчанию) или MSEC (MSEC).

# Build Used: Code Base 2.0
def main():
    # Drive as far as possible for 1 second before turning right
    drivetrain.set_timeout(1, SECONDS)
    drivetrain.drive_for(FORWARD, 25, INCHES)
    drivetrain.turn_for(RIGHT, 90)

# Start threads — Do not delete
start_thread(main)

set_heading#

Направление движения — это направление, в котором обращен мозг робота, измеряемое в градусах. set_heading изменяет текущее направление движения робота на новое значение.

Например, если робот повернулся вправо, установка направления на 0 градусов делает это положение, в котором робот повернулся вправо, новым значением 0 градусов. Затем робот может поворачиваться в другие положения, основываясь на этом новом направлении.

Usage:
drivetrain.set_heading(value)

Параметры

Описание

value

Значение направления в градусах, которое необходимо задать для робота. Это может быть целое число от 0 до 359.

# Build Used: Code Base 2.0
def main():
    # Face the new 0 degree heading
    drivetrain.set_heading(90)
    drivetrain.turn_to_heading(0)

# Start threads — Do not delete
start_thread(main)

set_rotation#

Вращение — это угол поворота робота, измеряемый в градусах. В начале проекта значение вращения устанавливается равным 0 градусам. Параметр set_rotation изменяет текущее значение вращения робота на новое значение.

Например, если робот совершил два полных оборота вправо, значение его вращения составит 720 градусов. Установка значения вращения на 0 градусов сбросит это значение с 720 до 0 градусов. Затем робот сможет совершать повороты, исходя из этого нового значения.

Usage:
drivetrain.set_rotation(value)

Параметры

Описание

value

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

# Build Used: Code Base 2.0
def main():
    # Spin counterclockwise two times
    drivetrain.set_rotation(720)
    drivetrain.turn_to_rotation(0)

# Start threads — Do not delete
start_thread(main)

Геттеры#

get_heading#

Направление движения — это угол, в котором обращен мозг робота, измеряемый в градусах. Функция get_heading ( get_heading возвращает это направление от 0 до 359 градусов.

Начальный курс робота составляет 0 градусов.

Диск VEX GO Brain показывает направления движения: 0 градусов вперед, 90 градусов вправо, 180 градусов назад и 270 градусов влево.

Usage:
drivetrain.get_heading()

Параметры

Описание

Этот метод не имеет параметров.

# Build Used: Code Base 2.0
def main():
    # Display the heading while turning
    monitor_sensor("drivetrain.get_heading")
    drivetrain.turn_for(RIGHT, 450)


# Start threads — Do not delete
start_thread(main)

get_rotation#

Вращение — это угол поворота робота, измеряемый в градусах. В начале проекта значение вращения устанавливается равным 0 градусам. Функция get_rotation ( get_rotation возвращает текущее значение вращения робота.

Поворот вправо увеличивает угол поворота, а поворот влево уменьшает его. Например, два полных оборота вправо вернут 720 градусов.

Кодовая база VEX GO 2.0, показывающая стрелки, вращающиеся вправо и влево. Левая стрелка показывает «минус», а правая — «плюс».

Usage:
drivetrain.get_rotation()

Параметры

Описание

Этот метод не имеет параметров.

# Build Used: Code Base 2.0
def main():
    # Display the rotation while turning
    monitor_sensor("drivetrain.get_rotation")
    drivetrain.turn_for(RIGHT, 450)


# Start threads — Do not delete
start_thread(main)

get_velocity#

get_velocity` возвращает скорость движения робота в процентах от -100% до 100%.

Положительное значение означает, что робот движется вперед. Отрицательное значение означает, что робот движется назад.

Usage:
drivetrain.get_velocity()

Параметры

Описание

Этот метод не имеет параметров.

# Build Used: Code Base 2.0
def main():
    # Display the velocity of the robot before and while moving
    console.print("Start: ")
    console.print(drivetrain.get_velocity())
    console.new_line()
    drivetrain.drive(FORWARD)
    wait(0.5, SECONDS)
    console.print("Moving: ")
    console.print(drivetrain.get_velocity())
    drivetrain.stop()


# Start threads — Do not delete
start_thread(main)

get_yaw#

Рыскание — это угол поворота робота влево или вправо от исходного положения, измеряемый в градусах. get_yaw возвращает текущее значение рыскания робота.

Поворот направо увеличивает значение рыскания, а поворот налево уменьшает значение рыскания.

Usage:
drivetrain.get_yaw()

Параметры

Описание

Этот метод не имеет параметров.

# Build Used: Super Code Base 2.0
def main():
    # Change the LED color based on the yaw while
    # moving the robot by hand
    monitor_sensor("drivetrain.get_yaw")
    while True:
        if drivetrain.get_yaw() > 0:
            bumper.set_color(GREEN)
        elif drivetrain.get_yaw() < 0:
            bumper.set_color(RED)
        else:
            bumper.set_color(NONE)

# Start threads — Do not delete
start_thread(main)

get_roll#

Крен — это угол наклона робота влево или вправо, измеряемый в градусах. get_roll возвращает текущее значение крена робота.

При взгляде на мозг вперед наклон влево увеличивает значение крена, а наклон вправо уменьшает значение крена.

Usage:
drivetrain.get_roll()

Параметры

Описание

Этот метод не имеет параметров.

# Build Used: Super Code Base 2.0
def main():
    # Change the LED color based on the roll while
    # moving the robot by hand
    monitor_sensor("drivetrain.get_roll")
    while True:
        if drivetrain.get_roll() > 0:
            bumper.set_color(GREEN)
        elif drivetrain.get_roll() < 0:
            bumper.set_color(RED)
        else:
            bumper.set_color(NONE)

# Start threads — Do not delete
start_thread(main)

get_pitch#

Угол наклона (тангаж) — это величина наклона робота вперед или назад, измеряемая в градусах. get_pitch возвращает текущее значение угла наклона робота.

При наклоне головного мозга вперед, наклон вперед увеличивает высоту тона, а наклон назад уменьшает высоту тона.

Usage:
drivetrain.get_pitch()

Параметры

Описание

Этот метод не имеет параметров.

# Build Used: Super Code Base 2.0
def main():
    # Change the LED color based on the pitch while
    # moving the robot by hand
    monitor_sensor("drivetrain.get_pitch")
    while True:
        if drivetrain.get_pitch() > 0:
            bumper.set_color(GREEN)
        elif drivetrain.get_pitch() < 0:
            bumper.set_color(RED)
        else:
            bumper.set_color(NONE)

# Start threads — Do not delete
start_thread(main)

get_crashed#

Функция get_crashed get_crashed возвращает значение логического типа (Boolean), указывающее, обнаружил ли робот столкновение.

  • True — Обнаружено столкновение.

  • False — Авария не обнаружена.

Usage:
drivetrain.get_crashed()

Параметры

Описание

Этот метод не имеет параметров.

# Build Used: Super Code Base 2.0
def main():
    # Drive until a crash
    drivetrain.drive(FORWARD)
    while not drivetrain.get_crashed():
        wait(50, MSEC)
    drivetrain.stop()
    drivetrain.turn_for(RIGHT, 90)

# Start threads — Do not delete
start_thread(main)

is_stopped#

is_stopped возвращает значение логического типа (Boolean), указывающее, завершил ли робот движение. Это можно использовать для управления временем выполнения других действий в зависимости от движения робота.

  • True — Робот завершил движение.

  • False — Робот всё ещё движется.

Этот метод работает совместно со следующими методами управления трансмиссией, имеющими параметр wait : drive_for, drive_until, turn_for, turn_to_heading и turn_to_rotation.

Usage:
drivetrain.is_stopped()

Параметры

Описание

Этот метод не имеет параметров.

# Build Used: Code Base 2.0
def main():
    # Turn when the drivetrain is done moving forward
    drivetrain.drive_for(FORWARD, 100, MM, wait=False)
    wait(0.25, SECONDS)
    while True:
        if drivetrain.is_stopped():
            drivetrain.turn_for(RIGHT, 180)
            break
        else:
            console.print("Still moving...")
            wait(0.1, SECONDS)
            console.clear()

# Start threads — Do not delete
start_thread(main)