Ir al contenido
Español

Sensor de posición

El sensor de posición, o GPS, da la posición del robot en metros. En el robot inicial se llama gps. Lo necesitas para informar de las marcas en las paredes, y ayuda mucho a explorar de forma sistemática.

getValues() devuelve [x, y, z]. X y Z son horizontales e Y es vertical, así que usa X y Z para la posición en el laberinto:

Los ejes X y Z del plano horizontal, con Y vertical

from controller import Robot
robot = Robot()
timeStep = int(robot.getBasicTimeStep())
gps = robot.getDevice("gps")
gps.enable(timeStep)
while robot.step(timeStep) != -1:
x, y, z = gps.getValues() # In meters. X and Z are horizontal, Y is vertical.
print("x:", round(x, 3), "z:", round(z, 3))

El GPS tiene un ruido de unos pocos milímetros, así que los valores cambian ligeramente incluso cuando el robot está quieto. Nunca compares posiciones buscando una igualdad exacta.

Este programa avanza hasta que el robot está a media baldosa de donde empezó:

from controller import Robot
import math
robot = Robot()
timeStep = int(robot.getBasicTimeStep())
gps = robot.getDevice("gps")
gps.enable(timeStep)
leftWheel = robot.getDevice("left wheel motor")
rightWheel = robot.getDevice("right wheel motor")
leftWheel.setPosition(float("inf"))
rightWheel.setPosition(float("inf"))
robot.step(timeStep) # Step once, so that the GPS has a value
startX, _, startZ = gps.getValues()
leftWheel.setVelocity(3.0)
rightWheel.setVelocity(3.0)
while robot.step(timeStep) != -1:
x, _, z = gps.getValues()
distance = math.sqrt((x - startX) ** 2 + (z - startZ) ** 2)
print("Distance from the start:", round(distance, 3), "m")
if distance > 0.06: # Half a tile
leftWheel.setVelocity(0)
rightWheel.setVelocity(0)
break