Transmissão#
Introdução#
O sistema de transmissão inclui rodas e motores que controlam a forma como o robô se move e gira. Os sistemas de transmissão podem ser encontrados em projetos como o Code Base 2.0, o Super Car ou um robô personalizado.
Os sistemas de transmissão utilizam o Sensor Inercial no Cérebro para detetar colisões e ajudar o robô a mover-se e a rodar com precisão. No início de cada projeto, o sistema de transmissão calibra o Sensor Inercial automaticamente. Mantenha o robô imóvel durante cerca de 2 segundos durante a calibração, para que se possa mover e rodar corretamente.
Existem muitas formas de programar o sistema de transmissão. Abaixo está uma lista de todos os métodos de programação do sistema de transmissão:
Ações — Mova e rode o robô.
drive— Move o robô para a frente ou para trás para sempre.drive_for— Move o robô para a frente ou para trás uma distância específica.drive_until— Move o robô para a frente até que o sensor ocular detete um objeto ou o robô detete uma colisão.turn— Vira o robô para a esquerda ou para a direita para sempre.turn_for— Roda o robô para a esquerda ou para a direita de um número específico de graus.turn_to_heading— Roda o robô para enfrentar uma direção específica de -359 a 359 graus. O robô irá rodar na direção mais curta para alcançar a direção alvo.turn_to_rotation— Roda o robô para uma rotação específica.stop— Interrompe o movimento do robô.
Mutadores — Ajustam as definições da transmissão.
set_drive_velocity— Indica ao robô a velocidade de deslocação.set_turn_velocity— Indica ao robô a velocidade a que deve virar.set_stopping— Indica como o robô irá parar de se mover: travando, deslizando ou parando.set_timeout— Define durante quanto tempo o robô tentará terminar um movimento.set_heading— Altera a direção atual do robô para uma nova direção.set_rotation— Altera a rotação atual do robô para uma nova rotação.
Receptores — Verifiquem o estado de movimentação.
get_heading— Retorna a direção atual do robô de 0 a 359 graus.get_rotation— Retorna a rotação atual do robô.get_velocity— Retorna a velocidade de deslocação do robô, em percentagem de -100% a 100%.get_yaw— Retorna o yaw actual do robô.get_roll— Retorna o scroll atual do robô.get_pitch— Retorna o tom atual do robô.get_crashed— Retorna se o robô detetou uma colisão, como por exemplo um valor booleano.is_stopped— Retorna se o robô terminou de se mover, como um valor booleano.
Ações#
drive#
drive moves the robot forward or reverse forever. The robot will continue to move until it is given another action, like turning or stopping.
Usage:
drivetrain.drive(direction)
Parâmetros |
Descrição |
|---|---|
|
A direção em que o robô se move: |
# 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#
O comando drive_for move o robô para a frente ou para trás por uma distância específica.
Usage:
drivetrain.drive_for(direction, distance, units, wait)
Parâmetros |
Descrição |
|---|---|
|
A direção em que o robô se move: |
|
A distância percorrida pelo robô. Pode ser um número inteiro ou decimal. |
|
Opcional. A unidade de distância: |
|
Opcional. |
# 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 move o robô para a frente até que o sensor ocular detete um objeto ou o robô detete uma colisão.
Usage:
drivetrain.drive_until(condition, wait)
Parâmetros |
Descrição |
|---|---|
|
A condição que para o robô: |
|
Opcional. |
# 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#
O comando turn o robô vire para a esquerda ou para a direita indefinidamente. O robô continuará a virar até receber outra ação, como conduzir ou parar.
Usage:
drivetrain.turn(direction)
Parâmetros |
Descrição |
|---|---|
|
Direção para a qual o robô vira: |
# 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#
O comando turn_for roda o robô para a esquerda ou para a direita num número específico de graus. A rotação é relativa à posição atual do robô.
Usage:
drivetrain.turn_for(direction, angle, wait)
Parâmetros |
Descrição |
|---|---|
|
Direção para a qual o robô vira: |
|
O número de graus que o robô roda. Pode ser um número inteiro ou decimal. |
|
Opcional. |
# 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#
A direção é a direção para a qual o cérebro do robô está a apontar, medida em graus. turn_to_heading roda o robô para apontar para uma direção específica de -359 a 359 graus. O robô irá rodar na direção mais curta para alcançar a direção desejada.
A direção inicial é de 0 graus.

