Aller au contenu
Français

Capteur de position

Le capteur de position, ou GPS, donne la position du robot en mètres. Sur le robot de départ, il s’appelle gps. Vous en avez besoin pour signaler les marqueurs muraux, et il aide beaucoup à explorer méthodiquement.

getValues() renvoie [x, y, z]. X et Z sont horizontaux, et Y est vertical : utilisez donc X et Z pour la position dans le labyrinthe :

Les axes X et Z du plan horizontal, avec 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))

Le GPS a un bruit de quelques millimètres : les valeurs varient donc légèrement même quand le robot est immobile. Ne testez jamais l’égalité exacte de deux positions.

Ce programme avance jusqu’à ce que le robot soit à une demi-case de son point de départ :

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