Tầm nhìn AI#

Giới thiệu#

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

Cảm biến thị giác AI có độ phân giải 320×240 pixel. Gốc tọa độ (0, 0) nằm ở góc trên bên trái, đặt tâm của cảm biến tại (160, 120), như thể hiện trong sơ đồ bên dưới:

Sơ đồ thể hiện độ phân giải của Cảm biến Thị giác AI AIM, với tọa độ 0, 0 ở góc trên bên trái của sơ đồ, 320, 0 ở góc trên bên phải và 0, 240 ở góc dưới bên trái, với 160, 120 ở chính giữa.

Dưới đây là danh sách tất cả các phương thức và thuộc tính:

Thao tác — Hiển thị hoặc ẩn nguồn cấp dữ liệu camera AI Vision.

  • show_aivision — Hiển thị nguồn cấp dữ liệu AI Vision trên màn hình của robot.

  • hide_aivision — Ẩn nguồn cấp dữ liệu AI Vision khỏi màn hình.

  • tag_detection — Bật hoặc tắt tính năng phát hiện ID AprilTag.

Bộ phận lấy dữ liệu — Phát hiện xem robot có đang cầm một vật thể hay không.

  • get_data — Trả về một bộ các đối tượng được phát hiện cho một chữ ký cụ thể.

  • has_sports_ball — Trả về liệu robot có quả bóng thể thao hay không.

  • has_any_barrel — Trả về liệu robot có bất kỳ loại thùng nào hay không.

  • has_blue_barrel — Trả về liệu robot có thùng màu xanh lam hay không.

  • has_orange_barrel — Trả về liệu robot có thùng màu cam hay không.

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

  • exists — Cho biết liệu đối tượng có tồn tại trong lần phát hiện hiện tại hay không dưới dạng Boolean.

  • 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.

  • bearing — Góc ngang so với phía trước của robot.

  • rotation — Hướng của đối tượng.

  • 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.

  • id — Phân loại hoặc ID thẻ của đối tượng.

  • score — Điểm tin cậy cho Phân loại AI.

  • type — Trả về loại của đối tượng (AI, Thẻ, Màu sắc hoặc Mã).

Nhà thiết kế — Xác định các mã và ký hiệu màu sắc.

  • Tạo Chữ Ký Màu — Tạo Chữ Ký Màu mới dựa trên phạm vi RGB và sắc độ/độ bão hòa.

  • Tạo Mã Màu — Kết hợp nhiều Chữ ký Màu thành một Mã Màu duy nhất.

Hành động#

show_aivision#

Lệnh show_aivision hiển thị nguồn cấp dữ liệu trực tiếp từ Cảm biến Thị giác AI trên màn hình của robot. Nguồn cấp dữ liệu trực tiếp sẽ che phủ bất kỳ hình ảnh hoặc văn bản nào khác trên màn hình.

Lưu ý: Màn hình sẽ không hiển thị bất kỳ hình ảnh hoặc văn bản nào khác trừ khi hide_aivision được sử dụng để ẩn nguồn cấp dữ liệu.

Usage:
robot.screen.show_aivision()

Thông số

Sự miêu tả

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

# Watch the AI Vision Sensor detect AI Classifications
# and AprilTag IDs as you move the robot
robot.screen.show_aivision()

hide_aivision#

hide_aivision loại bỏ nguồn cấp dữ liệu trực tiếp của Cảm biến Thị giác AI khỏi màn hình của robot.

Usage:
robot.screen.hide_aivision()

Thông số

Sự miêu tả

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

# View the AI Vision Sensor's feed for five seconds
robot.screen.show_aivision()
wait(5, SECONDS)
robot.screen.hide_aivision()

tag_detection#

tag_detection cho phép hoặc vô hiệu hóa việc phát hiện ID AprilTag, trong đó trạng thái là một giá trị Boolean.

Cảm biến có thể phát hiện ID AprilTag từ 0 đến 36 thuộc dòng Circle21h7.

Usage:
robot.vision.tag_detection(state)

Thông số

Sự miêu tả

state

