Bu makale, VEXlink kullanarak robottan robota iletişimin durumunu ve ayrıca durumu Jetson'a bildiren bir gösterge panosunu görüntüleyen örnek bir projeyi kapsayacaktır. Ai_demo projesi Githubbarındırılıyor. Bu demo projesi, USB seri bağlantısı aracılığıyla Jetson işlemcisinden veri toplar. Veriler alındıktan sonra V5 Brain'in ekranında görüntülenir ve ayrıca VEXlink aracılığıyla bağlanan ortak bir V5 robotuna iletilir.
Not: Bu proje, V5 için VS Code Extension'ın en son sürümünü gerektirir. V5 için VS Code Uzantısını buradan indirin.
NVIDIA Jetson Nano'dan VEX V5'e Beyin İletişimi
Jetson işlemcisi, VEX AI yazılımından aşağıdaki verileri toplayan bir uygulama içerir:
Robot Konum verileri:
- Robotun saha merkezinden metre cinsinden X,Y konumu.
- Robotun Azimutu (İstikamet), Yükseklik (Adım), Dönüş (Dönme) değerlerinin tümü radyan cinsindendir.
Nesne Algılama verileri (üç tür):
- Bu veriler VEX AI Intel Kamera tarafından algılanan bir nesneyi temsil eder.
- Bu veriler nesneyi kamera görüntüsüne göre tanımlar.
- X, Y, genişlik ve yükseklik değerleri piksel birimindedir. Piksel değerleri, görüntünün ve nesne algılama kutusunun sol üst köşesine referanslıdır. Görüntü çözünürlüğü 640x480'dir.
Harita Algılama (ikinci tip):
- Bu veriler, GPS Sensörü ile aynı koordinat sistemindeki nesnenin sahadaki konumunu metre cinsinden rapor ederek temsil eder.
- Her nesne aynı zamanda nesnenin alanın merkezine göre konumunu da içerir. X ve Y değerleri, ilgili eksenlerdeki alanın merkezinden itibaren metre cinsindendir. Z'nin değeri alan döşemelerinden metredir (yükseklik).
Algılama Nesnesi (üçüncü tip):
- Bu, algılanan nesnelerle ilgili tüm bilgileri kapsar.
- Her nesne, algılanan nesnenin sınıflandırmasını temsil eden bir değer içerir. (Sınıf Kimliği: 0 = GreenTriBall, 1 = RedTriBall, 2 = BlueTriBall)
- Her nesne ayrıca VEX AI'nin tespite olan güvenini temsil eden bir olasılık içerir. Bu, model.py'deki düşük olasılıklı tespitleri ortadan kaldıran bir filtreden sonradır.
- Ayrıca nesnenin derinliği VEX AI Intel Kameradan metre cinsinden raporlanıyor.
- Görüntü Algılama ve Harita Algılama, nesnenin hem görüntüdeki hem de gerçek dünyadaki koordinatlarını temsil etmek için her nesneye eklenir.
ai_demo programının dökümü:
Main.cpp
VEX projeleri için standart şunları içerir:
Jetson sınıfının bir örneğini bildirin. Bu sınıf, Jetson'a veri istekleri göndermek ve USB seri bağlantısı yoluyla veri almak için kullanılır.
#MANAGER_ROBOT 1'i tanımlayın
Robot_link sınıfının bir örneğini bildirin. Bu nesne, bu robot ile bir ortak robot arasında bağlantı kurmak ve veri aktarmak için kullanılacaktır. Aynı proje iki ayrı robota indirilebilir. Bir robotun şu satıra ihtiyacı olacak:
//#MANAGER_ROBOT 1'i tanımla
Kodu ikinci robota yüklemeden önce şu satırı açıklamanız gerekecektir:
robot_link sınıfı, robotun VEXlink'ini kurar ve iki robot arasında veri iletimini ve alımını yönetir. Bu yazıda bu sınıfın nasıl çalıştığına dair ayrıntılara girmeyeceğiz. Öncelikle VEXlink'in nasıl çalıştığını anlamak iyi bir fikir olacaktır. V5 VEXlink API'nin kullanımı hakkında daha detaylı bilgi için, bu yeni kütüphaneler ve robotlar arası iletişimde nasıl etkin bir şekilde kullanılacağı açıklanmaktadır.
-
Yarışma Etkinliği sorumluları
VAIC ile VRC arasındaki en büyük farklardan biri sürücü kontrol süresinin olmamasıdır. Bunun yerine iki özerk dönem vardır; izolasyon dönemi ve etkileşim dönemi. Bu örnekte her otonom dönem için ayrı rutinler bulunmaktadır. VEX API iki farklı geri aramayı desteklemediğinden, hangi rutinin yürütüleceğini belirlemek için programda bir bayrak bulunmalıdır. Bu örnek programda, "firstAutoFlag", otonom ilk kez etkinleştirildiğinde İzolasyon işlevini çağırmak ve otonom ikinci kez etkinleştirildiğinde etkileşim işlevini çağırmak için kullanılır. Unutulmaması gereken bir nokta, herhangi bir nedenle maçın sıfırlanması gerekiyorsa, ilk AutoFlag'in sıfırlanabilmesi için demo programının yeniden başlatılması gerekeceğidir.
-
Ana()
Bu projenin ana görevi budur. VEXcode ortamını doğru şekilde ayarlamak için vexcodeInit() çağrılmasıyla başlar. Daha sonra Jetson'dan aldığımız verileri depolamak için yerel bir AI_RECORD nesnesi bildirilir. Ekranın en güncel verilerle güncellenmesini sağlamak için ayrı bir görev de ayarlanmıştır. Bu görevin kodu gösterge tablosu.cpp dosyasında bulunur. Otonom geri arama, otonom dönemler başlatıldığında işlemek üzere de kaydedilir.
Ana while() döngüsü, jetson_comms nesnesindeki en son verilerin yerel AI_RECORD nesnemize kopyalanmasıyla başlar. Daha sonra robotun konum bilgisini bağlantı nesnesine aktararak ortak robotumuza iletilmesini sağlar. Verilerin işlenmesi tamamlandıktan sonra Jetson'dan daha fazla veri talep ediyor ve 66 milisaniye boyunca uyuyor. Bu veri için yoklama oranı 15Hz'dir. AI sistem verileri yaklaşık 15Hz'de güncellendiğinden daha hızlı anket yapmanın bir anlamı yok.
Not: Jetson harita verilerinin yalnızca tek bir görev tarafından talep edilmesi gerekir.