Görüş#
giriiş#
VEX EXP için geliştirilen Görsel Sensör, Renk İmzalarını ve Renk Kodlarını algılar ve izler. Bu sayede Görsel Sensör, çevresini analiz edebilir ve algılanan görsel verilere göre tepki verebilir.
Bu sayfada örnek olarak sırasıyla Vision Sensor, Color Signature ve Color Code adları olarak vision_1, RED_BOXve BOX_CODE kullanılmıştır. Bunları gerektiğinde kendi yapılandırdığınız adlarla değiştirin.
Aşağıda tüm yöntemlerin listesi bulunmaktadır:
Veri Alıcılar – Görüntü Sensöründen veri alırlar.
take_snapshot– Belirli bir Renk İmzası veya Renk Kodu için verileri yakalar.largest_object– Anlık görüntüden en büyük nesneyi seçin.installed– Görsel Sensörün EXP Beynine bağlı olup olmadığı.
Özellikler – take_snapshot’den döndürülen nesne verileri.
.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ı Fonksiyonlar – Görsel Sensörü ve imzalarını manuel olarak başlatın ve yapılandırın.
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 |
|---|---|
|
Veri kümesini yalnızca belirtilen imzaya ait verileri içerecek şekilde filtreler. Mevcut imzalar şunlardır:
|
# 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 imzası, 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 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örsel Sensörü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, adının Vision Sensor’ün adından, iki alt çizgiden ve ardından Renk Kodunun adından oluşması gerekir. Ö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)
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)
installed#
installed adet ise Vision Sensor’ün EXP Brain’e bağlı olup olmadığını gösteren bir Boolean değeri döndürür.
True– Görüntü Sensörü EXP Beynine bağlıdır.False– Görüntü Sensörü EXP 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("Vision Sensor Installed!")
Özellikler#
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.
.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 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 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)
.height#
.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)
.angle#
.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 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 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)
.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 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 Vision Sensor’ü yapılandırmak için gerekli olan Vision, Signatureve Code nesnelerini manuel olarak oluşturmak için kullanılır.
Vision#
Vision bir Görüntü Sensörü oluşturur.
Kullanım
Vision(smartport, brightness, sigs)
Parametreler |
Tanım |
|---|---|
|
Görüntü sensörünün bağlı olduğu akıllı port, |
|
İsteğe bağlı. Görüntü sensörünün parlaklık değeri, 1 ile 100 arasında. |
|
İsteğe bağlı. Virgülle ayrılmış bir veya daha fazla Renk İmzası veya Renk Kodu nesnesinin adı ( |
# 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 , 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 |
|---|---|
|
|
|
Vision Utility’deki değer |
|
Vision Utility’deki değer |
|
Görme Yardımcı Programı’nda |
|
Vision Utility’deki |
|
Vision Utility’deki |
|
Vision Utility’deki |
|
Vision Utility’deki rgb değeri |
|
Vision Utility’deki |
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.
"""
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 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 |
|---|---|
|
Daha önce oluşturulmuş bir Renk İmzası. |
|
Daha önce oluşturulmuş bir Renk İmzası. |
|
İsteğe bağlı. Daha önce oluşturulmuş bir Renk İmzası. |
|
İsteğe bağlı. Daha önce oluşturulmuş bir Renk İmzası. |
|
İsteğe bağlı. Daha önce oluşturulmuş bir Renk İmzası. |
# 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)