Zum Inhalt springen
Deutsch

RGB-Kamera

Die Kamera liefert ein Bild von dem, was vor ihr liegt. Du brauchst sie, um Wandmarkierungen zu finden und zu lesen. Der Starter-Roboter hat eine Kamera namens camera mit 64 × 40 Pixeln.

Ein Bild ist ein Raster aus Pixeln. Jedes hat einen Rot-, Grün- und Blauwert von 0 bis 255, wobei (0, 0, 0) Schwarz und (255, 255, 255) Weiß ist.

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 ist eine Bibliothek zur Bildverarbeitung: Formen finden, Farben vergleichen und vieles mehr. Webots-Bilder haben 4 Werte pro Pixel in der Reihenfolge BGRA, die OpenCV direkt verwenden kann. Dieses Programm zeigt das Bild und seine hellen Bereiche in zwei Fenstern an:

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

Links ein Bild der Kamera des Starter-Roboters vor einem Buchstabenopfer, rechts seine hellen Bereiche, so wie dieses Programm sie findet.

Ein Kamerabild eines Buchstabenopfers und seine hellen Bereiche in Weiß

Fenster wie diese sind zum Testen zu Hause gedacht: Schalte sie für den Wettbewerb ab.

Höhere Auflösungen erkennen Markierungen aus größerer Entfernung, kosten aber mehr und brauchen länger zur Verarbeitung. Die Auflösung jeder Kamera wählst du im Robot Customizer.