Ir al contenido
Español

Movimiento

El robot tiene dos ruedas, cada una con su propio motor: left wheel motor y right wheel motor en el robot inicial. Lo conduces ajustando la velocidad de cada rueda:

Rueda izquierda Rueda derecha El robot…
Adelante Adelante Avanza
Atrás Atrás Retrocede
Atrás Adelante Gira sobre sí mismo a la izquierda
Adelante Atrás Gira sobre sí mismo a la derecha
Rápida Lenta Describe una curva a la derecha

El robot avanzando, retrocediendo, girando sobre sí mismo a la izquierda y a la derecha, y describiendo una curva a la derecha, con una flecha para la velocidad de cada rueda

Las velocidades están en radianes por segundo, hasta 6,28 (una vuelta de rueda por segundo). Las velocidades negativas hacen girar la rueda hacia atrás.

  1. Obtén cada motor por su nombre.
  2. Pon su posición en infinito, para que gire sin límite.
  3. Ajusta su velocidad.

Los motores mantienen la última velocidad que ajustaste, así que el robot sigue moviéndose mientras tu programa hace otras cosas. Este programa avanza, retrocede y gira sobre sí mismo a la izquierda, durante un segundo cada vez:

from controller import Robot
robot = Robot()
timeStep = int(robot.getBasicTimeStep())
maxSpeed = 6.28 # The maximum speed of the wheels, in radians per second
leftWheel = robot.getDevice("left wheel motor")
rightWheel = robot.getDevice("right wheel motor")
leftWheel.setPosition(float("inf"))
rightWheel.setPosition(float("inf"))
def drive(left, right, seconds):
# Set the speed of each wheel, and keep it for some time
leftWheel.setVelocity(left)
rightWheel.setVelocity(right)
start = robot.getTime()
while robot.step(timeStep) != -1:
if robot.getTime() - start >= seconds:
break
drive(maxSpeed, maxSpeed, 1.0) # Forward
drive(-maxSpeed, -maxSpeed, 1.0) # Backward
drive(-2.0, 2.0, 1.0) # Spin to the left
drive(0, 0, 0.1) # Stop
print("Done")

Cada motor tiene un sensor de posición, también llamado encoder, que cuenta cuánto ha girado la rueda, en radianes. Es útil para recorrer una distancia fija. Girar hacia atrás hace que la cuenta baje.

from controller import Robot
robot = Robot()
timeStep = int(robot.getBasicTimeStep())
leftWheel = robot.getDevice("left wheel motor")
rightWheel = robot.getDevice("right wheel motor")
leftWheel.setPosition(float("inf"))
rightWheel.setPosition(float("inf"))
# Each wheel has a position sensor, which counts how far it has turned
leftEncoder = leftWheel.getPositionSensor()
rightEncoder = rightWheel.getPositionSensor()
leftEncoder.enable(timeStep)
rightEncoder.enable(timeStep)
robot.step(timeStep) # Step once, so that the sensors have a value
start = leftEncoder.getValue()
leftWheel.setVelocity(5.0)
rightWheel.setVelocity(5.0)
while robot.step(timeStep) != -1:
turned = leftEncoder.getValue() - start
if turned > 10.0: # Stop after 10 radians
break
leftWheel.setVelocity(0)
rightWheel.setVelocity(0)
print("Left wheel:", round(leftEncoder.getValue() - start, 2), "rad")

Controlar un movimiento por tiempo es sencillo, pero el resultado cambia con la velocidad. Los encoders miden el propio movimiento, así que son más fiables. Para giros precisos, el giroscopio es todavía mejor.

A continuación, aprende a leer los sensores.