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

Renk sensörü

Renk sensörü zemine bakar; böylece robota çukurlar, bataklıklar ve geçitler hakkında bilgi verir. Aşağıya bakan, tek piksellik bir kameradır. Başlangıç robotunda adı color’dır ve tekerlekler bir çukura ulaşmadan önce çukuru görebilmesi için robotun önündedir.

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)

Bu değerler başlangıç robotuyla world2.wbt üzerinde ölçüldü:

Zemin Kırmızı Yeşil Mavi
Normal 252 252 252
Bataklık 245 222 142
1. ve 2. alanlar arasındaki geçit (mavi) 91 91 255
2. ve 3. alanlar arasındaki geçit (mor) 193 91 251
1. ve 4. alanlar arasındaki geçit (yeşil) 48 255 48
3. ve 4. alanlar arasındaki geçit (kırmızı) 255 91 91

Çukurların siyah bir kenarı vardır, bu yüzden zemin bir çukurun hemen önünde kararır. Kontrol noktaları bu sensöre neredeyse normal zemin gibi görünür, bu yüzden kalibrasyonu kendi dünyandaki bir kontrol noktası üzerinde yap.

Bu program ileri gider, zemin her değiştiğinde onu yazdırır ve bir çukur görürse durur:

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