Трансмісія#
Вступ#
Трансмісія включає колеса та двигуни, які керують тим, як робот їздить та повертається. Трансмісії можна знайти в таких збірках, як 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)
Параметри |
Опис |
|---|---|
|
Напрямок руху робота: |
# 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)
Параметри |
Опис |
|---|---|
|
Напрямок руху робота: |
|
Відстань, яку проїжджає робот. Це може бути ціле або десяткове число. |
|
Необов’язково. Одиниця вимірювання відстані: |
|
Необов’язково. |
# 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)
Параметри |
Опис |
|---|---|
|
Умова, яка зупиняє робота: |
|
Необов’язково. |
# 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)
Параметри |
Опис |
|---|---|
|
Напрямок повороту робота: |
# 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)
Параметри |
Опис |
|---|---|
|
Напрямок повороту робота: |
|
Кількість градусів, на яку повертається робот. Це може бути ціле або десяткове число. |
|
Необов’язково. |
# 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 градусів.

Usage:
drivetrain.turn_to_heading(angle, wait)
Параметри |
Опис |
|---|---|
|
Напрямок, куди має бути повернутий робот, у вигляді цілого числа від -359 до 359 градусів. |
|
Необов’язково. |
# 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.

Usage:
drivetrain.turn_to_rotation(angle, wait)
Параметри |
Опис |
|---|---|
|
Значення повороту в градусах, до якого повернеться робот. Це може бути ціле число. |
|
Необов’язково. |
# 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)
Параметри |
Опис |
|---|---|
|
Швидкість руху від 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)
Параметри |
Опис |
|---|---|
|
Швидкість повороту від 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 під час зупинки.
# 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)
Параметри |
Опис |
|---|---|
|
Кількість часу, протягом якого робот може намагатися завершити рух. Це може бути ціле число або десятковий дріб. |
|
Необов’язково. Одиниця часу: |
# 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)
Параметри |
Опис |
|---|---|
|
Значення курсу в градусах, яке потрібно встановити для робота. Це може бути ціле число від 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)
Параметри |
Опис |
|---|---|
|
Значення обертання в градусах, яке потрібно встановити для робота. Це може бути ціле число. |
# 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 градусів.

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 градусів.

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)