Görüntü Sensörü#

giriiş#

Görsel Sensör, renk imzalarını ve renk kodlarını algılayıp izleyebilen, kamera tabanlı bir sensördür. Bir robotun çevresini analiz etmesine ve görsel girdilere yanıt vermesine olanak tanır.

Aşağıdaki örneklerde, yapılandırılmış Vision Sensor’a vision_1adı verilecek ve yapılandırılmış Color Signature nesneleri, RED_BOX, bu API dokümantasyonunda Vision sınıf yöntemlerine atıfta bulunulurken sonraki tüm örneklerde kullanılacaktır.

Aşağıda tüm yöntemlerin listesi bulunmaktadır:

Veri Alıcılar — Görüntü Sensöründen veri alın.

  • take_snapshot — Belirli bir imza için verileri yakalar.

  • installed — Görme Sensörünün IQ (2. nesil) Beynine bağlı olup olmadığı.

Özellikler — take_snapshot’den döndürülen nesne verileri.

  • largest_object — Vision Sensor anlık görüntüsünden en büyük nesneyi hemen seçin.

  • .exists — Nesnenin mevcut tespitte var olup olmadığı.

  • .width — Tespit edilen nesnenin genişliği.

  • .height — Tespit edilen nesnenin yüksekliği.

  • .centerX — Nesnenin merkezinin X konumu.

  • .centerY — Nesnenin merkezinin Y konumu.

  • .angle — Renk Kodunun Yönü.

  • .originX — Nesnenin sol üst köşesinin X konumu.

  • .originY — Nesnenin sol üst köşesinin Y konumu.

Yapıcılar — Sensörleri manuel olarak başlatın ve yapılandırın.

  • Vision — Bir Görüntü Sensörü Oluşturur.

  • Signature — Bir Renk İmzası Oluşturur.

  • Code — Bir Renk Kodu Oluşturur.

Getters#

take_snapshot#

take_snapshot , Vision Sensor çerçevesindeki verileri tek bir imzaya (sensörün tanıyabileceği bir şeyin kaydedilmiş açıklaması, örneğin yapılandırılmış bir Renk İmzası veya Renk Kodu) filtreler ve bir demet döndürür.

Renk İmzaları ve Renk Kodları bu yöntemle kullanılabilmeleri için önce Vision Utility’de yapılandırılmalıdır.

Bu demet, 0 indeksinden başlayarak genişliğe göre en büyükten en küçüğe doğru sıralanmış nesneleri saklar. Her nesnenin özelliklerine indeksi kullanılarak erişilebilir. Eşleşen nesne bulunmazsa boş bir demet döndürülür.

Usage:
vision_1.take_snapshot(SIGNATURE)

Parametreler

Tanım

SIGNATURE

Veri kümesini yalnızca belirtilen imzaya ait verileri içerecek şekilde filtreler. Mevcut imzalar şunlardır:

  • Renk İmzaları veya Renk Kodları - Görsel Sensörün adı, iki alt çizgi ve ardından Renk İmzasının veya Renk Kodunun adı. Örneğin: 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)

Renk İmzaları#

Renk İmzası, Görsel Sensörün tanıyabileceği benzersiz bir renktir. Bu imzalar, Görsel Sensörün nesneleri renklerine göre algılamasına ve izlemesine olanak tanır. Bir Renk İmzası yapılandırıldıktan sonra, sensör görüş alanındaki o belirli renkteki nesneleri tanımlayabilir. Renk imzaları, renkli nesneleri gerçek zamanlı olarak işlemek ve algılamak için take_snapshot ile birlikte kullanılır.

Bir projede yapılandırılmış bir Renk İmzası kullanabilmek için, imzanın adı Görsel Sensörün adından, iki alt çizgiden ve ardından Renk İmzasının adından oluşmalıdır. Örneğin: 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)

Renk Kodları#

Renk kodu, belirli bir düzende düzenlenmiş renk imzalarından oluşan yapılandırılmış bir desendir. Bu kodlar, görüş sensörünün önceden tanımlanmış renk desenlerini tanımasını sağlar. Renk kodları, karmaşık nesneleri tanımlamak veya otonom navigasyon için benzersiz işaretler oluşturmak için kullanışlıdır.

Bir projede yapılandırılmış bir Renk Kodunu kullanabilmek için, kodun adı sensörün adından, iki alt çizgiden ve ardından Renk Kodunun adından oluşmalıdır. Örneğin: 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 Boolean değeri döndürerek Vision Sensor’ün şu anda IQ (2. nesil) Beynine bağlı olup olmadığını gösterir.

  • True — Görüntü Sensörü, IQ (2. nesil) Beynine bağlıdır.

  • False — Görüntü Sensörü, IQ (2. nesil) Beynine bağlı değil.

Usage:
vision_1.installed()

Parametreler

Tanım

Bu yöntemin parametresi yoktur.

# Display a message if the Vision Sensor is connected
if vision_1.installed():
    brain.screen.print("Installed!")

