Görüş#
giriiş#
VEX AIR Drone’un Görsel Sensörü, AprilTag Kimliklerini algılar ve izler. Bu, dronun çevresini analiz etmesine, nesneleri takip etmesine ve algılanan görsel verilere göre tepki vermesine olanak tanır. Aşağıda mevcut tüm yöntemler ve özelliklerin listesi bulunmaktadır:
Algılayıcılar – Drone’un bir nesneyi tutup tutmadığını algılar.
get_data– Belirli bir imza için tespit edilen nesnelerin bir demetini döndürür.
Özellikler – get_data’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.bearing– Nesnenin ön Görüş Sensörüne göre açısı veya dronun nesneye doğru dönmesi için gereken derece sayısı.rotation– Nesnenin yönü.originX– Nesnenin sol üst köşesinin X konumu.originY– Nesnenin sol üst köşesinin Y konumu.id– Nesnenin Etiket Kimliği.type– Nesnenin tipini döndürür.
Getters#
get_data#
get_data , Vision Sensor çerçevesindeki verileri tek bir imzaya (sensörün tanıyabileceği bir şeyin kaydedilmiş açıklaması, örneğin bir AprilTag ID’si) filtreler ve bir demet döndürü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:
drone.vision.get_data(camera, signature, count)
Parametreler |
Tanım |
|---|---|
|
Verilerin alınacağı kamera: ya |
|
Veri kümesini yalnızca belirtilen imzaya ait verileri içerecek şekilde filtreler. Mevcut imzalar şunlardır:
|
|
İsteğe bağlı. Döndürülebilecek maksimum nesne sayısını 1 ile 24 arasında ayarlar (varsayılan: 8). |
# Climb upward when an AprilTag ID is detected
drone.take_off(climb_to=500)
while True:
vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
if vision_data[0].exists:
drone.climb_for(direction=UP, distance=200)
Özellikler#
get_data kullanıldıktan sonra tuple içinde saklanan her nesneyle birlikte birden fazla özellik dahil edilir.
.id ve .type hariç tüm özellik değerleri, get_data kullanıldığı anda algılanan nesnenin konumunu, boyutunu, yönünü veya açısını tanımlar. Bu değerler piksel veya derece cinsinden ölçülür. Her Görüş Sensörünün farklı bir çözünürlüğü vardır:
Öne bakan: 640 x 480 piksel
Aşağıya bakan: 640 x 400 piksel
.exists#
.exists dizinin demette mevcut olup olmadığını gösteren bir Boolean değer döndürür. Hiçbir nesne tespit edilmezse hata döndürür.
True– Dizin mevcut.False– Dizin mevcut değil.
# Climb upward when an AprilTag ID is detected
drone.take_off(climb_to=500)
while True:
vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
if vision_data[0].exists:
drone.climb_for(direction=UP, distance=200)
.width#
.width , tespit edilen nesnenin genişliğini piksel cinsinden 1 ile 640 arasında bir tamsayı olarak döndürür.
# Show if the AprilTag ID appears large or small
while True:
vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
clear_console()
if vision_data[0].exists:
if vision_data[0].width > 100:
print("Large")
else:
print("Small")
wait(0.2, SECONDS)
.height#
.height fonksiyonu, tespit edilen nesnenin yüksekliğini piksel cinsinden 1 ile 480 arasında bir tamsayı olarak döndürür.
# Show if the AprilTag ID appears large or small
while True:
vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
clear_console()
if vision_data[0].exists:
if vision_data[0].height > 100:
print("Large")
else:
print("Small")
wait(0.2, SECONDS)
.centerX#
.centerX tespit edilen nesnenin merkezinin x koordinatını piksel cinsinden 1 ile 640 arasında bir tamsayı olarak döndürür.
# Show if an AprilTag ID is to the left or the right of the camera
while True:
clear_console()
vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
if vision_data[0].exists:
if vision_data[0].centerX < 320:
print("To the left!")
else:
print("To the right!")
wait(0.2, SECONDS)
.centerY#
.centerY fonksiyonu, tespit edilen nesnenin merkezinin y koordinatını piksel cinsinden 1 ile 480 arasında bir tamsayı olarak döndürür.
# Take off and align drone with AprilTag ID on wall
# Change drone.take_off parameter to see different results
drone.take_off(climb_to=800)
vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
if vision_data[0].exists:
if vision_data[0].centerY < 240:
print("Below the target!")
else:
print("Above the target!")
else:
print("No target found!")
.bearing#
.bearing komutu, bir nesnenin drone’a göre konumunu gösteren bir açı döndürür. Davranış, kullanılan Görüş Sensörüne bağlıdır.
0° değeri, nesnenin ve sensörün merkezlerinin hizalandığını gösterir. Pozitif değerler nesnenin sağda, negatif değerler ise solda olduğunu ifade eder.
Sensör |
İadeler |
|---|---|
Aşağı doğru |
İnsansız hava aracının ön kısmının, cismin merkeziyle hizalanması için dönmesi gereken açı (derece cinsinden), -180º ile 180º arasındadır. |
İleri |
Nesnenin, görüş sensörünün merkezine göre sola veya sağa doğru -180º ile 180º arasında değişen açıdaki uzaklığını gösterir. |
# Align the front of the drone to an AprilTag ID
drone.set_turn_velocity(15)
drone.take_off(climb_to=500)
while True:
vision_data = drone.vision.get_data(DOWNWARD_CAMERA, ALL_TAGS)
if vision_data[0].exists:
if -20 < vision_data[0].bearing < 20:
# Hover once sensor is centered on AprilTag ID
drone.hover()
controller.sound.play(SUCCESS)
while controller.sound.is_active():
wait(50, MSEC)
elif vision_data[0].bearing < -21:
drone.turn(LEFT)
else:
drone.turn(RIGHT)
wait(5, MSEC)
.rotation#
.rotation , tespit edilen AprilTag ID’sinin yönünü 1 ile 359 derece arasında bir tamsayı olarak döndürür.
# Turn left or right based on the rotation of an AprilTag ID
drone.take_off(climb_to=1000)
while True:
vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
if vision_data[0].exists:
if 240 < vision_data[0].rotation < 300:
drone.turn_for(LEFT, 90)
elif 60 < vision_data[0].rotation < 120:
drone.turn_for(RIGHT, 90)
else:
drone.hover()
wait(0.2, SECONDS)
.originX#
.originX tespit edilen nesnenin sınırlayıcı kutusunun sol üst köşesinin x koordinatını piksel cinsinden 1 ile 640 arasında bir tamsayı olarak döndürür.
# Draw lines to the AprilTag ID origin from all corners
while True:
controller.screen.clear_screen()
vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
if vision_data[0].exists:
controller.screen.draw_line(0, 0, vision_data[0].originX, vision_data[0].originY)
controller.screen.draw_line(0, 480, vision_data[0].originX, vision_data[0].originY)
controller.screen.draw_line(640, 0, vision_data[0].originX, vision_data[0].originY)
controller.screen.draw_line(640, 480, vision_data[0].originX, vision_data[0].originY)
wait(0.2, SECONDS)
.originY#
.originY tespit edilen nesnenin sınırlayıcı kutusunun sol üst köşesinin y koordinatını piksel cinsinden 1 ile 480 arasında bir tamsayı olarak döndürür.
# Draw lines to the AprilTag ID origin from all corners
while True:
controller.screen.clear_screen()
vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
if vision_data[0].exists:
controller.screen.draw_line(0, 0, vision_data[0].originX, vision_data[0].originY)
controller.screen.draw_line(0, 480, vision_data[0].originX, vision_data[0].originY)
controller.screen.draw_line(640, 0, vision_data[0].originX, vision_data[0].originY)
controller.screen.draw_line(640, 480, vision_data[0].originX, vision_data[0].originY)
wait(0.2, SECONDS)
.id#
.id tespit edilen AprilTag ID’sinin tanımlama numarasını 0 ile 37 arasında bir tamsayı olarak döndürür.
# Display the detected AprilTag ID
while True:
vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
clear_console()
if vision_data[0].exists:
print(vision_data[0].id)
wait(0.2, SECONDS)
.type#
.type , algılanan nesnenin türünü döndürür. Şunları döndürecektir:
Nesne Türü |
Sayısal Değer |
Dahil Edilen Nesneler |
|---|---|---|
|
8 |
Nisan Etiket Kimlikleri |
|
1 |
Renk imzaları - Çok Yakında! |
|
2 |
Renk kodları - Çok Yakında! |
# Display what AprilTag ID is detected
while True:
controller.screen.clear_screen()
controller.screen.set_cursor(1, 1)
vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
if vision_data[0].exists:
if vision_data[0].type == drone.vision.TAG_OBJECT:
controller.screen.print("AprilTag ID: ")
controller.screen.print(vision_data[0].id)
wait(0.1, SECONDS)