ข้ามไปยังเนื้อหา
ไทย

เซนเซอร์สี

เซนเซอร์สีมองไปที่พื้น จึงบอกหุ่นยนต์ได้ว่ามีหลุม หนองน้ำ และทางผ่านหรือไม่ เซนเซอร์นี้คือกล้องขนาดหนึ่งพิกเซลที่หันลงด้านล่าง บนหุ่นยนต์เริ่มต้นมีชื่อว่า color และอยู่ด้านหน้าของหุ่นยนต์ เพื่อให้เห็นหลุมก่อนที่ล้อจะไปถึง

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)

ค่าเหล่านี้วัดด้วยหุ่นยนต์เริ่มต้นบน world2.wbt:

พื้น แดง เขียว น้ำเงิน
ปกติ 252 252 252
หนองน้ำ 245 222 142
ทางผ่านระหว่างพื้นที่ 1 และ 2 (สีน้ำเงิน) 91 91 255
ทางผ่านระหว่างพื้นที่ 2 และ 3 (สีม่วง) 193 91 251
ทางผ่านระหว่างพื้นที่ 1 และ 4 (สีเขียว) 48 255 48
ทางผ่านระหว่างพื้นที่ 3 และ 4 (สีแดง) 255 91 91

หลุมมีขอบสีดำ พื้นจึงมืดลงก่อนถึงหลุมเล็กน้อย สำหรับเซนเซอร์นี้ จุดตรวจ (checkpoint) ดูแทบไม่ต่างจากพื้นปกติ ดังนั้นให้ปรับเทียบบนจุดตรวจในโลกของคุณ

โปรแกรมนี้ขับหุ่นยนต์ไปข้างหน้า พิมพ์ชนิดของพื้นทุกครั้งที่เปลี่ยน และหยุดเมื่อเห็นหลุม:

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