Visi AI#
Perkenalan#
Sensor Penglihatan AI pada Robot Coding VEX AIM mendeteksi dan melacak objek, warna, dan ID AprilTag. Hal ini memungkinkan robot untuk menganalisis lingkungannya, mengikuti objek, dan bereaksi berdasarkan data visual yang terdeteksi.
Sensor Penglihatan AI memiliki resolusi 320×240 piksel. Titik asal (0, 0) terletak di pojok kiri atas, sehingga pusat sensor berada di (160, 120), seperti yang ditunjukkan pada diagram di bawah ini:

Berikut adalah daftar semua metode dan properti:
Aksi — Tampilkan atau sembunyikan tampilan kamera AI Vision.
show_aivision— Menampilkan umpan AI Vision di layar robot.hide_aivision— Menyembunyikan umpan AI Vision dari layar.tag_detection— Mengaktifkan atau menonaktifkan deteksi ID AprilTag.
Getters — Mendeteksi apakah robot sedang memegang suatu objek.
get_data— Mengembalikan tuple objek yang terdeteksi untuk tanda tangan tertentu.has_sports_ball— Mengembalikan apakah robot memiliki bola olahraga.has_any_barrel— Mengembalikan apakah robot memiliki jenis barel apa pun.has_blue_barrel— Mengembalikan apakah robot memiliki barel biru.has_orange_barrel— Mengembalikan apakah robot memiliki barel oranye.
Properti — Data objek yang dikembalikan dari get_data.
exists— Apakah objek tersebut ada dalam deteksi saat ini sebagai Boolean.width— Lebar objek yang terdeteksi.height— Tinggi objek yang terdeteksi.centerX— Posisi X dari pusat objek.centerY— Posisi Y dari pusat objek.bearing— Sudut horizontal relatif terhadap bagian depan robot.rotation— Orientasi objek.originX— Posisi X dari sudut kiri atas objek.originY— Posisi Y dari sudut kiri atas objek.id— Klasifikasi atau ID tag objek.score— Skor kepercayaan untuk Klasifikasi AI.type— Mengembalikan tipe objek (AI, Tag, Warna, atau Kode).
Konstruktor — Mendefinisikan tanda dan kode warna.
Buat Tanda Warna — Membuat Tanda Warna baru berdasarkan rentang RGB dan hue/saturasi.
Buat Kode Warna — Menggabungkan beberapa Tanda Warna menjadi satu Kode Warna.
Tindakan#
show_aivision#
Perintah show_aivision menampilkan umpan data langsung dari Sensor Visi AI pada layar robot. Umpan data langsung akan menutupi gambar atau teks lain di layar.
Catatan: Layar tidak akan menampilkan gambar atau teks lain kecuali hide_aivision digunakan untuk menyembunyikan feed.
Usage:
robot.screen.show_aivision()
Parameter |
Keterangan |
|---|---|
Metode ini tidak memiliki parameter. |
# Watch the AI Vision Sensor detect AI Classifications
# and AprilTag IDs as you move the robot
robot.screen.show_aivision()
hide_aivision#
hide_aivision menghapus umpan data langsung dari Sensor Penglihatan AI dari layar robot.
Usage:
robot.screen.hide_aivision()
Parameter |
Keterangan |
|---|---|
Metode ini tidak memiliki parameter. |
# 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 mengaktifkan atau menonaktifkan deteksi ID AprilTag, di mana statusnya adalah nilai Boolean.
Sensor ini dapat mendeteksi ID AprilTag 0 hingga 36 dari keluarga Circle21h7.
Usage:
robot.vision.tag_detection(state)
Parameter |
Keterangan |
|---|---|
|
Nilainya adalah: |
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)
Pencari#
get_data#
get_data memfilter data dari frame AI Vision Sensor ke tanda tangan tunggal — deskripsi tersimpan dari sesuatu yang dapat dikenali sensor, seperti objek yang telah dilatih sebelumnya, ID AprilTag, atau Tanda Tangan Warna atau Kode Warna yang dikonfigurasi — dan mengembalikan tuple.
Tanda Warna dan Kode Warna harus dikonfigurasi terlebih dahulu di AI Vision Utility sebelum dapat digunakan dengan metode ini.
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:
robot.vision.get_data(signature, count)
Parameter |
Keterangan |
|---|---|
|
Memfilter dataset agar hanya menyertakan data dengan tanda tangan yang diberikan. Tanda tangan yang tersedia adalah:
|
|
Opsional. Mengatur jumlah maksimum objek yang dapat dikembalikan dari 1 hingga 24 (default: 8). |
Catatan: ID AprilTag 5 hingga 37 dapat diperoleh dengan menggunakan ID AprilTag yang dicetak dari 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)
Catatan: Tuple yang dikembalikan dapat diurutkan berdasarkan properti apa pun, bukan hanya lebar, menggunakan fungsi sorted Python. Misalnya, mengurutkan berdasarkan ID AprilTag:
# 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)
Atau mengurutkan berdasarkan tinggi badan:
# 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)
Melihat Data#
Mencetak tuple yang dikembalikan oleh get_data menampilkan daftar semua properti dari semua objek yang terdeteksi:
# 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)

