Sensor Penglihatan#

Perkenalan#

Sensor Penglihatan adalah sensor berbasis kamera yang dapat mendeteksi dan melacak Tanda Warna dan Kode Warna. Sensor ini memungkinkan robot untuk menganalisis lingkungan sekitarnya dan merespons masukan visual.

Untuk contoh-contoh di bawah ini, Vision Sensor yang dikonfigurasi akan diberi nama vision_1, dan objek Color Signature yang dikonfigurasi, seperti RED_BOX, akan digunakan di semua contoh selanjutnya di seluruh dokumentasi API ini ketika merujuk ke metode kelas Vision.

Berikut adalah daftar semua metode:

Getters — Mengambil data dari Sensor Penglihatan.

  • take_snapshot — Mengambil data untuk tanda tangan tertentu.

  • installed — Apakah Sensor Penglihatan terhubung ke IQ (generasi ke-2) Brain.

Properti — Data objek yang dikembalikan dari take_snapshot.

  • largest_object — Pilih objek terbesar secara langsung dari cuplikan Sensor Penglihatan.

  • .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 — Inisialisasi dan konfigurasikan sensor secara manual.

  • Vision — Membuat Sensor Penglihatan.

  • Signature — Membuat Tanda Tangan Warna.

  • Code — Membuat Kode Warna.

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

SIGNATURE

Memfilter dataset agar hanya menyertakan data dari tanda tangan yang diberikan. Tanda tangan yang tersedia adalah:

  • Tanda Tangan Warna atau Kode Warna - Nama Sensor Penglihatan, dua garis bawah, dan kemudian nama Tanda Tangan Warna atau Kode Warna. Misalnya: vision_1__RED_BOX.

# 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 Penglihatan 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, dua garis bawah, dan kemudian nama Kode Warna tersebut. 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)

installed#

installed mengembalikan nilai Boolean yang menunjukkan apakah Sensor Penglihatan saat ini terhubung ke IQ (generasi ke-2) Brain.

  • True — Sensor Penglihatan terhubung ke IQ Brain (generasi ke-2).

  • False — Sensor Penglihatan tidak terhubung ke IQ Brain (generasi ke-2).

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("Installed!")

Properti#

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)

Tuple Properties#

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.

.ada#

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

.lebar#

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

.tinggi#

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

.sudut#

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

.asalY#

.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 di luar VEXcode.

Vision Sensor#

Vision menciptakan Sensor Penglihatan.

Penggunaan

Vision(port, brightness, sigs)

Parameter

Keterangan

port

Port Pintar mana yang terhubung dengan Sensor Penglihatan, dari 1 hingga 12.

brightness

Opsional. Nilai kecerahan untuk Sensor Penglihatan, dari 1 hingga 100.

sigs

Opsional. Nama satu atau lebih objek Tanda Tangan Warna atau Kode Warna.

Contoh

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

index

Indeks objek Signature , dari 1 - 7. Catatan: Membuat dua objek Signature dengan nomor indeks yang sama akan menyebabkan objek kedua yang dibuat menimpa objek pertama.

uMin

Nilai dari uMin di Vision Utility.

uMax

Nilai dari uMax uMax di Vision Utility.

uMean

Nilai uMean pada Utilitas Penglihatan.

vMin

Nilai dari vMin di Vision Utility.

vMax

Nilai dari vMax di Vision Utility.

vMean

Nilai dari vMean di Vision Utility.

rgb

Nilai dari rgb di Vision Utility.

type

Nilai dari type di Vision Utility.

Untuk mendapatkan nilai-nilai untuk membuat Tanda Warna, buka Utilitas Visi. Setelah Tanda Warna dikonfigurasi, salin nilai parameter dari jendela Konfigurasi.

Contoh

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

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

sig1

A previously created Color Signature.

sig2

A previously created Color Signature.

sig3

Optional. A previously created Color Signature.

sig4

Optional. A previously created Color Signature.

sig5

Optional. A previously created Color Signature.

Contoh

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