Các giá trị là: True, cho phép phát hiện ID AprilTag, hoặc False, vô hiệu hóa phát hiện ID AprilTag.

robot.screen.set_font(PROP30)

# Cut off AprilTag ID detection after 5 seconds
while True:
    if timer.time(SECONDS) > 5:
        robot.vision.tag_detection(False)

    robot.screen.clear_screen()
    robot.screen.set_cursor(3, 1)
    apriltags = robot.vision.get_data(ALL_TAGS)

    if apriltags[0].exists:
        robot.screen.print("AprilTag ID detected!")
    else:
        robot.screen.print("Nothing detected!")

    wait(0.1, SECONDS)

Người nhận#

get_data#

get_data lọc dữ liệu từ khung hình Cảm biến Thị giác AI 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ư một đối tượng được đào tạo trước, ID AprilTag hoặc Chữ ký Màu hoặc Mã Màu được cấu hình — và trả về một tuple.

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

tuple lưu trữ các đối tượng được sắp xếp từ lớn nhất đến nhỏ nhất theo chiều rộng, bắt đầu từ chỉ mục 0. Mỗi properties của đối tượng có thể được truy cập bằng chỉ mục của nó. Một tuple rỗng được trả về nếu không tìm thấy đối tượng phù hợp nào.

Usage:
robot.vision.get_data(signature, count)

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ý khả dụng là:

  • ALL_VISION - Bóng thể thao, thùng phuy, Robot lập trình VEX AIM, ID AprilTag, màu sắc và mã màu
  • ALL_CARGO - Bóng thể thao và thùng phuy
  • ALL_TAGS - Tất cả ID AprilTag
  • ALL_COLORS - Tất cả chữ ký màu sắc và mã màu đã cấu hình
  • SPORTS_BALL - Chỉ bóng thể thao
  • BLUE_BARREL - Chỉ thùng phuy màu xanh dương
  • ORANGE_BARREL - Chỉ thùng phuy màu cam
  • AIM_ROBOT - Tất cả Robot lập trình VEX AIM
  • TAG0 đến TAG37 - Một ID AprilTag duy nhất từ ​​0 đến 37
  • NAME - Chữ ký màu hoặc mã màu, trong đó NAME là tên được cấu hình trong Tiện ích Thị giác AI.

count

Tùy chọn. Thiết lập số lượng tối đa các đối tượng có thể được trả về từ 1 đến 24 (mặc định: 8).

Lưu ý: Các ID AprilTag từ 5 đến 37 có thể được lấy bằng cách sử dụng các ID AprilTag đã in từ AIM Printables.

# Move forward if a sports ball is detected
while True:
    ball = robot.vision.get_data(SPORTS_BALL)
    if ball[0].exists:
        robot.move_for(10, 0)
    wait(50, MSEC)

Note: The returned tuple can be sorted by any property, not just width, using Python’s sorted function. For example, sorting by AprilTag ID:

# Print each detected AprilTag ID in ascending order by ID
while True:
    apriltags = sorted(robot.vision.get_data(ALL_TAGS), key=id)
    for tag in apriltags:
        print(tag.id)
    wait(1, SECONDS)

Hoặc sắp xếp theo chiều cao:

# Print each detected AprilTag ID in ascending order by height
while True:
    apriltags_by_height = sorted(robot.vision.get_data(ALL_TAGS), key=lambda tag: tag.height)
    for tag in apriltags_by_height:
        print(tag.height)
    wait(1, SECONDS)

Xem dữ liệu#

Việc in ra tuple được trả về bởi get_data sẽ hiển thị danh sách tất cả các thuộc tính của tất cả các đối tượng được phát hiện:

# Display properties of all detected AprilTag IDs
while True:
    vision_data = robot.vision.get_data(ALL_TAGS)

    if vision_data[0].exists:
        break

    wait(0.25, SECONDS)

print(vision_data)