Klasifikasi AI#
Sensor Penglihatan AI AIM dapat mendeteksi Klasifikasi AI berikut:
Nomor ID |
Klasifikasi AI |
Tanda tangan |
|---|---|---|
0 |
Bola |
|
1 |
Tong Biru |
|
2 |
Tong Jeruk |
|
3 |
Robot AIM |
|
Tanda Warna#
Tanda warna adalah warna unik yang dapat dikenali oleh Sensor Visi AI. Tanda warna ini memungkinkan sensor untuk mendeteksi dan melacak objek berdasarkan warnanya. Setelah Tanda Warna dikonfigurasi, sensor dapat mengidentifikasi objek dengan warna spesifik tersebut dalam bidang pandangnya. Tanda warna digunakan dengan get_data untuk memproses dan mendeteksi objek berwarna secara real-time.

# 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!")
Kode Warna#
Kode warna adalah pola terstruktur yang terdiri dari 2 hingga 4 tanda warna yang disusun dalam urutan tertentu. Kode-kode ini memungkinkan Sensor Penglihatan AI untuk mengenali pola warna yang telah ditentukan sebelumnya. Kode warna berguna untuk mengidentifikasi objek kompleks atau membuat penanda unik untuk navigasi otonom.

# 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 mengembalikan nilai Boolean yang menunjukkan apakah robot saat ini memiliki bola olahraga.
True— Robot itu memiliki bola olahraga.False— Robot tersebut tidak memiliki bola olahraga.
Usage:
robot.has_sports_ball()
Parameter |
Keterangan |
|---|---|
Metode ini tidak memiliki parameter. |
# 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 mengembalikan nilai Boolean yang menunjukkan apakah robot saat ini memiliki jenis barel apa pun.
True— Robot itu memiliki sebuah tong.False— Robot tersebut tidak memiliki tong.
Usage:
robot.has_any_barrel()
Parameter |
Keterangan |
|---|---|
Metode ini tidak memiliki parameter. |
# 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 mengembalikan nilai Boolean yang menunjukkan apakah robot saat ini memiliki barel biru.
True— Robot itu memiliki tong berwarna biru.False— Robot tersebut tidak memiliki tong berwarna biru.
Usage:
robot.has_blue_barrel()
Parameter |
Keterangan |
|---|---|
Metode ini tidak memiliki parameter. |
# 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 mengembalikan nilai Boolean yang menunjukkan apakah robot saat ini memiliki tong berwarna oranye.
True— Robot itu memiliki tong berwarna oranye.False— Robot tersebut tidak memiliki tong berwarna oranye.
Usage:
robot.has_orange_barrel()
Parameter |
Keterangan |
|---|---|
Metode ini tidak memiliki parameter. |
# Push an orange barrel away when detected
while True:
if robot.has_orange_barrel():
robot.kicker.place()
wait(50, MSEC)
Properti#
Ada dua belas properti yang disertakan dengan setiap objek yang disimpan dalam tuple setelah metode robot.vision.get_data digunakan.
Semua nilai properti kecuali .id, .score, dan .type menjelaskan posisi, ukuran, orientasi, atau arah objek yang terdeteksi pada saat robot.vision.get_data digunakan. Nilai-nilai ini diukur dalam piksel atau derajat, berdasarkan resolusi sensor 320 x 240 piksel.

.exists#
.exists mengembalikan nilai Boolean yang menunjukkan apakah indeks tersebut ada dalam tuple atau tidak.
True— Indeks tersebut ada.False— Indeks tidak ada.
# 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 mengembalikan lebar objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 1 dan 320.
Catatan: Nilai piksel relatif terhadap sistem koordinat sensor. Lihat diagram di Pendahuluan untuk referensi.

# 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 mengembalikan tinggi objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 1 dan 240.
Catatan: Nilai piksel relatif terhadap sistem koordinat sensor. Lihat diagram di Pendahuluan untuk referensi.

# 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 mengembalikan koordinat x dari pusat objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 320.
Catatan: Nilai piksel relatif terhadap sistem koordinat sensor. Lihat diagram di Pendahuluan untuk referensi.

# 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 mengembalikan koordinat y dari pusat objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 240.
Catatan: Nilai piksel relatif terhadap sistem koordinat sensor. Lihat diagram di Pendahuluan untuk referensi.

