Tầm nhìn#

Giới thiệu#

Cảm biến thị giác của VEX EXP phát hiện và theo dõi các dấu hiệu màu sắc và mã màu. Điều này cho phép cảm biến thị giác phân tích môi trường xung quanh và phản ứng dựa trên dữ liệu hình ảnh được phát hiện.

Trang này sử dụng vision_1, RED_BOX, và BOX_CODE làm ví dụ về tên Cảm biến thị giác, Chữ ký màu và Mã màu tương ứng. Hãy thay thế chúng bằng tên do bạn cấu hình nếu cần.

Dưới đây là danh sách tất cả các phương pháp:

Bộ lấy dữ liệu – Lấy dữ liệu từ Cảm biến Thị giác.

  • take_snapshot – Ghi lại dữ liệu cho Chữ ký màu hoặc Mã màu cụ thể.

  • largest_object – Chọn đối tượng lớn nhất từ ​​ảnh chụp nhanh.

  • installed – Cảm biến thị giác có được kết nối với EXP Brain hay không.

Thuộc tính – Dữ liệu đối tượng được trả về từ take_snapshot.

  • .exists – Liệu đối tượng có tồn tại trong lần phát hiện hiện tại hay không.

  • .width – Chiều rộng của đối tượng được phát hiện.

  • .height – Chiều cao của vật thể được phát hiện.

  • .centerX – Vị trí X của tâm đối tượng.

  • .centerY – Vị trí Y của tâm đối tượng.

  • .angle – Hướng của Mã màu.

  • .originX – Vị trí X của góc trên bên trái của đối tượng.

  • .originY – Vị trí Y của góc trên bên trái của đối tượng.

Hàm khởi tạo – Tự tay khởi tạo và cấu hình Cảm biến Thị giác và các chữ ký của nó.

  • Vision – Tạo ra một Cảm biến Thị giác.

  • Signature – Tạo Chữ ký Màu.

  • Code – Tạo Mã Màu.

Người nhận#

take_snapshot#

take_snapshot lọc dữ liệu từ khung hình Cảm biến Thị giác thành một chữ ký duy nhất — một mô tả đã lưu về thứ mà cảm biến có thể nhận ra, chẳng hạn như Chữ ký Màu hoặc Mã Màu đã được cấu hình — và trả về một bộ dữ liệu.

Chữ ký màu và Mã màu phải được cấu hình trước trong Tiện ích Thị giác trước khi có thể sử dụng chúng với phương pháp này.

The tuple stores objects ordered from largest to smallest by width, starting at index 0. Each object’s properties can be accessed using its index. An empty tuple is returned if no matching objects are detected.

Usage:
vision_1.take_snapshot(SIGNATURE)

Thông số

Sự miêu tả

SIGNATURE

Lọc tập dữ liệu chỉ bao gồm dữ liệu có chữ ký đã cho. Các chữ ký có sẵn là:

  • Chữ ký màu hoặc Mã màu - Tên của Cảm biến thị giác, hai dấu gạch dưới, và sau đó là tên của Chữ ký màu hoặc Mã màu. Ví dụ: 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)

Màu sắc đặc trưng#

Chữ ký màu là một màu duy nhất mà Cảm biến Thị giác có thể nhận ra. Những chữ ký này cho phép cảm biến phát hiện và theo dõi các đối tượng dựa trên màu sắc của chúng. Sau khi Chữ ký màu được cấu hình, cảm biến có thể xác định các đối tượng có màu cụ thể đó trong trường nhìn của nó. Chữ ký màu được sử dụng với take_snapshot để xử lý và phát hiện các đối tượng có màu trong thời gian thực.

Để sử dụng Chữ ký màu đã cấu hình trong một dự án, tên của nó phải là tên của Cảm biến hình ảnh, hai dấu gạch dưới, và sau đó là tên của Chữ ký màu. Ví dụ: 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)

Mã màu#

Mã màu là một mẫu cấu trúc được tạo thành từ các chữ ký màu được sắp xếp theo một thứ tự cụ thể. Các mã này cho phép Cảm biến Thị giác nhận biết các mẫu màu được xác định trước. Mã màu hữu ích để xác định các đối tượng phức tạp hoặc tạo ra các dấu hiệu độc đáo cho điều hướng tự động.

Để sử dụng Mã Màu đã cấu hình trong một dự án, tên của mã màu đó phải là tên của Cảm biến Thị giác, hai dấu gạch dưới, và sau đó là tên của Mã Màu. Ví dụ: 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)

largest_object#

largest_object truy xuất đối tượng được phát hiện lớn nhất để lấy dữ liệu từ bộ dữ liệu được trả về từ lần sử dụng gần đây nhất của take_snapshot.

Phương pháp này có thể được sử dụng để luôn lấy được đối tượng lớn nhất từ ​​một bộ dữ liệu mà không cần chỉ định chỉ mục.

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)

installed#

installed trả về giá trị Boolean cho biết Cảm biến Thị giác hiện có được kết nối với EXP Brain hay không.

  • True – Cảm biến thị giác được kết nối với bộ xử lý EXP Brain.

  • False – Cảm biến thị giác không được kết nối với bộ não EXP.

Usage:
vision_1.installed()

Thông số

Sự miêu tả

Phương pháp này không có tham số.

# Display a message if the Vision Sensor is connected
if vision_1.installed():
    brain.screen.print("Vision Sensor Installed!")

Của cải#

Có tám thuộc tính được bao gồm trong mỗi đối tượng được lưu trữ trong một tuple sau khi take_snapshot được sử dụng.

