Cảm biến thị giác#
Giới thiệu#
Cảm biến thị giác là một cảm biến dựa trên camera có khả năng phát hiện và theo dõi các đặc trưng màu sắc và mã màu. Nó cho phép robot phân tích môi trường xung quanh và phản hồi lại các tín hiệu thị giác.
Đối với các ví dụ bên dưới, Cảm biến Thị giác đã cấu hình sẽ được đặt tên là vision_1và các đối tượng Chữ ký Màu đã cấu hình, chẳng hạn như RED_BOX, sẽ được sử dụng trong tất cả các ví dụ tiếp theo trong toàn bộ tài liệu API này khi đề cập đến Vision.
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— Thu thập dữ liệu cho một chữ ký cụ thể.installed— Cảm biến thị giác có được kết nối với bộ não IQ (thế hệ thứ 2) hay không.
Thuộc tính — Dữ liệu đối tượng được trả về từ take_snapshot.
largest_object— Chọn ngay đối tượng lớn nhất từ ảnh chụp nhanh của Cảm biến Thị giác..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ác cảm biến.
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ả |
|---|---|
|
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à:
|
# 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 thị giác 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 rất 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, 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)
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 Bộ xử lý IQ (thế hệ thứ 2) hay không.
True— Cảm biến thị giác được kết nối với bộ não IQ (thế hệ thứ 2).False— Cảm biến thị giác không được kết nối với bộ não IQ (thế hệ thứ 2).
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("Installed!")
Của cải#
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)
Tuple Properties#
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.
tồn tại#
.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 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)
.chiều rộng#
.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)
.chiều cao#
.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)
.góc#
.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 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 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 cho việc cấu hình các cảm biến bên ngoài VEXcode.
Vision Sensor#
Vision tạo ra một Cảm biến Thị giác.
Cách sử dụng
Vision(port, brightness, sigs)
Thông số |
Sự miêu tả |
|---|---|
|
Cảm biến thị giác được kết nối với cổng thông minh nào, từ 1 đến 12? |
|
Tùy chọn. Giá trị độ sáng cho Cảm biến Thị giác, từ 1 đến 100. |
|
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. |
Ví dụ
# 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 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ả |
|---|---|
|
Chỉ số của đối tượng |
|
Giá trị từ |
|
Giá trị từ |
|
Giá trị từ |
|
Giá trị từ |
|
Giá trị từ |
|
Giá trị từ |
|
Giá trị từ |
|
Giá trị từ |
Để 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.
Ví dụ
# 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#
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ả |
|---|---|
|
A previously created Color Signature. |
|
A previously created Color Signature. |
|
Optional. A previously created Color Signature. |
|
Optional. A previously created Color Signature. |
|
Optional. A previously created Color Signature. |
Ví dụ
# 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)