Ir al contenido
Español

LIDAR

El lidar mide distancias en metros alrededor de todo el robot, como muchos sensores de distancia a la vez. En el robot inicial se llama lidar y está encima del robot.

Mide 512 puntos alrededor del robot, en 4 capas apiladas una encima de otra, hasta 1 m de distancia. Un punto que no alcanza nada devuelve inf.

getLayerRangeImage(0) da las 512 distancias de una capa. La primera está delante del robot, y van en el sentido de las agujas del reloj: a un cuarto del recorrido está la derecha, a la mitad está detrás, y a tres cuartos está la izquierda.

Los puntos de una capa del lidar alrededor del robot: 0 delante, 128 a la derecha, 256 detrás y 384 a la izquierda

from controller import Robot
robot = Robot()
timeStep = int(robot.getBasicTimeStep())
lidar = robot.getDevice("lidar")
lidar.enable(timeStep)
n = lidar.getHorizontalResolution() # Number of points in each layer
print("Points per layer:", n, "Layers:", lidar.getNumberOfLayers())
while robot.step(timeStep) != -1:
distances = lidar.getLayerRangeImage(0) # One layer, in meters, clockwise from the front
front = distances[0]
right = distances[n // 4]
back = distances[n // 2]
left = distances[3 * n // 4]
print("front:", round(front, 3), "right:", round(right, 3), "back:", round(back, 3), "left:", round(left, 3))

Esta es una capa medida por el robot inicial en world1.wbt, dibujada desde arriba con el robot en el centro. Las paredes que lo rodean aparecen como líneas de puntos.

Una capa del lidar vista desde arriba: las paredes alrededor del robot como líneas de puntos

El lidar también puede dar cada punto como una posición relativa al lidar, lo que es útil para dibujar un mapa de lo que ve el robot. Calcularlo lleva tiempo extra, así que actívalo solo si lo usas.

from controller import Robot
robot = Robot()
timeStep = int(robot.getBasicTimeStep())
lidar = robot.getDevice("lidar")
lidar.enable(timeStep)
lidar.enablePointCloud() # Computing the point cloud takes extra time
while robot.step(timeStep) != -1:
points = lidar.getPointCloud()
point = points[0] # Positions relative to the lidar, in meters
print("x:", round(point.x, 3), "y:", round(point.y, 3), "z:", round(point.z, 3), "layer:", point.layer)