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:

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ả |
|---|---|
|
Các giá trị là: |
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ả |
|---|---|
|
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à:
|
|
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)

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 |
|
1 |
Thùng Xanh |
|
2 |
Thùng màu cam |
|
3 |
Robot AIM |
|
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.

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

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

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

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

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

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

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

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

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

# 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 |
|---|---|
|
— Bóng thể thao |
|
— Mã định danh AprilTag |
|
— Chữ ký màu sắc |
|
— 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ả |
|---|---|
|
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. |
|
Một số nguyên từ 0 đến 255 biểu thị thành phần màu đỏ. |
|
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. |
|
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. |
|
Một số thực từ 1 đến 40 biểu thị phạm vi màu sắc theo độ. |
|
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ả |
|---|---|
|
Đối tượng |
# 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ả |
|---|---|
|
Chỉ số của Mã màu, từ 1 đến 8. Lưu ý: Nếu bạn tạo hai đối tượng |
|
Đối tượng |
|
Đối tượng |
|
Tùy chọn. Một đối tượng thứ ba có thuộc tính |
|
Tùy chọn. Một đối tượng thứ tư có thuộc tính |
code_description Cách sử dụng:
robot.vision.code_description(object)
Tham số |
Sự miêu tả |
|---|---|
|
Một đối tượng |
# 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)