Özellikler#

largest_object#

largest_object take_snapshot’ün en son kullanımından döndürülen demetteki verileri almak için tespit edilen en büyük nesneyi alır.

Bu yöntem, indeks belirtmeden her zaman bir demetten en büyük nesneyi almak için kullanılabilir.

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#

take_snapshot kullanıldıktan sonra bir demette saklanan her nesneyle birlikte sekiz özellik dahil edilir.

Tüm özellik değerleri, take_snapshot kullanıldığı anda Vision Sensor’ün görüş alanındaki algılanan nesnenin konumunu ve boyutunu tanımlar. Bu değerler, sensörün 316 x 212 piksel çözünürlüğüne bağlı olarak piksel cinsinden ölçülür.

.vardır#

.exists ifadesi, indeksin demette olup olmadığını gösteren bir Boolean değer döndürür.

  • True — Dizin mevcut.

  • False — Dizin mevcut değil.

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

.Genişlik#

.width algılanan nesnenin piksel cinsinden genişliğini döndürür; bu, 1 ile 316 arasında bir tam sayıdır.

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

.yükseklik#

.height fonksiyonu, tespit edilen nesnenin piksel cinsinden yüksekliğini döndürür; bu değer 1 ile 212 arasında bir tam sayıdır.

# 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 tespit edilen nesnenin merkezinin x koordinatını piksel cinsinden döndürür; bu, 0 ile 316 arasında bir tam sayıdır.

# 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 fonksiyonu, tespit edilen nesnenin merkezinin y koordinatını piksel cinsinden döndürür; bu değer 0 ile 212 arasında bir tamsayıdır.

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

.açı#

.angle fonksiyonu, tespit edilen nesnenin yönünü derece cinsinden döndürür; bu değer 0 ile 359 arasında bir tamsayıdır.

# 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 tespit edilen nesnenin sınırlayıcı kutusunun sol üst köşesinin x koordinatını piksel cinsinden döndürür; bu, 0 ile 316 arasında bir tam sayıdır.

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

.orijinY#

.originY tespit edilen nesnenin sınırlayıcı kutusunun sol üst köşesinin y koordinatını piksel cinsinden döndürür; bu, 0 ile 212 arasında bir tam sayıdır.

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

İnşaatçılar#

Yapıcılar, VEXcode dışında sensörleri yapılandırmak için gerekli olan Vision, Signatureve Code nesnelerini manuel olarak oluşturmak için kullanılır.

Vision Sensor#

Vision bir Görüntü Sensörü oluşturur.

Kullanım

Vision(port, brightness, sigs)

Parametreler

Tanım

port

Görüntü sensörünün bağlı olduğu Akıllı Bağlantı Noktası (1’den 12’ye kadar).

brightness

İsteğe bağlı. Görüntü sensörünün parlaklık değeri, 1 ile 100 arasında.

sigs

İsteğe bağlı. Bir veya daha fazla Renk İmzası veya Renk Kodu nesnesinin adı.

Örnek

# 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 , bir Renk İmzası oluşturur. Bir Görüntü Sensöründe aynı anda yedi farklı Renk İmzası saklanabilir.

Kullanım:

Signature(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)

Parametre

Tanım

index

Signature nesnesinin indeksi, 1 - 7 arasındadır. Not: Aynı indeks numarasına sahip iki Signature nesnesi oluşturmak, oluşturulan ikinci nesnenin birincisini geçersiz kılmasına neden olur.

uMin

Vision Utility’deki değer uMin arasındadır.

uMax

Vision Utility’deki değer uMax arasındadır.

uMean

Görme Yardımcı Programı’nda uMean arasındaki değer.

vMin

Vision Utility’deki vMin değeri.

vMax

Vision Utility’deki vMax değeri başlar.

vMean

Vision Utility’deki vMean arasındaki değer.

rgb

Vision Utility’deki rgb değeri rgb arasındadır.

type

Vision Utility’deki type kadar olan değer.

Renk İmzası oluşturmak için değerleri elde etmek üzere Görsel Yardımcı Programı’ya gidin. Bir Renk İmzası yapılandırıldıktan sonra, Yapılandırma penceresinden parametre değerlerini kopyalayın.

Örnek

# 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 bir Renk Kodu oluşturur. Kullanılabilmesi için en az iki önceden tanımlanmış Renk İmzası gerektirir. Bir Görsel Sensörde aynı anda sekiz farklı Renk Kodu saklanabilir.

Kullanım:

Code(sig1, sig2, sig3, sig4, sig5)

Parametre

Tanım

sig1

Daha önce oluşturulmuş bir Renk İmzası.

sig2

Daha önce oluşturulmuş bir Renk İmzası.

sig3

İsteğe bağlı. Daha önce oluşturulmuş bir Renk İmzası.

sig4

İsteğe bağlı. Daha önce oluşturulmuş bir Renk İmzası.

sig5

İsteğe bağlı. Daha önce oluşturulmuş bir Renk İmzası.

Örnek

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