Lewati ke konten
Bahasa Indonesia

LIDAR

Lidar mengukur jarak dalam meter di sekeliling robot, seperti banyak sensor jarak sekaligus. Pada robot pemula, namanya lidar, dan letaknya di atas robot.

Lidar mengukur 512 titik di sekeliling robot, dalam 4 lapisan yang bertumpuk, hingga sejauh 1 m. Titik yang tidak mengenai apa pun bernilai inf.

getLayerRangeImage(0) memberikan 512 jarak dari satu lapisan. Jarak pertama berada di depan robot, dan urutannya searah jarum jam: titik di seperempat putaran ada di kanan, di setengah putaran ada di belakang, dan di tiga perempat putaran ada di kiri.

Titik-titik satu lapisan lidar di sekeliling robot: 0 di depan, 128 di kanan, 256 di belakang, dan 384 di kiri

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))

Berikut satu lapisan yang diukur robot pemula di world1.wbt, digambar dari atas dengan robot di tengahnya. Dinding di sekelilingnya tampak sebagai deretan titik.

Satu lapisan lidar dilihat dari atas: dinding di sekeliling robot berupa deretan titik

Lidar juga bisa memberikan setiap titik sebagai posisi relatif terhadap lidar, yang berguna untuk menggambar peta dari apa yang dilihat robot. Perhitungannya butuh waktu tambahan, jadi aktifkan hanya jika kamu menggunakannya.

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)