Tất cả các giá trị thuộc tính mô tả vị trí và kích thước của đối tượng được phát hiện trong tầm nhìn của Cảm biến Thị giác tại thời điểm lệnh take_snapshot được sử dụng. Các giá trị này được đo bằng pixel, dựa trên độ phân giải 316 x 212 pixel của cảm biến.

.exists#

.exists trả về giá trị Boolean cho biết chỉ mục có tồn tại trong bộ dữ liệu hay không.

  • True - Chỉ mục tồn tại.

  • False - Chỉ mục không tồn tại.

# Check if at least one red object 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#

.width trả về chiều rộng của đối tượng được phát hiện tính bằng pixel, là một số nguyên nằm giữa 1 và 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#

.height trả về chiều cao của đối tượng được phát hiện tính bằng pixel, là một số nguyên nằm giữa 1 và 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 trả về tọa độ x của tâm đối tượng được phát hiện tính bằng pixel, là một số nguyên nằm giữa 0 và 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 trả về tọa độ y của tâm đối tượng được phát hiện tính bằng pixel, là một số nguyên nằm giữa 0 và 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#

.angle trả về hướng của vật thể được phát hiện tính bằng độ, là một số nguyên nằm giữa 0 và 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 70 < box_code[0].angle < 110:
            drivetrain.turn_for(RIGHT, 45, DEGREES)
            
        elif 250 < box_code[0].angle < 290:
            drivetrain.turn_for(LEFT, 45, DEGREES)
        
        else:
            drivetrain.stop()

    wait(50, MSEC)

.originX#

.originX trả về tọa độ x của góc trên bên trái của khung bao quanh đối tượng được phát hiện tính bằng pixel, là một số nguyên nằm giữa 0 và 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 trả về tọa độ y của góc trên bên trái của khung bao quanh đối tượng được phát hiện tính bằng pixel, là một số nguyên nằm giữa 0 và 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)

Các hàm tạo#

Các hàm tạo được sử dụng để tạo thủ công các đối tượng Vision, Signaturevà Code , cần thiết để cấu hình Cảm biến Thị giác bên ngoài VEXcode.

Vision#

Vision tạo ra một Cảm biến Thị giác.

Cách sử dụng

Vision(smartport, brightness, sigs)

Thông số

Sự miêu tả

smartport

Cổng thông minh mà cảm biến thị giác được kết nối, được viết dưới dạng Ports.PORTx , trong đó x là số thứ tự của cổng.

brightness

Tùy chọn. Giá trị độ sáng cho Cảm biến Thị giác, từ 1 đến 100.

sigs

Tùy chọn. Tên của một hoặc nhiều đối tượng Chữ ký màu hoặc Mã màu được phân tách bằng dấu phẩy (,).

# Create the Color Signatures
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 the Color Code
BOX_CODE = Code(RED_BOX, BLUE_BOX)

"""
Create a Vision Sensor with the following values:
- Port 1
- brightness: 80
- RED_BOX and BOX_CODE signatures
"""
vision_1 = Vision(Ports.PORT1, 80, RED_BOX, BOX_CODE)

Signature#

Signature tạo ra một Chữ ký Màu. Có thể lưu trữ tối đa bảy Chữ ký Màu khác nhau trên Cảm biến Thị giác cùng một lúc.

Cách sử dụng:

Signature(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)

Tham số

Sự miêu tả

index

Chỉ số của đối tượng Signature , từ 1 đến 7. Lưu ý: Việc tạo hai đối tượng Signature có cùng số chỉ số sẽ khiến đối tượng thứ hai được tạo ra ghi đè lên đối tượng đầu tiên.

uMin

Giá trị từ uMin trong Tiện ích Thị giác.

uMax

Giá trị từ uMax trong Tiện ích Thị giác.

uMean

Giá trị từ uMean trong Tiện ích Thị giác.

vMin

Giá trị từ vMin trong Tiện ích Thị giác.

vMax

Giá trị từ vMax trong Tiện ích Thị giác.

vMean

Giá trị từ vMean trong Tiện ích Thị giác.

rgb

Giá trị từ rgb trong Tiện ích Thị giác.

type

Giá trị từ type trong Tiện ích Thị giác.

Để lấy các giá trị tạo Chữ ký màu, hãy vào Tiện ích Thị giác. Sau khi Chữ ký màu được cấu hình, hãy sao chép các giá trị tham số từ cửa sổ Cấu hình.

"""
Create a Color Signature with the following values:
- index: 1
- uMin: 10121
- uMax: 10757
- uMean: 10439
- vMin: -1657
- vMax: -1223
- vMean: -1440
- rgb: 2.5
- type: 1
"""
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)

Code#

Mã Code tạo ra một Mã Màu. Nó yêu cầu ít nhất hai Chữ Ký Màu đã được định nghĩa trước đó để có thể sử dụng. Có thể lưu trữ tối đa tám Mã Màu khác nhau trên Cảm biến Thị giác cùng một lúc.

Cách sử dụng:

Code(sig1, sig2, sig3, sig4, sig5)

Tham số

Sự miêu tả

sig1

A previously created Color Signature.

sig2

A previously created Color Signature.

sig3

Optional. A previously created Color Signature.

sig4

Optional. A previously created Color Signature.

sig5

Optional. A previously created Color Signature.

# Create the Color Signatures
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 with the Color Signatures
BOX_CODE = Code(RED_BOX, BLUE_BOX)