เซ็นเซอร์ตรวจจับภาพ#
การแนะนำ#
เซ็นเซอร์ตรวจจับภาพเป็นเซ็นเซอร์ที่ใช้กล้องในการตรวจจับและติดตามลายเซ็นสีและรหัสสี ช่วยให้หุ่นยนต์สามารถวิเคราะห์สภาพแวดล้อมและตอบสนองต่อข้อมูลภาพได้
สำหรับตัวอย่างด้านล่าง เซ็นเซอร์ตรวจจับภาพที่กำหนดค่าไว้จะถูกตั้งชื่อว่า vision_1และออบเจ็กต์ลายเซ็นสีที่กำหนดค่าไว้ เช่น RED_BOXจะถูกใช้ในตัวอย่างต่อๆ ไปทั้งหมดในเอกสาร API นี้ เมื่ออ้างถึงเมธอดคลาส Vision
ด้านล่างนี้คือรายการวิธีการทั้งหมด:
ตัวรับข้อมูล — รับข้อมูลจากเซ็นเซอร์ตรวจจับภาพ
take_snapshot— บันทึกข้อมูลสำหรับลายเซ็นเฉพาะinstalled— เซ็นเซอร์การมองเห็นเชื่อมต่อกับ IQ (รุ่นที่ 2) Brain หรือไม่
คุณสมบัติ — ข้อมูลวัตถุที่ส่งคืนจาก take_snapshot
largest_object— เลือกวัตถุที่ใหญ่ที่สุดจากภาพสแนปช็อตของเซ็นเซอร์วิชั่นทันที.exists— วัตถุนั้นมีอยู่ในการตรวจจับปัจจุบันหรือไม่.width— ความกว้างของวัตถุที่ตรวจพบ.height— ความสูงของวัตถุที่ตรวจพบ.centerX— ตำแหน่ง X ของจุดศูนย์กลางของวัตถุ.centerY— ตำแหน่ง Y ของจุดศูนย์กลางของวัตถุ.angle— การวางแนวของรหัสสี.originX— ตำแหน่ง X ของมุมบนซ้ายของวัตถุ.originY— ตำแหน่ง Y ของมุมบนซ้ายของวัตถุ
ตัวสร้าง — เริ่มต้นและกำหนดค่าเซ็นเซอร์ด้วยตนเอง
ผู้รับ#
take_snapshot#
take_snapshot กรองข้อมูลจากเฟรมเซ็นเซอร์การมองเห็นให้เหลือเพียงลายเซ็นเดียว ซึ่งเป็นคำอธิบายที่บันทึกไว้ของสิ่งที่เซ็นเซอร์สามารถจดจำได้ เช่น ลายเซ็นสีหรือรหัสสีที่กำหนดค่าไว้ และส่งคืนค่าทูเปิล
ลายเซ็นสี และ รหัสสี จะต้องได้รับการกำหนดค่าใน Vision Utility ก่อนจึงจะสามารถใช้กับวิธีนี้ได้
ทูเพิลนี้เก็บวัตถุที่เรียงลำดับจากใหญ่ที่สุดไปเล็กที่สุดตามความกว้าง โดยเริ่มต้นที่ดัชนี 0 สามารถเข้าถึง คุณสมบัติ ของแต่ละวัตถุได้โดยใช้ดัชนี หากไม่พบวัตถุที่ตรงกัน จะส่งคืนทูเพิลว่างเปล่า
Usage:
vision_1.take_snapshot(SIGNATURE)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
กรองชุดข้อมูลเพื่อให้มีเฉพาะข้อมูลที่มีลายเซ็นที่กำหนดเท่านั้น ลายเซ็นที่ใช้ได้คือ:
|
# Move forward if a red object is detected
while True:
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
ลายเซ็นสี#
ลายเซ็นสีคือสีเฉพาะที่เซ็นเซอร์การมองเห็นสามารถจดจำได้ ลายเซ็นเหล่านี้ช่วยให้เซ็นเซอร์การมองเห็นสามารถตรวจจับและติดตามวัตถุตามสีของวัตถุได้ เมื่อกำหนดค่าลายเซ็นสีแล้ว เซ็นเซอร์จะสามารถระบุวัตถุที่มีสีเฉพาะนั้นในขอบเขตการมองเห็นได้ ลายเซ็นสีใช้ร่วมกับ take_snapshot เพื่อประมวลผลและตรวจจับวัตถุสีแบบเรียลไทม์
ในการใช้ลายเซ็นสีที่กำหนดค่าไว้ในโปรเจกต์ ชื่อของลายเซ็นสีจะต้องเป็นชื่อของเซ็นเซอร์ตรวจจับภาพ ตามด้วยเครื่องหมายขีดล่างสองตัว แล้วตามด้วยชื่อของลายเซ็นสี ตัวอย่างเช่น: vision_1__RED_BOX.
# Display if any objects match the RED_BOX signature
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Signature
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
brain.screen.print("Color signature detected!")
wait(100, MSEC)
รหัสสี#
รหัสสีคือรูปแบบที่มีโครงสร้างซึ่งประกอบด้วยชุดสีที่เรียงลำดับอย่างเฉพาะเจาะจง รหัสเหล่านี้ช่วยให้เซ็นเซอร์ตรวจจับภาพสามารถจดจำรูปแบบสีที่กำหนดไว้ล่วงหน้าได้ รหัสสีมีประโยชน์สำหรับการระบุวัตถุที่ซับซ้อนหรือการสร้างเครื่องหมายเฉพาะสำหรับการนำทางอัตโนมัติ
ในการใช้รหัสสีที่กำหนดค่าไว้ในโปรเจกต์ ชื่อของรหัสสีจะต้องเป็นชื่อของเซ็นเซอร์ ตามด้วยเครื่องหมายขีดล่างสองตัว แล้วตามด้วยชื่อของรหัสสี ตัวอย่างเช่น: vision_1__BOX_CODE
# Display if any objects match the BOX_CODE code
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Code
box_code = vision_1.take_snapshot(vision_1__BOX_CODE)
if box_code[0].exists:
brain.screen.print("Color code detected!")
wait(100, MSEC)
installed#
installed จะส่งคืนค่าบูลีนที่ระบุว่าเซ็นเซอร์ตรวจจับภาพเชื่อมต่อกับ IQ (รุ่นที่ 2) Brain อยู่หรือไม่
True— เซ็นเซอร์ตรวจจับภาพเชื่อมต่อกับสมอง IQ (รุ่นที่ 2)False— เซ็นเซอร์การมองเห็นไม่ได้เชื่อมต่อกับสมอง IQ (รุ่นที่ 2)
Usage:
vision_1.installed()
พารามิเตอร์ |
คำอธิบาย |
|---|---|
เมธอดนี้ไม่มีพารามิเตอร์ |
# Display a message if the Vision Sensor is connected
if vision_1.installed():
brain.screen.print("Installed!")
คุณสมบัติ#
largest_object#
largest_object ดึงวัตถุที่ตรวจพบที่ใหญ่ที่สุดเพื่อรับข้อมูลจากทูเปิลที่ส่งคืนจากการใช้งานล่าสุดของ take_snapshot
วิธีนี้สามารถใช้เพื่อดึงค่าที่ใหญ่ที่สุดจากทูเพิลได้เสมอโดยไม่ต้องระบุค่าดัชนี
Usage:
vision_1.largest_object()
# Turn slowly until the largest object is centered in
# front of the Vision Sensor
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)
while True:
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if 140 < vision_1.largest_object().centerX < 180:
drivetrain.stop()
wait(10,MSEC)
Tuple Properties#
มีคุณสมบัติแปดประการที่รวมอยู่ในแต่ละวัตถุที่จัดเก็บในทูเปิลหลังจากใช้ take_snapshot
ค่าคุณสมบัติทั้งหมดอธิบายตำแหน่งและขนาดของวัตถุที่ตรวจพบในมุมมองของเซ็นเซอร์ตรวจจับภาพ ณ ขณะที่ใช้คำสั่ง take_snapshot ค่าเหล่านี้วัดเป็นพิกเซล โดยอิงจากความละเอียด 316 x 212 พิกเซลของเซ็นเซอร์
มีอยู่จริง#
.exists ที่ระบุว่าดัชนีนั้นมีอยู่ในทูเปิลหรือไม่
True— ดัชนีมีอยู่จริงFalse— ดัชนีนี้ไม่มีอยู่จริง
# Check if at least one red objects is detected
# You will receive an error if no objects are detected
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
red_objects = vision_1.take_snapshot(vision_1__RED_BOX)
if red_objects[0].exists:
brain.screen.print("At least 1")
else:
brain.screen.print("No red objects")
wait(0.5, SECONDS)
.ความกว้าง#
.width ส่งคืนความกว้างของวัตถุที่ตรวจพบในหน่วยพิกเซล ซึ่งเป็นจำนวนเต็มระหว่าง 1 ถึง 316
# Move towards a blue object until its width is
# larger than 100 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].width < 100:
drivetrain.drive_for(FORWARD, 10, MM)
else:
drivetrain.stop()
wait(50, MSEC)
.ความสูง#
.height จะส่งคืนค่าความสูงของวัตถุที่ตรวจพบในหน่วยพิกเซล ซึ่งเป็นจำนวนเต็มระหว่าง 1 ถึง 212
# Move towards a blue object until its height is
# larger than 100 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].height < 100:
drivetrain.drive_for(FORWARD, 10, MM)
else:
drivetrain.stop()
wait(50, MSEC)
.centerX#
.centerX ที่ตรวจพบในหน่วยพิกเซล ซึ่งเป็นจำนวนเต็มระหว่าง 0 ถึง 316
# Turn slowly until the largest blue object is centered
# in front of the Vision Sensor.
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if 140 < vision_1.largest_object().centerX < 180:
drivetrain.stop()
wait(10,MSEC)
.centerY#
.centerY ที่ตรวจพบในหน่วยพิกเซล ซึ่งเป็นจำนวนเต็มระหว่าง 0 ถึง 212
# Move towards a blue object until its
# center y-coordinate is more than 140 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].centerY < 140:
drivetrain.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
.มุม#
.angle ส่งคืนค่าการวางแนวของวัตถุที่ตรวจพบในหน่วยองศา ซึ่งเป็นจำนวนเต็มระหว่าง 0 ถึง 359
# Turn left or right depending on how a
# configured box code is rotated
while True:
box_code = vision_1.take_snapshot(vision_1__BOX_CODE)
if box_code[0].exists:
if 50 < box_code[0].angle < 100:
drivetrain.turn(RIGHT)
elif 270 < box_code[0].angle < 330:
drivetrain.turn(LEFT)
else:
drivetrain.stop()
else:
drivetrain.stop()
wait(50, MSEC)
.originX#
.originX วัตถุที่ตรวจพบในหน่วยพิกเซล ซึ่งเป็นจำนวนเต็มระหว่าง 0 ถึง 316
# Display if a red object is to the
# left or the right
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if red_box[0].originX < 160:
brain.screen.print("To the left!")
else:
brain.screen.print("To the right!")
wait(50, MSEC)
.originY#
.originY วัตถุที่ตรวจพบในหน่วยพิกเซล ซึ่งเป็นจำนวนเต็มระหว่าง 0 ถึง 212
# Display if a red object is close or far
# from the robot
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if red_box[0].originY < 80:
brain.screen.print("Far")
else:
brain.screen.print("Close")
wait(50, MSEC)
ผู้สร้าง#
ตัวสร้าง (Constructor) ใช้สำหรับสร้างวัตถุ Vision, Signatureและ Code ด้วยตนเอง ซึ่งจำเป็นสำหรับการกำหนดค่าเซ็นเซอร์ภายนอก VEXcode
Vision Sensor#
Vision สร้างเซ็นเซอร์ตรวจจับภาพ
วิธีใช้
Vision(port, brightness, sigs)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
เซ็นเซอร์ตรวจจับภาพเชื่อมต่อกับ Smart Port หมายเลข 1 ถึง 12 |
|
(ไม่บังคับ) ค่าความสว่างสำหรับเซ็นเซอร์ตรวจจับภาพ ตั้งแต่ 1 ถึง 100 |
|
ไม่บังคับ ชื่อของวัตถุ ลายเซ็นสี หรือ รหัสสี อย่างน้อยหนึ่งรายการ |
ตัวอย่าง
# Create a new Signature "RED_BOX" with the Signature class
RED_BOX = Signature(1, -3911, -3435, -3673,10879, 11421, 11150,2.5, 0)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the "RED_BOX" Signature.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX)
# Move forward if a red object is detected
while True:
red_object = vision_1.take_snapshot(RED_BOX)
if red_object[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
Color Signature#
Signature สร้างลายเซ็นสี สามารถจัดเก็บลายเซ็นสีที่แตกต่างกันได้สูงสุดเจ็ดแบบบนเซ็นเซอร์ตรวจจับภาพพร้อมกัน
วิธีใช้:
Signature(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
ดัชนีของวัตถุ |
|
ค่าตั้งแต่ |
|
ค่าตั้งแต่ |
|
ค่าตั้งแต่ |
|
ค่าตั้งแต่ |
|
ค่าตั้งแต่ |
|
ค่าตั้งแต่ |
|
ค่าตั้งแต่ |
|
ค่าตั้งแต่ |
เพื่อให้ได้ค่าสำหรับการสร้างลายเซ็นสี ให้ไปที่ Vision Utility เมื่อกำหนดค่าลายเซ็นสีเสร็จแล้ว ให้คัดลอกค่าพารามิเตอร์จากหน้าต่างการกำหนดค่า
ตัวอย่าง
# Create a new Signature RED_BOX with the Signature class
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the RED_BOX Signature.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX)
# Move forward if a red object is detected
while True:
red_object = vision_1.take_snapshot(RED_BOX)
if red_object[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
Color Code#
คำสั่ง Code สร้างรหัสสี โดยต้องมีลายเซ็นสีที่กำหนดไว้แล้วอย่างน้อยสองลายเซ็นจึงจะสามารถใช้งานได้ เซ็นเซอร์ตรวจจับภาพสามารถจัดเก็บรหัสสีได้สูงสุดแปดรหัสพร้อมกัน
วิธีใช้:
Code(sig1, sig2, sig3, sig4, sig5)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
ลายเซ็นสี ที่สร้างไว้ก่อนหน้านี้ |
|
ลายเซ็นสี ที่สร้างไว้ก่อนหน้านี้ |
|
ตัวเลือกเสริม ลายเซ็นสี ที่สร้างไว้ก่อนหน้านี้ |
|
ตัวเลือกเสริม ลายเซ็นสี ที่สร้างไว้ก่อนหน้านี้ |
|
ตัวเลือกเสริม ลายเซ็นสี ที่สร้างไว้ก่อนหน้านี้ |
ตัวอย่าง
# Create two new Signatures for a red and blue box
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Signature(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create a Color Code for a red box to the left of a blue box
RED_BLUE = Code(RED_BOX, BLUE_BOX)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the red_box and blue_box Signatures.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX, BLUE_BOX)
# Display a message if Color Code is detected
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Code
box_code = vision_1.take_snapshot(RED_BLUE)
if box_code[0].exists:
brain.screen.print("Color code detected!")
wait(100, MSEC)