Ảnh chụp màn hình cửa sổ bảng điều khiển hiển thị đầu ra gỡ lỗi cho các ID AprilTag được phát hiện. Văn bản liệt kê 'Đối tượng #0' với các trường như tồn tại: True, loại: ID AprilTag, id: 2, centerX: 223, centerY: 54, originX: 210, originY: 42, chiều rộng: 27, chiều cao: 23, hướng: 14.1 và xoay: 0.0, theo sau là một dòng phân cách và phần đầu của 'Đối tượng #1' với tồn tại: True, loại: ID AprilTag, id: 4 và centerX: 122.

Phân loại AI#

Cảm biến thị giác AIM AI có thể phát hiện các phân loại AI sau:

Số ID

Phân loại AI

Chữ ký

0

Quả bóng

SPORTS_BALL

1

Thùng Xanh

BLUE_BARREL

2

Thùng màu cam

ORANGE_BARREL

3

Robot AIM

AIM_ROBOT

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 AI 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 get_data để xử lý và phát hiện các đối tượng có màu trong thời gian thực.

Tiện ích Thị giác AI hiển thị cảm biến thị giác được kết nối phát hiện hai vật thể có màu. Phía bên trái hiển thị nguồn cấp dữ liệu camera trực tiếp với một hộp màu xanh lam ở bên trái và một hộp màu đỏ ở bên phải, mỗi hộp được viền bằng các hộp bao màu trắng. Các nhãn màu đen hiển thị tên, tọa độ và kích thước tương ứng của chúng. Phía bên phải chứa các cài đặt chữ ký màu, với các thanh trượt cho phạm vi sắc độ và độ bão hòa cho cả hộp màu đỏ và màu xanh lam. Các nút để thêm màu, đóng băng video, sao chép và lưu hình ảnh nằm ở phía dưới, cùng với nút đóng ở góc dưới bên phải.

# Display if any objects match the Red_Box signature
while True:
    robot.screen.set_cursor(1, 1)
    robot.screen.clear_row(1)
    # Change to any configured Color Signature
    ai_objects = robot.vision.get_data(Red_Box)
    if ai_objects[0].exists:
        robot.screen.print("Color signature detected!")

Mã màu#

Mã màu là một mẫu cấu trúc gồm 2 đến 4 màu đặc trưng đượ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 AI nhận diện 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.

Giao diện Tiện ích Thị giác AI hiển thị một cảm biến thị giác được kết nối phát hiện hai vật thể liền kề, một hộp màu xanh lam ở bên trái và một hộp màu đỏ ở bên phải, được nhóm lại với nhau trong một hộp giới hạn màu trắng duy nhất có nhãn BlueRed. Thông tin phát hiện bao gồm góc (A:11°), tọa độ (X:143, Y:103), chiều rộng (W:233) và chiều cao (H:108). Trên bảng điều khiển bên phải, ba chữ ký màu được liệt kê: Red_Box, Blue_Box và BlueRed, với phạm vi sắc độ và độ bão hòa có thể điều chỉnh. Chữ ký BlueRed kết hợp Blue_Box và Red_Box. Bên dưới nguồn cấp video là các nút có nhãn Đóng băng Video, Sao chép Hình ảnh, Lưu Hình ảnh và Đóng.

# Display if any objects match the BlueRed code
while True:
    robot.screen.set_cursor(1, 1)
    robot.screen.clear_row(1)
    # Change to any configured Color Code
    ai_objects = robot.vision.get_data(BlueRed)
    if ai_objects[0].exists:
        robot.screen.print("Color code detected!")

has_sports_ball#

has_sports_ball trả về giá trị Boolean cho biết robot hiện có quả bóng thể thao hay không.

  • True — Con robot có một quả bóng thể thao.

  • False — Robot không có quả bóng thể thao.

Usage:
robot.has_sports_ball()

Thông số

Sự miêu tả

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

# Kick when the robot has a sports ball
while True:
    if robot.has_sports_ball():
        robot.kicker.kick(MEDIUM)

    wait(50, MSEC)

has_any_barrel#

has_any_barrel trả về giá trị Boolean cho biết robot hiện có bất kỳ loại thùng nào hay không.

  • True — Con robot có một cái thùng.

  • False — Robot không có thùng.

Usage:
robot.has_any_barrel()

Thông số

Sự miêu tả

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

