Lewati ke konten
Bahasa Indonesia

Sensor warna

Sensor warna melihat ke lantai, jadi sensor ini memberi tahu robot tentang lubang, rawa, dan lorong penghubung. Sensor ini adalah kamera satu piksel yang menghadap ke bawah. Pada robot pemula, namanya color, dan letaknya di bagian depan robot, agar bisa melihat lubang sebelum roda mencapainya.

from controller import Robot
robot = Robot()
timeStep = int(robot.getBasicTimeStep())
colorSensor = robot.getDevice("color")
colorSensor.enable(timeStep)
while robot.step(timeStep) != -1:
image = colorSensor.getImage() # A single pixel
r = colorSensor.imageGetRed(image, 1, 0, 0)
g = colorSensor.imageGetGreen(image, 1, 0, 0)
b = colorSensor.imageGetBlue(image, 1, 0, 0)
print("r:", r, "g:", g, "b:", b)

Nilai-nilai ini diukur dengan robot pemula di world2.wbt:

Lantai Merah Hijau Biru
Normal 252 252 252
Rawa 245 222 142
Lorong penghubung Area 1 dan 2 (biru) 91 91 255
Lorong penghubung Area 2 dan 3 (ungu) 193 91 251
Lorong penghubung Area 1 dan 4 (hijau) 48 255 48
Lorong penghubung Area 3 dan 4 (merah) 255 91 91

Lubang punya tepi hitam, jadi lantai menjadi gelap tepat sebelum lubang. Bagi sensor ini, checkpoint terlihat hampir sama dengan lantai normal, jadi lakukan kalibrasi pada salah satu checkpoint di world-mu.

Program ini membuat robot maju, mencetak jenis lantai setiap kali berubah, dan berhenti jika melihat lubang:

from controller import Robot
robot = Robot()
timeStep = int(robot.getBasicTimeStep())
colorSensor = robot.getDevice("color")
colorSensor.enable(timeStep)
leftWheel = robot.getDevice("left wheel motor")
rightWheel = robot.getDevice("right wheel motor")
leftWheel.setPosition(float("inf"))
rightWheel.setPosition(float("inf"))
def floorType(r, g, b):
# Tune these ranges for your own robot and worlds
brightness = (r + g + b) / 3
if brightness < 80:
return "hole"
if r > 220 and g > 200 and b < 190:
return "swamp"
if b > 220 and g < 130:
return "purple passage" if r > 150 else "blue passage"
if r > 220 and g < 130 and b < 130:
return "red passage"
if g > 220 and r < 100 and b < 100:
return "green passage"
return "floor"
leftWheel.setVelocity(3.0)
rightWheel.setVelocity(3.0)
last = None
while robot.step(timeStep) != -1:
image = colorSensor.getImage()
floor = floorType(colorSensor.imageGetRed(image, 1, 0, 0),
colorSensor.imageGetGreen(image, 1, 0, 0),
colorSensor.imageGetBlue(image, 1, 0, 0))
if floor != last:
print("Floor:", floor)
last = floor
if floor == "hole": # Stop before falling in
leftWheel.setVelocity(0)
rightWheel.setVelocity(0)
break