Desbravando o PyBricks: Programando o SPIKE Prime em Python do Zero
Aula

Objetivo da aula

  • Compreender o que é o DriveBase e como ele controla o robô como um todo.
  • Aprender a configurar o DriveBase com as dimensões do seu robô (rodas e eixo).
  • Executar movimentos precisos usando straight() e turn().
  • Introduzir a lógica de calibração e repetibilidade dos movimentos.

1) O que é o DriveBase?

O DriveBase é uma classe do PyBricks que transforma dois motores independentes (esquerdo e direito)
em um sistema único de locomoção.
Ele permite programar o robô usando comandos de distância (mm) e ângulo (°),
sem precisar calcular manualmente quantas rotações cada motor deve fazer.

Em resumo: o DriveBase faz o robô se comportar como um “carro”, com comandos de ir reto, virar e parar.

2) Configuração inicial

Para criar o DriveBase, você precisa informar:

  • Os motores usados nas rodas esquerda e direita.
  • O diâmetro da roda (em mm).
  • A distância entre as rodas (de centro a centro, em mm).
from pybricks.hubs import PrimeHub
from pybricks.pupdevices import Motor
from pybricks.parameters import Port
from pybricks.robotics import DriveBase
from pybricks.tools import wait

hub = PrimeHub()

motorE = Motor(Port.A)
motorD = Motor(Port.B)

wheel_diameter = 56   # mm
axle_track = 120      # mm (distância entre rodas)

robot = DriveBase(motorE, motorD, wheel_diameter, axle_track)

Esse trecho “ensina” o PyBricks o tamanho físico do seu robô, permitindo que ele converta automaticamente
milímetros em rotações e graus de giro de forma precisa.

3) Movendo o robô em linha reta

O comando robot.straight(distancia) move o robô para frente (valores positivos) ou para trás (negativos),
medindo a distância em milímetros.

robot.straight(300)   # anda 300 mm para frente
wait(500)
robot.straight(-150)  # anda 150 mm para trás

4) Fazendo o robô virar

O comando robot.turn(ângulo) faz o robô girar sobre o próprio eixo.

  • Ângulo positivo → gira para a direita.
  • Ângulo negativo → gira para a esquerda.
robot.turn(90)     # gira 90° para a direita
wait(500)
robot.turn(-45)    # gira 45° para a esquerda
Importante: o valor em graus não é o giro de cada roda, e sim o ângulo de rotação do robô inteiro.

5) Parando o robô com precisão

Após um movimento, você pode definir como o robô deve parar:

  • robot.stop() — para o robô (modo padrão BRAKE).
  • robot.stop(Stop.HOLD) — trava os motores na posição final.
  • robot.stop(Stop.COAST) — deixa rolar livremente até parar.
robot.straight(500)
robot.stop(Stop.HOLD)

6) Ajustando a velocidade

A velocidade do DriveBase é controlada com robot.settings().
Você pode definir:

  • Velocidade linear (mm/s)
  • Velocidade angular (°/s)
robot.settings(straight_speed=250, turn_rate=90)
robot.straight(400)
robot.turn(180)

Isso é essencial para calibrar a precisão das missões: velocidades menores aumentam a estabilidade; maiores reduzem tempo, mas geram mais variação.

7) Repetindo trajetórias com funções

Podemos combinar os movimentos em funções reutilizáveis para criar sequências de missão mais limpas:

def missao_1():
    robot.settings(straight_speed=250, turn_rate=90)
    robot.straight(300)
    robot.turn(45)
    robot.straight(150)
    robot.stop(Stop.HOLD)

missao_1()

Essa prática é essencial em torneios: o código fica mais organizado e fácil de ajustar sem afetar outras partes.

8) Calibração e consistência

Para movimentos precisos, a calibração do DriveBase é fundamental.

  • Verifique se as rodas têm o mesmo diâmetro e estão bem presas.
  • Evite cabos enroscados — eles puxam o robô para um lado.
  • Calibre o valor de wheel_diameter até que o robô percorra a distância exata programada.
  • Evite acelerações bruscas — use robot.settings() para suavizar movimentos.
Dica de calibragem:
Programe robot.straight(500), meça o quanto o robô andou, e corrija o wheel_diameter proporcionalmente.

Atividade prática

  1. Monte o DriveBase com as dimensões do seu robô.
  2. Faça o robô andar 300 mm, virar 90°, e voltar ao ponto inicial.
  3. Experimente velocidades diferentes e observe o impacto na precisão.
  4. Crie uma função quadrado() que faça o robô andar em formato de quadrado (4 lados de 200 mm).