Usage:
drivetrain.turn_to_heading(angle, wait)
Parâmetros |
Descrição |
|---|---|
|
A direção para a qual o robô deve estar virado, expressa como um número inteiro, de -359 a 359 graus. |
|
Opcional. |
# 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 roda o robô para uma rotação específica.
A rotação é o quanto o robô rodou, medida em graus. No início de um projeto, o valor de rotação é definido como 0 graus. A rotação também pode ser definida utilizando set_rotation.
Os valores de rotação são absolutos. Isto significa que a direção da viragem depende da rotação atual do robô. Virar para a direita aumenta a rotação, e virar para a esquerda diminui a rotação.
Por exemplo, se o robô começar a 0 graus e rodar 720 graus, este irá virar para a direita duas vezes. Se depois rodar 360 graus, virará para a esquerda uma vez, porque 360 é inferior a 720.

Usage:
drivetrain.turn_to_rotation(angle, wait)
Parâmetros |
Descrição |
|---|---|
|
O valor de rotação, em graus, para o qual o robô irá rodar. Pode ser um número inteiro. |
|
Opcional. |
# 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 pára o movimento do robô.
Usage:
drivetrain.stop()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# 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)
Mutantes#
set_drive_velocity#
O parâmetro set_drive_velocity ( set_drive_velocity define a velocidade de deslocação do robô. Uma percentagem mais elevada faz com que o robô se desloque mais rapidamente, enquanto uma percentagem mais baixa o faz deslocar-se mais lentamente.
Todos os projetos começam com o robô a deslocar-se a 50% da velocidade por defeito.
Nota: Uma velocidade mais elevada faz com que o robô se mova mais rapidamente, mas pode ser menos preciso. Uma velocidade mais baixa faz com que o robô se mova mais devagar, mas seja mais preciso.
Usage:
drivetrain.set_drive_velocity(velocity)
Parâmetros |
Descrição |
|---|---|
|
A velocidade de condução varia entre 0% a 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#
O parâmetro set_turn_velocity define a velocidade de rotação do robô. Uma percentagem mais elevada faz com que o robô gire mais rápido, enquanto uma percentagem mais baixa faz com que o robô gire mais devagar.
Todos os projetos começam com o robô a rodar a 50% da velocidade por defeito.
Nota: Uma velocidade mais elevada faz com que o robô gire mais rápido, mas pode ser menos preciso. Uma velocidade mais baixa faz com que o robô gire mais devagar, mas seja mais preciso.
Usage:
drivetrain.set_turn_velocity(velocity)
Parâmetros |
Descrição |
|---|---|
|
A velocidade de rotação varia entre 0% a 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 define a forma como o robô irá parar de se mover: travando, deslizando ou parando.
Usage:
drivetrain.set_stopping(brake)
Parâmetros |
Descrição |
|---|---|
|
Como o robot irá parar:
|
Caso este método não seja utilizado, o robô utilizará BRAKE ao parar.
# 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#
O parâmetro set_timeout set_timeout define durante quanto tempo o robô tentará completar um movimento. Se o robô não conseguir completar dentro deste tempo, interromperá a tentativa e passará para a linha de código seguinte. Isto evita que o robô fique preso num movimento.
Usage:
drivetrain.set_timeout(value, units)
Parâmetros |
Descrição |
|---|---|
|
O tempo que o robô pode tentar para completar um movimento. Pode ser um número inteiro ou decimal. |
|
Opcional. A unidade de tempo: |
# 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#
A direção é a direção para a qual o cérebro do robô está a apontar, medida em graus. set_heading altera a direção atual do robô para um novo valor de direção.
Por exemplo, se o robô se virou para a direita, definir a direção para 0 graus faz com que essa posição virada para a direita se torne os novos 0 graus. De seguida, o robô pode rodar para outras posições com base nessa nova direção.
Usage:
drivetrain.set_heading(value)
Parâmetros |
Descrição |
|---|---|
|
O valor da direção, em graus, a definir para o robô. Pode ser um número inteiro de 0 a 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#
A rotação indica o quanto o robô rodou, medida em graus. No início de um projeto, o valor de rotação é definido como 0 graus. O comando set_rotation altera a rotação actual do robô para um novo valor.
Por exemplo, se o robô tiver dado duas voltas completas para a direita, o seu valor de rotação será de 720 graus. Definir a rotação para 0 graus irá repor essa rotação de 720 para 0 graus. De seguida, o robô poderá rodar para rotações baseadas nesse novo valor.
Usage:
drivetrain.set_rotation(value)
Parâmetros |
Descrição |
|---|---|
|
O valor de rotação, em graus, a definir para o robô. Pode ser um número inteiro. |
# 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)
Getters#
get_heading#
A direção (heading) é a direção para a qual o cérebro do robô está a apontar, medida em graus. get_heading devolve esta direcção, variando de 0 a 359 graus.
A direção inicial do robô é de 0 graus.

Usage:
drivetrain.get_heading()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# 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#
A rotação indica o quanto o robô rodou, medida em graus. No início de um projeto, o valor de rotação é definido como 0 graus. get_rotation devolve a rotação actual do robô.
Virar para a direita aumenta a rotação, e virar para a esquerda diminui a rotação. Por exemplo, duas voltas completas para a direita resultarão numa rotação de 720 graus.

Usage:
drivetrain.get_rotation()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# 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 devolve a velocidade de deslocamento do robô, em percentagem, de -100% a 100%.
Um valor positivo significa que o robô se está a mover para a frente. Um valor negativo significa que o robô se está a mover para trás.
Usage:
drivetrain.get_velocity()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# 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#
O yaw indica o quanto o robô rodou para a esquerda ou para a direita a partir da sua posição inicial, medido em graus. get_yaw get_yaw devolve o valor actual.
Virar para a direita aumenta o valor de guinada, e virar para a esquerda diminui o valor de guinada.
Usage:
drivetrain.get_yaw()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# 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#
A inclinação (roll) indica o quanto o robô se inclina para a esquerda ou para a direita, medida em graus. get_roll devolve o valor actual da inclinação (roll) do robô.
Com o cérebro virado para a frente, inclinar para a esquerda aumenta o valor da rotação, e inclinar para a direita diminui o valor da rotação.
Usage:
drivetrain.get_roll()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# 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#
O parâmetro pitch indica o quanto o robô se inclina para a frente ou para trás, medido em graus. get_pitch get_pitch devolve o valor actual do pitch do robô.
Com o cérebro virado para a frente, inclinar-se para a frente aumenta o valor do tom, e inclinar-se para trás diminui o valor do tom.
Usage:
drivetrain.get_pitch()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# 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 retorna se o robô detetou uma colisão, como por exemplo um valor booleano.
True— Foi detectada uma avaria.False— Não foi detectada qualquer falha.
Usage:
drivetrain.get_crashed()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# 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#
O valor is_stopped is_stopped` devolve um valor booleano indicando se o robô terminou de se mover. Isto pode ser utilizado para controlar o tempo de outras ações com base no movimento do robô.
True— O robô terminou de se mover.False— O robô ainda se está a mover.
Este método funciona em conjunto com os seguintes métodos de transmissão que têm o parâmetro wait : drive_for, drive_until, turn_for, turn_to_heading, e turn_to_rotation.
Usage:
drivetrain.is_stopped()
Parâmetros |
Descrição |
|---|---|
Este método não tem parâmetros. |
# 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)