# Push a barrel away when detected
while True:
    if robot.has_any_barrel():
        robot.kicker.place()

    wait(50, MSEC)

has_blue_barrel#

has_blue_barrel trả về giá trị Boolean cho biết robot hiện có thùng màu xanh lam hay không.

  • True — Con robot có một cái thùng màu xanh dương.

  • False — Robot không có thùng màu xanh lam.

Usage:
robot.has_blue_barrel()

Thông số

Sự miêu tả

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

# Push a blue barrel away when detected
while True:
    if robot.has_blue_barrel():
        robot.kicker.place()

    wait(50, MSEC)

has_orange_barrel#

has_orange_barrel trả về giá trị Boolean cho biết robot hiện có thùng màu cam hay không.

  • True — Con robot có một cái thùng màu cam.

  • False — Robot không có thùng màu cam.

Usage:
robot.has_orange_barrel()

Thông số

Sự miêu tả

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

# Push an orange barrel away when detected
while True:
    if robot.has_orange_barrel():
        robot.kicker.place()

    wait(50, MSEC)

Của cải#

Có mười hai thuộc tính được bao gồm trong mỗi đối tượng được lưu trữ trong một tuple sau khi phương thức robot.vision.get_data được sử dụng.

Tất cả các giá trị thuộc tính ngoại trừ .id, .scorevà .type mô tả vị trí, kích thước, hướng hoặc góc phương vị của đối tượng được phát hiện tại thời điểm robot.vision.get_data được sử dụng. Các giá trị này được đo bằng pixel hoặc độ, dựa trên độ phân giải 320 x 240 pixel của cảm biến.

Một thùng màu xanh lam có sọc cam nằm ở giữa khung hình, được bao quanh bởi một hộp giới hạn màu đen. Trục x và trục y được đánh dấu từ 0 đến 320 từ trái sang phải ở phía trên và từ 0 đến 240 từ trên xuống dưới dọc theo phía bên trái.

