Yapay Zeka Vizyonu#

giriiş#

VEX AIM Kodlama Robotunun Yapay Zeka Görsel Sensörü, nesneleri, renkleri ve AprilTag kimliklerini algılar ve izler. Bu sayede robot, çevresini analiz edebilir, nesneleri takip edebilir ve algılanan görsel verilere göre tepki verebilir.

Yapay Zeka Görüntü Sensörünün çözünürlüğü 320×240 pikseldir. Başlangıç ​​noktası (0, 0) sol üst köşede yer almaktadır ve sensörün merkezi aşağıdaki şemada gösterildiği gibi (160, 120) konumundadır:

AIM Yapay Zeka Görüntü Sensörünün çözünürlüğünü gösteren bir diyagram; diyagramın sol üst köşesinde 0, 0 koordinatı, sağ üst köşesinde 320, 0 ve sol alt köşesinde 0, 240 koordinatları, tam ortasında ise 160, 120 koordinatları bulunmaktadır.

Aşağıda tüm yöntemler ve özelliklerin listesi bulunmaktadır:

İşlemler — Yapay Zeka Görüntüleme kamerası görüntüsünü göster veya gizle.

  • show_aivision — Yapay Zeka Görüntü akışını robotun ekranında görüntüler.

  • hide_aivision — Yapay Zeka Görüntüsü akışını ekrandan gizler.

  • tag_detection — AprilTag ID algılamayı açar veya kapatır.

Alıcılar — Robotun bir nesneyi tutup tutmadığını algılar.

  • get_data — Belirli bir imza için tespit edilen nesnelerin bir demetini döndürür.

  • has_sports_ball — Robotun bir spor topuna sahip olup olmadığını döndürür.

  • has_any_barrel — Robotun herhangi bir varil türüne sahip olup olmadığını döndürür.

  • has_blue_barrel — Robotun mavi bir varile sahip olup olmadığını döndürür.

  • has_orange_barrel — Robotun turuncu bir varile sahip olup olmadığını döndürür.

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

  • exists — Nesnenin mevcut algılamada Boolean olarak 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.

  • bearing — Robotun ön tarafına göre yatay açı.

  • rotation — Nesnenin yönü.

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

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

  • id — Nesnenin sınıflandırma veya etiket kimliği.

  • score — Yapay Zeka Sınıflandırmaları için Güven Puanı.

  • type — Nesnenin türünü döndürür (Yapay Zeka, Etiket, Renk veya Kod).

Yapıcılar — Renk imzalarını ve kodlarını tanımlayın.

Eylemler#

show_aivision#

show_aivision komutu, yapay zeka görüş sensörünün canlı veri akışını robotun ekranında görüntüler. Canlı veri akışı, ekrandaki diğer tüm görüntüleri veya metinleri kaplayacaktır.

Not: hide_aivision akışı gizlemek için kullanılmadığı sürece ekranda başka hiçbir görüntü veya metin görüntülenmeyecektir.

Usage:
robot.screen.show_aivision()

Parametreler

Tanım

Bu yöntemin parametresi yoktur.

# Watch the AI Vision Sensor detect AI Classifications
# and AprilTag IDs as you move the robot
robot.screen.show_aivision()

hide_aivision#

hide_aivision komutu, yapay zeka görüş sensörünün canlı veri akışını robotun ekranından kaldırır.

Usage:
robot.screen.hide_aivision()

Parametreler

Tanım

Bu yöntemin parametresi yoktur.

# 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 , AprilTag ID algılamasını etkinleştirir veya devre dışı bırakır; durum bir Boolean değeridir.

Bu sensör, Circle21h7 ailesinden 0 ile 36 arasındaki AprilTag kimliklerini algılayabilir.

Usage:
robot.vision.tag_detection(state)

Parametreler

Tanım

state

Değerler şunlardır: True, bu da AprilTag ID algılamayı etkinleştirir; False, bu da AprilTag ID algılamayı devre dışı bırakır.

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)

Getters#

get_data#

get_data , AI Vision Sensor çerçevesindeki verileri tek bir imzaya filtreler — sensörün tanıyabileceği bir şeyin kaydedilmiş açıklaması, örneğin önceden eğitilmiş bir nesne, bir AprilTag Kimliği veya yapılandırılmış bir Renk İmzası veya Renk Kodu — ve bir tuple döndürür.