# 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 mengembalikan nilai desimal (float) yang menunjukkan seberapa jauh suatu objek berada di sebelah kiri atau kanan pusat pandangan Sensor Penglihatan AI dalam derajat. Nilai 0 berarti berada di tengah, nilai positif berarti objek berada di sebelah kanan, dan nilai negatif berarti objek berada di sebelah kiri.
# 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 mengembalikan orientasi objek pada bidang pandang Sensor Visi AI, diukur dalam derajat dari 0 hingga 359. Kode Warna adalah 0° ketika warnanya disusun dalam garis horizontal (misalnya, Merah–Biru). Jika warnanya diputar, sudutnya berubah (misalnya, menyusun Biru-Merah mengembalikan 180°).
Untuk contoh di bawah ini, Kode Warna telah dikonfigurasi dengan warna merah di sebelah kiri dan warna biru di sebelah kanan.
Dalam gambar ini, menempatkan warna biru di atas warna merah setara dengan memutar Kode Warna asli sebesar 270 derajat ke kanan.

# 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 mengembalikan koordinat x dari sudut kiri atas kotak pembatas objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 320.
Catatan: Nilai piksel relatif terhadap sistem koordinat sensor. Lihat diagram di Pendahuluan untuk referensi.

# 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 mengembalikan koordinat y dari sudut kiri atas kotak pembatas objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 240.
Catatan: Nilai piksel relatif terhadap sistem koordinat sensor. Lihat diagram di Pendahuluan untuk referensi.

# 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 mengembalikan ID Klasifikasi AI yang terdeteksi atau ID AprilTag sebagai bilangan bulat.
Untuk ID AprilTag, properti .id mewakili nomor ID AprilTag yang terdeteksi dalam rentang 0 hingga 37. Untuk Klasifikasi AI, properti .id sesuai dengan ID yang telah ditentukan sebelumnya di bagian Klasifikasi 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 mengembalikan skor kepercayaan dari Klasifikasi AI yang terdeteksi sebagai bilangan bulat antara 1 dan 100.
Skor yang lebih rendah berarti sensor kurang yakin terhadap objek yang terdeteksi, sedangkan skor yang lebih tinggi berarti sensor lebih yakin.
# 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 mengembalikan bilangan bulat yang menunjukkan tipe objek yang terdeteksi. Anda dapat membandingkan nilai ini menggunakan nomor tipe atau konstanta bernama yang sesuai:
Jenis Objek |
Objek yang disertakan |
|---|---|
|
— Bola olahraga |
|
— ID AprilTag |
|
— Tanda warna |
|
— Kode warna |
# 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)
Konstruktor#
Creating a Color Signature#
Tanda Warna baru dibuat menggunakan konstruktor Colordesc dan kemudian didaftarkan ke Sensor Visi AI menggunakan metode color_description Objek Colordesc mendefinisikan 1 dari hingga 7 tanda warna yang dapat dideteksi untuk sensor, tetapi harus diatur secara eksplisit menggunakan color_description agar berlaku.
Penggunaan Colordesc:
Colordesc(index, red, green, blue, hangle, hdsat)
Parameter |
Keterangan |
|---|---|
|
Bilangan bulat dari 1 hingga 7 yang mewakili indeks Tanda Warna. Jika dua Tanda Warna menggunakan indeks yang sama, yang kedua akan menggantikan yang pertama. |
|
Bilangan bulat dari 0 hingga 255 untuk komponen merah dari warna tersebut. |
|
Bilangan bulat dari 0 hingga 255 untuk komponen hijau dari warna tersebut. |
|
Bilangan bulat dari 0 hingga 255 untuk komponen biru dari warna tersebut. |
|
Angka desimal dari 1 hingga 40 yang mewakili rentang warna dalam derajat. |
|
Bilangan floating point dari 0,10 hingga 1,00 yang mewakili rentang saturasi. |
Penggunaan color_description:
robot.vision.color_description(object)
Parameter |
Keterangan |
|---|---|
|
Objek |
# 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#
Kode Warna baru dibuat menggunakan konstruktor Codedesc dan kemudian diaktifkan menggunakan metode code_description Kode Warna mengelompokkan 2 hingga 4 objek Colordesc yang ada menjadi satu pengidentifikasi tunggal yang dapat dideteksi oleh Sensor Penglihatan AI sebagai sebuah urutan, tetapi harus diatur secara eksplisit menggunakan code_description agar berlaku.
Penggunaan Codedesc:
Codedesc(index, c1, c2, c3, c4, c5)
Parameter |
Keterangan |
|---|---|
|
Indeks Kode Warna, dari 1 hingga 8. Catatan: Jika Anda membuat dua objek |
|
Objek |
|
Objek |
|
Opsional. Objek |
|
Opsional. Objek |
Penggunaan code_description:
robot.vision.code_description(object)
Parameter |
Keterangan |
|---|---|
|
Objek |
# 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)