.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 two objects are detected
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    ai_objects = robot.vision.get_data(ALL_CARGO)

    if ai_objects[0].exists:
        if ai_objects[1].exists:
            robot.screen.print("At least 2")
        else:
            robot.screen.print("Less than 2")
    wait(0.1, 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à 320.

Lưu ý: Giá trị pixel tương đối so với hệ tọa độ của cảm biến. Xem sơ đồ trong phần Giới thiệu để tham khảo.

Một thùng màu xanh lam có sọc cam nằm ở giữa khung hình, được bao quanh bởi một hộp giới hạn màu đen. Hai đường chấm đỏ thẳng đứng kéo dài từ đỉnh khung hình xuống các cạnh trái và phải của hộp giới hạn. Một mũi tên đen hai đầu nằm giữa các đường này biểu thị phép đo chiều rộng.

# Move towards a Blue Barrel until its width is
# larger than 100 pixels
while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if barrel[0].width < 100:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    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à 240.

Lưu ý: Giá trị pixel tương đối so với hệ tọa độ của cảm biến. Xem sơ đồ trong phần Giới thiệu để tham khảo.

Một thùng màu xanh lam có sọc cam nằm ở giữa khung hình, được bao quanh bởi một hộp giới hạn màu đen. Hai đường chấm ngang màu đỏ kéo dài từ phía bên trái của khung hình đến các cạnh trên và dưới của hộp giới hạn. Một mũi tên hai đầu màu đen nằm giữa các đường này biểu thị phép đo chiều cao.

# Move towards a Blue Barrel until its height is
# larger than 100 pixels
while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if barrel[0].height < 100:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    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à 320.

Lưu ý: Giá trị pixel tương đối so với hệ tọa độ của cảm biến. Xem sơ đồ trong phần Giới thiệu để tham khảo.

Một thùng màu xanh lam có sọc cam nằm ở giữa khung hình, được bao quanh bởi một hộp giới hạn màu đen. Một đường chấm đỏ thẳng đứng kéo dài từ đỉnh khung hình xuống tâm của hộp giới hạn, biểu thị tọa độ X của tâm.

# Turn slowly until a Blue Barrel is centered in
# front of the robot
robot.set_turn_velocity(30)
robot.turn(RIGHT)

while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if 140 < barrel[0].centerX < 180:
            robot.stop_all_movement()

    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à 240.

Lưu ý: Giá trị pixel tương đối so với hệ tọa độ của cảm biến. Xem sơ đồ trong phần Giới thiệu để tham khảo.

Một thùng màu xanh lam có sọc cam nằm ở giữa khung hình, được bao quanh bởi một hộp giới hạn màu đen. Một đường chấm đỏ nằm ngang kéo dài từ phía bên trái của khung hình đến tâm của hộp giới hạn, biểu thị tọa độ Y của tâm.

# Move towards a Blue Barrel until its
# center y-coordinate is more than 140 pixels
while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if barrel[0].centerY < 140:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.bearing#

.bearing trả về một số thập phân (float) biểu thị khoảng cách của một vật thể sang trái hoặc sang phải so với tâm của tầm nhìn của Cảm biến Thị giác AI dưới dạng độ. Giá trị 0 có nghĩa là nó ở giữa, giá trị dương có nghĩa là vật thể ở bên phải và giá trị âm có nghĩa là vật thể ở bên trái.

Sơ đồ nhìn từ trên xuống cho thấy một robot lập trình VEX AIM được đặt ở trung tâm của một đế tròn với một đường tham chiếu thẳng đứng và một đường màu đỏ nghiêng về phía một quả bóng thể thao ở bên trái, được đánh dấu là -30 độ. Sơ đồ nhìn từ trên xuống cho thấy một robot lập trình VEX AIM được đặt ở trung tâm của một đế tròn với một đường tham chiếu thẳng đứng và một đường màu đỏ nghiêng về phía một quả bóng thể thao ở bên phải, được đánh dấu 30 độ.
# Turn to keep the Blue Barrel directly in front
robot.set_turn_velocity(40)
while True:
    vision_data = robot.vision.get_data(BLUE_BARREL)

    if vision_data[0].exists:

        if vision_data[0].bearing > 5:
            robot.turn(RIGHT)
        elif vision_data[0].bearing < -5:
            robot.turn(LEFT)
        else:
            robot.stop_all_movement()

    else:
        robot.stop_all_movement()

    wait(0.1, SECONDS)

.rotation#

.rotation trả về hướng của đối tượng trên mặt phẳng quan sát của Cảm biến Thị giác AI, được đo bằng độ từ 0 đến 359. Mã màu là 0° khi các màu được sắp xếp theo một đường thẳng nằm ngang (ví dụ: Đỏ – Xanh lam). Nếu các màu được xoay, góc sẽ thay đổi (ví dụ: sắp xếp Xanh lam – Đỏ trả về 180°).

Ví dụ bên dưới cho thấy, mã màu được cấu hình với màu đỏ ở bên trái và màu xanh lam ở bên phải.

Trong hình này, việc đặt màu xanh lam lên trên màu đỏ tương đương với việc xoay bảng mã màu gốc 270 độ sang phải.

Giao diện máy ảnh hiển thị một vật thể xếp chồng theo chiều dọc với nửa trên màu xanh lam và nửa dưới màu đỏ, nằm ở giữa khung hình. Nhãn bên dưới vật thể có nội dung Red_Blue A:270° CX:185 CY:81 W:93 H:150, cho biết tên của vật thể, góc quay, tọa độ tâm X và Y, chiều rộng và chiều cao. Các đường lưới và trục số đánh dấu kích thước hình ảnh, với X nằm trong khoảng từ 0 đến 320 và Y từ 0 đến 240.

# Slide left or right depending on how a Color Code (BlueRed)
# is rotated on the vertical plane
while True:
    # Original Color Code is Red to the left, Blue to the right
    code = robot.vision.get_data(BlueRed)

    if code[0].exists:
        # Check if Color Code is now Red on top of Blue
        if 50 < code[0].rotation < 100 :
            robot.move_at(90)

        # Check if Color Code is now Blue on top of Red
        elif 270 < code[0].rotation < 330 :
            robot.move_at(270)

        else:
            robot.stop_all_movement()
    else:
        robot.stop_all_movement()

    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à 320.

Lưu ý: Giá trị pixel tương đối so với hệ tọa độ của cảm biến. Xem sơ đồ trong phần Giới thiệu để tham khảo.

Một thùng màu xanh lam có sọc cam nằm ở giữa khung hình, được bao quanh bởi một hộp giới hạn màu đen. Một đường chấm đỏ thẳng đứng kéo dài từ đỉnh khung hình đến cạnh trái của hộp giới hạn, cho biết tọa độ X của gốc hộp giới hạn.

# Display if an Orange Barrel is to the
# left or the right
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1,1)

    orange_barrel = robot.vision.get_data(ORANGE_BARREL)

    if orange_barrel[0].exists:
        if orange_barrel[0].originX < 160:
            robot.screen.print("To the left!")
        else:
            robot.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à 240.

