İçeriğe geç
Türkçe

LIDAR

Lidar, aynı anda çalışan çok sayıda mesafe sensörü gibi, robotun çevresindeki mesafeleri metre cinsinden ölçer. Başlangıç robotunda robotun üstündedir ve adı lidar’dır.

Lidar, robotun çevresinde üst üste dizilmiş 4 katmanda, 1 m uzaklığa kadar 512 nokta ölçer. Hiçbir şeye çarpmayan bir noktanın değeri inf olur.

getLayerRangeImage(0), bir katmanın 512 mesafesini verir. İlk değer robotun önüne aittir ve değerler saat yönünde ilerler: dizinin dörtte biri sağa, yarısı arkaya, dörtte üçü sola karşılık gelir.

Bir lidar katmanının robotun çevresindeki noktaları: 0 önde, 128 sağda, 256 arkada ve 384 solda

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

Aşağıda, başlangıç robotunun world1.wbt içinde ölçtüğü bir katman, robot ortada olacak şekilde yukarıdan çizilmiştir. Çevresindeki duvarlar nokta dizileri olarak görünür.

Yukarıdan görülen bir lidar katmanı: robotun çevresindeki duvarlar nokta dizileri olarak

Lidar her noktayı lidara göre bir konum olarak da verebilir; bu, robotun gördüklerinin haritasını çizmek için kullanışlıdır. Nokta bulutunu hesaplamak ek zaman aldığı için onu yalnızca kullanacaksan etkinleştir.

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)