Pular para o conteúdo
Português (Brasil)

LIDAR

O lidar mede distâncias em metros ao redor de todo o robô, como se fossem muitos sensores de distância ao mesmo tempo. No robô inicial, ele se chama lidar e fica em cima do robô.

Ele mede 512 pontos ao redor do robô, em 4 camadas empilhadas umas sobre as outras, até 1 m de distância. Um ponto que não atinge nada vale inf.

getLayerRangeImage(0) fornece as 512 distâncias de uma camada. A primeira fica na frente do robô, e elas seguem no sentido horário: um quarto do caminho fica à direita, a metade fica atrás e três quartos ficam à esquerda.

Os pontos de uma camada do lidar ao redor do robô: 0 na frente, 128 à direita, 256 atrás e 384 à esquerda

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 é uma camada medida pelo robô inicial em world1.wbt, desenhada vista de cima, com o robô no centro. As paredes ao redor aparecem como linhas de pontos.

Uma camada do lidar vista de cima: as paredes ao redor do robô como linhas de pontos

O lidar também pode fornecer cada ponto como uma posição relativa ao lidar, o que é útil para desenhar um mapa do que o robô vê. Calcular isso leva mais tempo, então ative apenas se for usar.

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)