Renk İmzaları ve Renk Kodları bu yöntemle kullanılabilmeleri için öncelikle Yapay Zeka Görsel Yardımcı Programında yapılandırılmalıdır.

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

Usage:
robot.vision.get_data(signature, count)

Parametreler

Tanım

signature

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

  • ALL_VISION - Spor topları, variller, VEX AIM Kodlama Robotları, AprilTag Kimlikleri, renkler ve renk kodları
  • ALL_CARGO - Spor topları ve variller
  • ALL_TAGS - Tüm AprilTag Kimlikleri
  • ALL_COLORS - Tüm yapılandırılmış renk imzaları ve renk kodları
  • SPORTS_BALL - Sadece spor topları
  • BLUE_BARREL - Sadece mavi variller
  • ORANGE_BARREL - Sadece turuncu variller
  • AIM_ROBOT - Tüm VEX AIM Kodlama Robotları
  • TAG0 - TAG37 - Tek bir AprilTag Kimliği 0 ila 37
  • NAME - Renk imzası veya renk kodu, burada NAME AI Vision Utility’de yapılandırılmış isimdir.

count

İsteğe bağlı. Döndürülebilecek maksimum nesne sayısını 1 ile 24 arasında ayarlar (varsayılan: 8).

Not: 5 ila 37 arasındaki AprilTag kimlikleri, AIM Yazdırılabilirler adresinden yazdırılan AprilTag kimlikleri kullanılarak elde edilebilir.

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

Ya da bunun yerine yüksekliğe göre sıralama:

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

Verileri Görüntüleme#

get_data tarafından döndürülen demeti yazdırmak, tespit edilen tüm nesnelerin tüm özelliklerinin bir listesini görüntüler:

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

Algılanan AprilTag Kimlikleri için hata ayıklama çıktısını gösteren konsol penceresinin ekran görüntüsü. Metin, exists: True, type: AprilTag ID, id: 2, centerX: 223, centerY: 54, originX: 210, originY: 42, width: 27, height: 23, bearing: 14.1 ve rotation: 0.0 gibi alanlara sahip 'Nesne #0'ı listeler, ardından bir ayırıcı çizgi ve exists: True, type: AprilTag ID, id: 4 ve centerX: 122 alanlarına sahip 'Nesne #1'in başlangıcı gelir.

Yapay Zeka Sınıflandırmaları#

AIM Yapay Zeka Görüntüleme Sensörü, bu yapay zeka sınıflandırmalarını algılayabilir:

Kimlik Numarası

Yapay Zeka Sınıflandırması

İmza

0

Top

SPORTS_BALL

1

Mavi Varil

BLUE_BARREL

2

Turuncu Varil

ORANGE_BARREL

3

AIM Robot

AIM_ROBOT

Renk İmzaları#

Renk imzası, yapay zeka görüş sensörünün tanıyabileceği benzersiz bir renktir. Bu imzalar, 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 get_data ile birlikte kullanılır.

İki renkli nesneyi algılayan bağlı bir görüntü sensörünü gösteren yapay zeka görüntü yardımcı programı. Sol tarafta, solda mavi bir kutu ve sağda kırmızı bir kutu bulunan, her biri beyaz sınırlayıcı kutularla çevrili canlı kamera görüntüsü yer almaktadır. Siyah etiketler, ilgili adlarını, koordinatlarını ve boyutlarını göstermektedir. Sağ tarafta, hem kırmızı hem de mavi kutular için ton ve doygunluk aralığı kaydırıcıları içeren renk imzası ayarları bulunmaktadır. Renk ekleme, videoyu dondurma, kopyalama ve görüntüyü kaydetme düğmeleri altta, ayrıca sağ alt köşede bir kapatma düğmesi bulunmaktadır.

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

Renk Kodları#

Renk kodu, belirli bir düzende düzenlenmiş 2 ila 4 renk imzasından oluşan yapılandırılmış bir desendir. Bu kodlar, yapay zeka 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.

