Penglihatan#
Perkenalan#
Sensor Penglihatan untuk VEX EXP mendeteksi dan melacak Tanda Warna dan Kode Warna. Hal ini memungkinkan Sensor Penglihatan untuk menganalisis lingkungan sekitarnya dan bereaksi berdasarkan data visual yang terdeteksi.
Halaman ini menggunakan vision_1, RED_BOX, dan BOX_CODE sebagai contoh nama Sensor Penglihatan, Tanda Warna, dan Kode Warna. Ganti dengan nama yang telah Anda konfigurasi sesuai kebutuhan.
Berikut adalah daftar semua metode:
Getters – Mengambil data dari Sensor Penglihatan.
take_snapshot– Mengambil data untuk Tanda Warna atau Kode Warna tertentu.largest_object– Pilih objek terbesar dari snapshot.installed– Apakah Sensor Penglihatan terhubung ke EXP Brain.
Properti – Data objek yang dikembalikan dari take_snapshot.
.exists– Apakah objek tersebut ada dalam deteksi saat ini..width– Lebar objek yang terdeteksi..height– Tinggi objek yang terdeteksi..centerX– Posisi X dari pusat objek..centerY– Posisi Y dari pusat objek..angle– Orientasi Kode Warna..originX– Posisi X dari sudut kiri atas objek..originY– Posisi Y dari sudut kiri atas objek.
Konstruktor – Menginisialisasi dan mengkonfigurasi Sensor Penglihatan dan tanda tangannya secara manual.
Pencari#
take_snapshot#
take_snapshot menyaring data dari bingkai Sensor Penglihatan ke satu tanda tangan tunggal — deskripsi tersimpan dari sesuatu yang dapat dikenali oleh sensor, seperti Tanda Tangan Warna atau Kode Warna yang dikonfigurasi — dan mengembalikan sebuah tuple.
Tanda Warna dan Kode Warna harus dikonfigurasi terlebih dahulu di Vision Utility sebelum dapat digunakan dengan metode ini.
Tuple menyimpan objek yang diurutkan dari yang terbesar hingga terkecil berdasarkan lebar, dimulai dari indeks 0. Properti setiap objek dapat diakses menggunakan indeksnya. Tuple kosong akan dikembalikan jika tidak ada objek yang cocok yang terdeteksi.
Usage:
vision_1.take_snapshot(SIGNATURE)
Parameter |
Keterangan |
|---|---|
|
Memfilter dataset agar hanya menyertakan data dari tanda tangan yang diberikan. Tanda tangan yang tersedia adalah:
|
# 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)
Tanda Warna#
Tanda warna adalah warna unik yang dapat dikenali oleh Sensor Penglihatan. 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 take_snapshot untuk memproses dan mendeteksi objek berwarna secara real-time.
Untuk menggunakan Tanda Warna yang telah dikonfigurasi dalam sebuah proyek, namanya harus berupa nama Sensor Penglihatan, dua garis bawah, dan kemudian nama Tanda Warna tersebut. Contoh: 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)
Kode Warna#
Kode warna adalah pola terstruktur yang terdiri dari tanda warna yang disusun dalam urutan tertentu. Kode-kode ini memungkinkan Sensor Penglihatan untuk mengenali pola warna yang telah ditentukan sebelumnya. Kode warna berguna untuk mengidentifikasi objek kompleks atau membuat penanda unik untuk navigasi otonom.
Untuk menggunakan Kode Warna yang telah dikonfigurasi dalam sebuah proyek, namanya harus berupa nama Sensor Penglihatan, dua garis bawah, dan kemudian nama Kode Warna. Contoh: 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 mengambil objek terbesar yang terdeteksi untuk mendapatkan data dari tuple yang dikembalikan dari penggunaan terakhir take_snapshot.
Metode ini dapat digunakan untuk selalu mendapatkan objek terbesar dari sebuah tuple tanpa perlu menentukan indeks.
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 mengembalikan nilai Boolean yang menunjukkan apakah Sensor Penglihatan saat ini terhubung ke EXP Brain.
True– Sensor Penglihatan terhubung ke EXP Brain.False– Sensor Penglihatan tidak terhubung ke EXP Brain.
Usage:
vision_1.installed()
Parameter |
Keterangan |
|---|---|
Metode ini tidak memiliki parameter. |
# Display a message if the Vision Sensor is connected
if vision_1.installed():
brain.screen.print("Vision Sensor Installed!")
Properti#
Ada delapan properti yang disertakan dengan setiap objek yang disimpan dalam tuple setelah take_snapshot digunakan.
Semua nilai properti menjelaskan posisi dan ukuran objek yang terdeteksi dalam pandangan Sensor Penglihatan pada saat take_snapshot digunakan. Nilai-nilai ini diukur dalam piksel, berdasarkan resolusi sensor 316 x 212 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 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 mengembalikan lebar objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 1 dan 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 mengembalikan tinggi objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 1 dan 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 mengembalikan koordinat x dari pusat objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 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 mengembalikan koordinat y dari pusat objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 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 mengembalikan orientasi objek yang terdeteksi dalam derajat, yang merupakan bilangan bulat antara 0 dan 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 mengembalikan koordinat x dari sudut kiri atas kotak pembatas objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 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 mengembalikan koordinat y dari sudut kiri atas kotak pembatas objek yang terdeteksi dalam piksel, yang merupakan bilangan bulat antara 0 dan 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)
Konstruktor#
Konstruktor digunakan untuk membuat objek Vision, Signature, dan Code secara manual, yang diperlukan untuk mengkonfigurasi Sensor Penglihatan di luar VEXcode.
Vision#
Vision menciptakan Sensor Penglihatan.
Penggunaan
Vision(smartport, brightness, sigs)
Parameter |
Keterangan |
|---|---|
|
Port Pintar yang terhubung dengan Sensor Penglihatan, ditulis sebagai |
|
Opsional. Nilai kecerahan untuk Sensor Penglihatan, dari 1 hingga 100. |
|
Opsional. Nama satu atau lebih objek Tanda Tangan Warna atau Kode Warna dipisahkan oleh koma ( |
# 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 membuat Tanda Tangan Warna. Hingga tujuh Tanda Tangan Warna berbeda dapat disimpan pada Sensor Penglihatan sekaligus.
Penggunaan:
Signature(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)
Parameter |
Keterangan |
|---|---|
|
Indeks objek |
|
Nilai dari |
|
Nilai dari |
|
Nilai |
|
Nilai dari |
|
Nilai dari |
|
Nilai dari |
|
Nilai dari |
|
Nilai dari |
Untuk mendapatkan nilai-nilai untuk membuat Tanda Warna, buka Utilitas Visi. Setelah Tanda Warna dikonfigurasi, salin nilai parameter dari jendela Konfigurasi.
"""
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#
Code membuat Kode Warna. Kode ini membutuhkan setidaknya dua Tanda Tangan Warna yang telah ditentukan agar dapat digunakan. Hingga delapan Kode Warna berbeda dapat disimpan pada Sensor Penglihatan sekaligus.
Penggunaan:
Code(sig1, sig2, sig3, sig4, sig5)
Parameter |
Keterangan |
|---|---|
|
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. |
# 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)