İçeriğe geç
Türkçe
Bu, artık en yeni sürüm olmayan Erebus v26 belgeleridir.En yeni belgeleri görün

RGB kamera

Kamera, önündekilerin görüntüsünü verir. Duvar işaretlerini bulmak ve okumak için kameraya ihtiyacın var. Başlangıç robotunda camera adında, 64 × 40 piksellik bir kamera vardır.

Bir görüntü, piksellerden oluşan bir ızgaradır. Her pikselin 0 ile 255 arasında bir kırmızı, yeşil ve mavi değeri vardır; (0, 0, 0) siyah, (255, 255, 255) beyazdır.

from controller import Robot
robot = Robot()
timeStep = int(robot.getBasicTimeStep())
camera = robot.getDevice("camera")
camera.enable(timeStep)
width = camera.getWidth()
height = camera.getHeight()
print("The camera has", width, "x", height, "pixels")
while robot.step(timeStep) != -1:
image = camera.getImage()
# The colour of the pixel in the center of the image
r = camera.imageGetRed(image, width, width // 2, height // 2)
g = camera.imageGetGreen(image, width, width // 2, height // 2)
b = camera.imageGetBlue(image, width, width // 2, height // 2)
print("Center:", r, g, b)

OpenCV, görüntü işlemeye yarayan bir kütüphanedir: şekilleri bulur, renkleri karşılaştırır ve çok daha fazlasını yapar. Webots görüntülerinde piksel başına BGRA sırasıyla 4 değer bulunur ve OpenCV bunları doğrudan kullanabilir. Bu program görüntüyü ve parlak kısımlarını iki pencerede gösterir:

from controller import Robot
import cv2
import numpy as np
robot = Robot()
timeStep = int(robot.getBasicTimeStep())
camera = robot.getDevice("camera")
camera.enable(timeStep)
while robot.step(timeStep) != -1:
# Webots images have 4 channels per pixel, in BGRA order
image = np.frombuffer(camera.getImage(), np.uint8).reshape((camera.getHeight(), camera.getWidth(), 4))
frame = cv2.cvtColor(image, cv2.COLOR_BGRA2BGR)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY) # Bright parts in white
cv2.imshow("camera", cv2.resize(frame, None, fx=4, fy=4, interpolation=cv2.INTER_NEAREST))
cv2.imshow("threshold", cv2.resize(thresh, None, fx=4, fy=4, interpolation=cv2.INTER_NEAREST))
cv2.waitKey(1) # Shows the windows

Solda, başlangıç robotunun kamerasının bir harf kazazedenin önündeki görüntüsü; sağda ise bu programın bulduğu parlak kısımları.

Bir harf kazazedenin kamera görüntüsü ve beyazla gösterilen parlak kısımları

Bunun gibi pencereler evde test yapmak içindir: yarışmada onları kapat.

Yüksek çözünürlüklü kameralar işaretleri daha uzaktan görür, ama bütçeden daha fazla harcar ve görüntülerinin işlenmesi daha uzun sürer. Her kameranın çözünürlüğünü Robot Customizer içinde seçersin.