Yapay Zeka Görsel Yardımcı Programı arayüzü, bağlı bir görsel sensörün, solda mavi bir kutu ve sağda kırmızı bir kutu olmak üzere, bitişik iki nesneyi algıladığını ve bu nesnelerin BlueRed etiketli tek bir beyaz sınırlayıcı kutu içinde gruplandığını gösterir. Algılama bilgileri açı (A:11°), koordinatlar (X:143, Y:103), genişlik (W:233) ve yükseklik (H:108) içerir. Sağ panelde, ayarlanabilir ton ve doygunluk aralıklarına sahip üç renk imzası listelenmiştir: Red_Box, Blue_Box ve BlueRed. BlueRed imzası, Blue_Box ve Red_Box'ı birleştirir. Video akışının altında, Videoyu Dondur, Görüntüyü Kopyala, Görüntüyü Kaydet ve Kapat etiketli düğmeler bulunur.

# 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 , robotun şu anda bir spor topuna sahip olup olmadığını gösteren bir Boolean değeri döndürür.

  • True — Robotun bir spor topu var.

  • False — Robotun spor topu yok.

Usage:
robot.has_sports_ball()

Parametreler

Tanım

Bu yöntemin parametresi yoktur.

# 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 , robotun şu anda herhangi bir varile sahip olup olmadığını gösteren bir Boolean değeri döndürür.

  • True — Robotun bir varili var.

  • False — Robotun bir namlusu yok.

Usage:
robot.has_any_barrel()

Parametreler

Tanım

Bu yöntemin parametresi yoktur.

# 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 , robotun şu anda mavi bir varile sahip olup olmadığını gösteren bir Boolean değeri döndürür.

  • True — Robotun mavi bir gövdesi var.

  • False — Robotun mavi bir gövdesi yok.

Usage:
robot.has_blue_barrel()

Parametreler

Tanım

Bu yöntemin parametresi yoktur.

# 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 , robotun şu anda turuncu bir varile sahip olup olmadığını gösteren bir Boolean değeri döndürür.

  • True — Robotun turuncu bir gövdesi var.

  • False — Robotun turuncu bir gövdesi yok.

Usage:
robot.has_orange_barrel()

Parametreler

Tanım

Bu yöntemin parametresi yoktur.

# Push an orange barrel away when detected
while True:
    if robot.has_orange_barrel():
        robot.kicker.place()

    wait(50, MSEC)

Özellikler#

robot.vision.get_data yöntemi kullanıldıktan sonra, her nesneyle birlikte bir demette saklanan on iki özellik vardır.

.id, .scoreve .type dışındaki tüm özellik değerleri, robot.vision.get_data kullanıldığı anda algılanan nesnenin konumunu, boyutunu, yönünü veya açısını tanımlar. Bu değerler, sensörün 320 x 240 piksel çözünürlüğüne bağlı olarak piksel veya derece cinsinden ölçülür.

Çerçevenin ortasında, siyah bir sınırlayıcı kutuyla çevrili, turuncu çizgili mavi bir varil bulunmaktadır. x ve y eksenleri, üst kısımda soldan sağa 0'dan 320'ye ve sol tarafta yukarıdan aşağıya 0'dan 240'a kadar etiketlenmiştir.

.exists#

.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 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 algılanan nesnenin piksel cinsinden genişliğini döndürür; bu, 1 ile 320 arasında bir tam sayıdır.

Not: Piksel değerleri sensörün koordinat sistemine göre belirlenir. Referans için Giriş bölümündeki diyagrama bakınız.

Çerçevenin ortasında, siyah bir sınırlayıcı kutuyla çevrili, turuncu çizgili mavi bir varil bulunmaktadır. Çerçevenin üst kısmından sınırlayıcı kutunun sol ve sağ kenarlarına doğru uzanan iki dikey kırmızı kesik çizgi vardır. Bu çizgiler arasında bulunan çift başlı siyah bir ok, genişlik ölçüsünü göstermektedir.

# 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 fonksiyonu, tespit edilen nesnenin piksel cinsinden yüksekliğini döndürür; bu değer 1 ile 240 arasında bir tamsayıdır.

Not: Piksel değerleri sensörün koordinat sistemine göre belirlenir. Referans için Giriş bölümündeki diyagrama bakınız.

Çerçevenin ortasında, siyah bir sınırlayıcı kutuyla çevrili, turuncu çizgili mavi bir varil bulunmaktadır. Çerçevenin sol tarafından sınırlayıcı kutunun üst ve alt kenarlarına doğru uzanan iki yatay kırmızı kesik çizgi vardır. Bu çizgiler arasında bulunan çift başlı siyah bir ok, yükseklik ölçümünü göstermektedir.

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

