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

Câmera RGB

A câmera fornece uma imagem do que está à sua frente. Você precisa dela para encontrar e ler os marcadores nas paredes. O robô inicial tem uma câmera, chamada camera, de 64 × 40 pixels.

Uma imagem é uma grade de pixels. Cada um tem um valor de vermelho, verde e azul de 0 a 255, em que (0, 0, 0) é preto e (255, 255, 255) é branco.

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)

O OpenCV é uma biblioteca para processar imagens: encontrar formas, comparar cores e muito mais. As imagens do Webots têm 4 valores por pixel, na ordem BGRA, que o OpenCV consegue usar diretamente. Este programa mostra a imagem e as partes claras dela em duas janelas:

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

À esquerda, uma imagem da câmera do robô inicial diante de uma vítima de letra. À direita, as partes claras dela, do jeito que este programa as encontra.

Uma imagem da câmera de uma vítima de letra e as partes claras dela em branco

Janelas como essas servem para testar em casa: desative-as na competição.

Resoluções maiores enxergam os marcadores de mais longe, mas custam mais e demoram mais para processar. Você escolhe a resolução de cada câmera no Robot Customizer.