Lưu ý: Giá trị pixel tương đối so với hệ tọa độ của cảm biến. Xem sơ đồ trong phần Giới thiệu để tham khảo.

Một thùng màu xanh lam có sọc cam nằm ở giữa khung hình, được bao quanh bởi một hộp giới hạn màu đen. Một đường chấm đỏ nằm ngang kéo dài từ phía bên trái của khung hình đến cạnh trên của hộp giới hạn, cho biết tọa độ Y của gốc hộp giới hạn.

# Display if an Orange Barrel is close or far
# from the robot
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)

    orange_barrel = robot.vision.get_data(ORANGE_BARREL)

    if orange_barrel[0].exists:
        if orange_barrel[0].originY < 80:
            robot.screen.print("Far")
        else:
            robot.screen.print("Close")

    wait(50, MSEC)

.id#

.id trả về ID của Phân loại AI hoặc ID AprilTag được phát hiện dưới dạng số nguyên.

Đối với ID AprilTag, thuộc tính .id biểu thị số ID AprilTag được phát hiện trong phạm vi từ 0 đến 37. Đối với Phân loại AI, thuộc tính .id tương ứng với ID được xác định trước trong phần Phân loại AI.

# Move forward when AprilTag ID 1 is detected
while True:
    apriltags = robot.vision.get_data(ALL_TAGS)

    if apriltags[0].exists:
        if apriltags[0].id == 1:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.score#

.score trả về điểm tin cậy của phân loại AI được phát hiện dưới dạng số nguyên từ 1 đến 100.

Điểm số thấp hơn có nghĩa là cảm biến ít tự tin hơn về vật thể được phát hiện, trong khi điểm số cao hơn có nghĩa là cảm biến tự tin hơn.

# Look confident if an Orange Barrel is detected
while True:
    barrel = robot.vision.get_data(ORANGE_BARREL)

    if barrel[0].exists:
        if barrel[0].score > 95:
            robot.screen.show_emoji(CONFIDENT)
        else:
            robot.screen.hide_emoji()

    wait(50, MSEC)

.type#

.type trả về một số nguyên cho biết loại đối tượng được phát hiện. Bạn có thể so sánh giá trị này bằng cách sử dụng số loại hoặc hằng số được đặt tên tương ứng:

Loại đối tượng

Các đối tượng được bao gồm

AiVision.AI_OBJECT

— Bóng thể thao
— Thùng màu xanh dương
— Thùng màu cam

AiVision.TAG_OBJECT

— Mã định danh AprilTag

AiVision.COLOR_OBJECT

— Chữ ký màu sắc

AiVision.CODE_OBJECT

— Mã màu

# Display if an AprilTag ID or AI Classification
# is detected
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    vision_data = robot.vision.get_data(ALL_VISION)
    if vision_data[0].exists:
        if vision_data[0].type == AiVision.AI_OBJECT:
            robot.screen.print("AI Object!")
        elif vision_data[0].type == AiVision.TAG_OBJECT:
            robot.screen.print("AprilTag ID!")
    wait(0.1, SECONDS)

# Display a list of all detected objects
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    vision_data = robot.vision.get_data(ALL_VISION)

    if vision_data[0].exists:
        for obj in vision_data:
            if obj.type == AiVision.AI_OBJECT:
                robot.screen.print("- AI Object")
            elif obj.type == AiVision.TAG_OBJECT:
                robot.screen.print("- AprilTag ID")
            robot.screen.next_row()

    wait(0.1, SECONDS)