Not: Piksel değerleri sensörün koordinat sistemine göre belirlenir. Referans için Giriş bölümündeki diyagrama bakınız.

Çerçevenin ortasında, siyah bir sınırlayıcı kutuyla çevrili, turuncu çizgili mavi bir varil bulunmaktadır. Çerçevenin üstünden sınırlayıcı kutunun merkezine doğru uzanan dikey kırmızı kesikli çizgi, merkezin X koordinatını göstermektedir.

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

Not: Piksel değerleri sensörün koordinat sistemine göre belirlenir. Referans için Giriş bölümündeki diyagrama bakınız.

Çerçevenin ortasında, siyah bir sınırlayıcı kutuyla çevrili, turuncu çizgili mavi bir varil bulunmaktadır. Çerçevenin sol tarafından sınırlayıcı kutunun merkezine uzanan yatay kırmızı kesikli çizgi, merkezin Y koordinatını göstermektedir.

# 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 bir nesnenin AI Vision Sensor’ün görüş alanının merkezinin solunda veya sağında ne kadar uzakta olduğunu derece cinsinden temsil eden ondalık bir değer (float) döndürür. 0 değeri merkezde olduğunu, pozitif değerler nesnenin sağda olduğunu ve negatif değerler nesnenin solda olduğunu gösterir.

Yukarıdan aşağıya doğru gösterilen diyagramda, dikey bir referans çizgisi ve soldaki spor topuna doğru açılı, -30 derece olarak etiketlenmiş kırmızı bir çizgi ile dairesel bir tabana ortalanmış bir VEX AIM Kodlama Robotu gösterilmektedir. Yukarıdan aşağıya doğru gösterilen diyagramda, dikey bir referans çizgisi ve sağda bir spor topuna doğru 30 derece açıyla uzanan kırmızı bir çizgi ile dairesel bir tabana ortalanmış bir VEX AIM Kodlama Robotu gösterilmektedir.
# 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 nesnenin yapay zeka görüş sensörünün görüntüleme düzlemindeki yönünü 0 ile 359 derece arasında ölçerek döndürür. Bir renk kodu, renkleri yatay bir çizgide sıralandığında 0°’dir (örneğin, Kırmızı-Mavi). Renkler döndürülürse, açı değişir (örneğin, Mavi-Kırmızı sıralaması 180° döndürür).

Aşağıdaki örnekte, renk kodu sol tarafta kırmızı, sağ tarafta mavi olacak şekilde yapılandırılmıştır.

Bu görselde, kırmızının üzerine mavi koymak, orijinal renk kodunu 270 derece sağa döndürmeye eşdeğerdir.

Kamera arayüzü, çerçevenin ortasında, üst yarısı mavi, alt yarısı kırmızı olan dikey olarak üst üste yığılmış bir nesneyi görüntüler. Nesnenin altındaki etikette Red_Blue A:270° CX:185 CY:81 W:93 H:150 yazmaktadır ve bu, nesnenin adını, dönüş açısını, merkez X ve Y koordinatlarını, genişliğini ve yüksekliğini gösterir. Izgara çizgileri ve sayısal eksenler, X'in 0 ile 320 arasında ve Y'nin 0 ile 240 arasında değiştiği görüntü boyutlarını işaretler.

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

Not: Piksel değerleri sensörün koordinat sistemine göre belirlenir. Referans için Giriş bölümündeki diyagrama bakınız.

Çerçevenin ortasında, siyah bir sınırlayıcı kutuyla çevrili, turuncu çizgili mavi bir varil bulunmaktadır. Çerçevenin üst kısmından sınırlayıcı kutunun sol kenarına uzanan dikey kırmızı kesikli çizgi, sınırlayıcı kutunun başlangıç ​​noktasının X koordinatını göstermektedir.

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

Not: Piksel değerleri sensörün koordinat sistemine göre belirlenir. Referans için Giriş bölümündeki diyagrama bakınız.

Çerçevenin ortasında, siyah bir sınırlayıcı kutuyla çevrili, turuncu çizgili mavi bir varil bulunmaktadır. Çerçevenin sol tarafından sınırlayıcı kutunun üst kenarına uzanan yatay kırmızı kesikli çizgi, sınırlayıcı kutunun başlangıç ​​noktasının Y koordinatını göstermektedir.

