เซ็นเซอร์ตรวจจับภาพ#

การแนะนำ#

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

สำหรับตัวอย่างด้านล่าง เซ็นเซอร์ตรวจจับภาพที่กำหนดค่าไว้จะถูกตั้งชื่อว่า 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 ของมุมบนซ้ายของวัตถุ

ตัวสร้าง — เริ่มต้นและกำหนดค่าเซ็นเซอร์ด้วยตนเอง

  • Vision — สร้างเซ็นเซอร์วิชั่น

  • Signature — สร้างลายเซ็นสี

  • Code — สร้างรหัสสี

ผู้รับ#

take_snapshot#

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

ลายเซ็นสี และ รหัสสี จะต้องได้รับการกำหนดค่าใน Vision Utility ก่อนจึงจะสามารถใช้กับวิธีนี้ได้

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

Usage:
vision_1.take_snapshot(SIGNATURE)

พารามิเตอร์

คำอธิบาย

SIGNATURE

กรองชุดข้อมูลเพื่อให้มีเฉพาะข้อมูลที่มีลายเซ็นที่กำหนดเท่านั้น ลายเซ็นที่ใช้ได้คือ:

  • ลายเซ็นสีหรือรหัสสี - ชื่อของเซ็นเซอร์ตรวจจับภาพ ตามด้วยเครื่องหมายขีดล่างสองตัว แล้วตามด้วยชื่อของลายเซ็นสีหรือรหัสสี ตัวอย่างเช่น: vision_1__RED_BOX.

# 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)

พารามิเตอร์

คำอธิบาย

port

เซ็นเซอร์ตรวจจับภาพเชื่อมต่อกับ Smart Port หมายเลข 1 ถึง 12

brightness

(ไม่บังคับ) ค่าความสว่างสำหรับเซ็นเซอร์ตรวจจับภาพ ตั้งแต่ 1 ถึง 100

sigs

ไม่บังคับ ชื่อของวัตถุ ลายเซ็นสี หรือ รหัสสี อย่างน้อยหนึ่งรายการ

ตัวอย่าง

# 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)

พารามิเตอร์

คำอธิบาย

index

ดัชนีของวัตถุ Signature ตั้งแต่ 1 - 7 หมายเหตุ: การสร้างวัตถุ Signature สองชิ้นที่มีหมายเลขดัชนีเดียวกัน จะทำให้วัตถุชิ้นที่สองที่สร้างขึ้นมาแทนที่วัตถุชิ้นแรก

uMin

ค่าตั้งแต่ uMin ใน Vision Utility

uMax

ค่าตั้งแต่ uMax ใน Vision Utility

uMean

ค่าตั้งแต่ uMean ใน Vision Utility

vMin

ค่าตั้งแต่ vMin ใน Vision Utility

vMax

ค่าตั้งแต่ vMax ใน Vision Utility

vMean

ค่าตั้งแต่ vMean ใน Vision Utility

rgb

ค่าตั้งแต่ rgb ใน Vision Utility

type

ค่าตั้งแต่ type ใน Vision Utility

เพื่อให้ได้ค่าสำหรับการสร้างลายเซ็นสี ให้ไปที่ 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)

พารามิเตอร์

คำอธิบาย

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)