Трансмиссия#
Введение#
В состав приводной системы входят колеса и двигатели, которые управляют движением и поворотами робота. Приводные системы можно найти в таких моделях, как 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 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 ( 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 ( 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#
Рыскание — это угол поворота робота влево или вправо от исходного положения, измеряемый в градусах. 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)