Các hàm tạo#

Creating a Color Signature#

Một Chữ ký Màu mới được tạo bằng cách sử dụng hàm tạo Colordesc và sau đó được đăng ký với Cảm biến Thị giác AI bằng phương thức color_description Một đối tượng Colordesc định nghĩa 1 trong số tối đa 7 chữ ký màu có thể phát hiện được cho cảm biến, nhưng nó phải được thiết lập rõ ràng bằng cách sử dụng color_description để có hiệu lực.

Cách sử dụng Colordesc:
Colordesc(index, red, green, blue, hangle, hdsat)

Tham số

Sự miêu tả

index

Một số nguyên từ 1 đến 7 biểu thị chỉ số Chữ ký Màu. Nếu hai Chữ ký Màu sử dụng cùng một chỉ số, chỉ số của Chữ ký Màu thứ hai sẽ được ưu tiên hơn chỉ số của Chữ ký Màu thứ nhất.

red

Một số nguyên từ 0 đến 255 biểu thị thành phần màu đỏ.

green

Một số nguyên từ 0 đến 255 biểu thị thành phần màu xanh lá cây của màu sắc.

blue

Một số nguyên từ 0 đến 255 biểu thị thành phần màu xanh lam của màu sắc.

hangle

Một số thực từ 1 đến 40 biểu thị phạm vi màu sắc theo độ.

hdsat

Một giá trị thập phân từ 0,10 đến 1,00 biểu thị phạm vi bão hòa.

Cách sử dụng color_description:
robot.vision.color_description(object)

Tham số

Sự miêu tả

object

Đối tượng Colordesc được thiết lập làm Chữ ký màu có thể phát hiện được.

# Detect a red object
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
robot.vision.color_description(red_box)

while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)

    red_boxes = robot.vision.get_data(red_box)

    if red_boxes[0].exists:
        robot.screen.print("Red detected!")
    else:
        robot.screen.print("No red detected.")

    wait(0.2, SECONDS)

Creating a Color Code#

Một Mã Màu mới được tạo bằng cách sử dụng hàm tạo Codedesc và sau đó được kích hoạt bằng phương thức code_description Một Mã Màu nhóm từ 2 đến 4 đối tượng Colordesc hiện có thành một mã định danh duy nhất mà Cảm biến Thị giác AI có thể phát hiện dưới dạng một chuỗi, nhưng nó phải được thiết lập rõ ràng bằng cách sử dụng code_description để có hiệu lực.

Cách sử dụng Codedesc:
Codedesc(index, c1, c2, c3, c4, c5)

Tham số

Sự miêu tả

index

Chỉ số của Mã màu, từ 1 đến 8. Lưu ý: Nếu bạn tạo hai đối tượng Codedesc có cùng chỉ số, đối tượng thứ hai sẽ ghi đè lên đối tượng đầu tiên.

c1

Đối tượng Colordesc đầu tiên trong mã.

c2

Đối tượng Colordesc thứ hai trong mã.

c3

Tùy chọn. Một đối tượng thứ ba có thuộc tính Colordesc.

c4

Tùy chọn. Một đối tượng thứ tư có thuộc tính Colordesc.

code_description Cách sử dụng:
robot.vision.code_description(object)

Tham số

Sự miêu tả

object

Một đối tượng Codedesc để đăng ký như một Mã màu có thể phát hiện được.

# Create Color Signatures
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
purple_box = Colordesc(2, 98, 18, 227, 10.00, 0.20)

robot.vision.color_description(red_box)
robot.vision.color_description(purple_box)

# Detect a red_purple Color Code
red_purple = Codedesc(1, red_box, purple_box)
robot.vision.code_description(red_purple)

while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)

    code_objects = robot.vision.get_data(red_purple)

    if code_objects[0].exists:
        robot.screen.print("Code detected!")
    else:
        robot.screen.print("No code detected.")

    wait(0.2, SECONDS)