Трансмісія#

Вступ#

Трансмісія включає колеса та двигуни, які керують тим, як робот їздить та повертається. Трансмісії можна знайти в таких збірках, як 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 встановлює час, протягом якого робот намагатиметься завершити рух. Якщо робот не зможе завершити його за цей час, він припинить спроби та перейде до наступного рядка коду. Це запобігає зависанню робота на русі.

Usage:
drivetrain.set_timeout(value, units)

Параметри

Опис

value

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

units

Необов’язково. Одиниця часу: SECONDS (за замовчуванням) або 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 повертає цей курс від 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 повертає поточне обертання робота.

Поворот праворуч збільшує обертання, а поворот ліворуч зменшує. Наприклад, два повних оберти праворуч повернуть обертання на 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#

Значення кута повороту робота по вертикалі (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 повертає, чи виявив робот аварію, у вигляді логічного значення.

  • 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 повертає, чи завершив рух робот, у вигляді логічного значення. Це можна використовувати для керування часом інших дій на основі руху робота.

  • 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)