# 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 tespit edilen yapay zeka sınıflandırmasının veya AprilTag kimliğinin tamsayı değerini döndürür.

Bir AprilTag ID için, .id özelliği, 0 ile 37 aralığındaki tespit edilen AprilTag ID numarasını temsil eder. Bir AI Sınıflandırması için, .id özelliği, AI Sınıflandırmaları bölümünde önceden tanımlanmış ID’ye karşılık gelir.

# 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 , tespit edilen yapay zeka sınıflandırmasının güven skorunu 1 ile 100 arasında bir tamsayı olarak döndürür.

Daha düşük bir puan, sensörün tespit edilen nesne konusunda daha az emin olduğunu, daha yüksek bir puan ise sensörün daha emin olduğunu gösterir.

# 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 , algılanan nesnenin türünü gösteren bir tamsayı döndürür. Bu değeri, tür numarası veya karşılık gelen adlandırılmış sabit kullanarak karşılaştırabilirsiniz:

Nesne Türü

Dahil Edilen Nesneler

AiVision.AI_OBJECT

— Spor topları
— Mavi variller
— Turuncu variller

AiVision.TAG_OBJECT

— AprilTag Kimlikleri

AiVision.COLOR_OBJECT

— Renk imzaları

AiVision.CODE_OBJECT

— Renk kodları

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

İnşaatçılar#

Creating a Color Signature#

Yeni bir Renk İmzası, Colordesc yapıcı fonksiyonu kullanılarak oluşturulur ve ardından color_description yöntemi kullanılarak Yapay Zeka Görsel Sensörüne kaydedilir. Bir Colordesc nesnesi, sensör için algılanabilir 7 renk imzasından 1’ini tanımlar, ancak etkili olması için color_description kullanılarak açıkça ayarlanmalıdır.

Colordesc Kullanımı:
Colordesc(index, red, green, blue, hangle, hdsat)

Parametre

Tanım

index

Renk İmzası indeksini temsil eden 1 ile 7 arasında bir tamsayı. İki Renk İmzası aynı indeksi kullanıyorsa, ikincisi birincisini geçersiz kılar.

red

Kırmızı rengin bileşenini temsil eden 0 ile 255 arasında bir tamsayı.

green

Renk bileşeninin yeşil değerini gösteren 0 ile 255 arasında bir tamsayı.

blue

Rengin mavi bileşeni için 0 ile 255 arasında bir tamsayı.

hangle

1 ile 40 arasında derece cinsinden renk tonu aralığını temsil eden ondalık sayı.

hdsat

Doygunluk aralığını temsil eden 0,10 ile 1,00 arasında bir ondalık sayı.

color_description Kullanımı:
robot.vision.color_description(object)

Parametre

Tanım

object

Algılanabilir Renk İmzası olarak ayarlanacak Colordesc nesnesi.

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

Yeni bir Renk Kodu, Codedesc yapıcı yöntemi kullanılarak oluşturulur ve ardından code_description yöntemi kullanılarak etkinleştirilir. Bir Renk Kodu, 2 ila 4 mevcut Colordesc nesneyi, Yapay Zeka Görsel Sensörünün bir dizi olarak algılayabileceği tek bir tanımlayıcıda gruplandırır, ancak etkili olması için code_description kullanılarak açıkça ayarlanmalıdır.

Codedesc Kullanımı:
Codedesc(index, c1, c2, c3, c4, c5)

Parametre

Tanım

index

Renk kodunun indeksi, 1’den 8’e kadar. Not: Aynı indekse sahip iki adet Codedesc nesnesi oluşturursanız, ikincisi birincisini geçersiz kılacaktır.

c1

Koddaki ilk Colordesc nesnesi.

c2

Koddaki ikinci Colordesc nesnesi.

c3

İsteğe bağlı. Üçüncü bir Colordesc nesnesi.

c4

İsteğe bağlı. Dördüncü bir Colordesc nesnesi.

code_description Kullanımı:
robot.vision.code_description(object)

Parametre

Tanım

object

Algılanabilir Renk Kodu olarak kaydedilecek bir Codedesc nesnesi.

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