İçindekiler:

Jetson Nano Dörtlü Robot Nesne Algılama Eğitimi: 4 Adım
Jetson Nano Dörtlü Robot Nesne Algılama Eğitimi: 4 Adım

Video: Jetson Nano Dörtlü Robot Nesne Algılama Eğitimi: 4 Adım

Video: Jetson Nano Dörtlü Robot Nesne Algılama Eğitimi: 4 Adım
Video: TWINSCIENCE- Teachable Machine'in Sınıf İçi Kullanımı 2024, Haziran
Anonim
Image
Image

Nvidia Jetson Nano, bir SoM (Modül Üzerinde Sistem) ve bir referans taşıyıcı kartından oluşan bir geliştirici kitidir. Öncelikle makine öğrenimi, yapay görme ve video işleme uygulamaları için yüksek işlem gücü gerektiren gömülü sistemler oluşturmaya yöneliktir. Detaylı incelemesini YouTube kanalımdan izleyebilirsiniz.

Nvidia, Jetson Nano'yu mümkün olduğunca kullanıcı dostu ve geliştirmesi kolay projeler haline getirmeye çalışıyor. Kurulun piyasaya sürülmesinden günler sonra Jetson Nano ile robotunuzu nasıl oluşturacağınıza dair küçük bir kurs bile başlattılar. O projeyle ilgili detayları burada bulabilirsiniz.

Ancak Jetbot ile proje olarak birkaç sorunum vardı:

1) Benim için yeterince EPIC değildi. Jetson Nano, harika işleme yeteneklerine sahip çok ilginç bir tahtadır ve onunla basit bir tekerlekli robot yapmak çok … ezici bir şey gibi görünüyordu.

2) Donanım seçimi. Jetbot, pahalı/diğer alternatiflerle değiştirilebilen bazı donanımlar gerektirir - örneğin, teleoperasyon için joystick kullanırlar. Kulağa eğlenceli geliyor ama bir robotu kontrol etmek için gerçekten bir joystick'e ihtiyacım var mı?

Bu yüzden Jetson Nano'yu elime aldıktan hemen sonra kendi projem olan Jetspider üzerinde çalışmaya başladım. Fikir, Jetbot'un sahip olduğu temel demoları çoğaltmaktı, ancak daha yaygın donanımla ve daha geniş çeşitlilikteki projelere uygulanabilir.

Adım 1: Donanımınızı Hazırlayın

Donanımınızı Hazırlayın
Donanımınızı Hazırlayın

Bu proje için Zoobotics tarafından yapılan Zuri dörtlü robotunun erken bir prototipini kullandım. Uzun süredir şirketimizin laboratuvarında duruyordu. Jetson Nano için lazerle kesilmiş ahşap bir montaj parçası ve bir kamera montajı ile donattım. Tasarımları tescillidir, bu nedenle Jetson Nano robotunuz için benzer bir şey oluşturmak istiyorsanız, açık kaynaklı bir tasarımla benzer bir dörtlü olan Meped projesine göz atabilirsiniz. Aslında, laboratuvarımızda Zuri'nin mikrodenetleyicisinin (Arduino Mega) kaynak koduna kimse sahip olmadığı için, Meped'in kodunu bacak/ayak ofsetinde bazı küçük ayarlamalar yaparak kullandım.

Normal USB Raspberry Pi uyumlu web kamerası ve bir Wifi USB dongle kullandım.

Ana nokta, mikrodenetleyici ve Jetson Nano arasında seri iletişim için Pyserial kullanacağımız için, sisteminiz USB seri kablo ile Jetson Nano ile arabirim oluşturabildiği sürece her türlü mikrodenetleyiciyi kullanabilir. Robotunuz DC motorlar ve bir motor sürücüsü kullanıyorsa (örneğin L298P tabanlı), motor sürücüsünü doğrudan Jetson Nano GPIO ile arayüzlemek mümkündür. Ancak ne yazık ki, servoları kontrol etmek için Jetson Nano'nun donanımsal GPIO PWM'si olmadığı için yalnızca başka bir mikro denetleyici veya özel bir I2C servo sürücüsü kullanabilirsiniz.

Özetlemek gerekirse, USB veri kablosu kullanılarak Jetson Nano'ya bağlanabilen herhangi bir mikrodenetleyici ile robot tipini kullanabilirsiniz. Arduino Mega kodunu bu eğitim için github deposuna yükledim ve Jetson Nano ile Arduino arasında arayüz oluşturma ile ilgili kısım burada:

if(Serial.available()) {switch(Serial.read()) {

{

dava 1':

ileri();

kırmak;

durum '2':

geri();

kırmak;

durum '3':

Sağa dönün();

kırmak;

durum '4':

Sola çevirin();

kırmak;

Mevcut veri olup olmadığını kontrol ediyoruz ve varsa switch-case kontrol yapısına iletiyoruz. Serideki verilerin karakter olarak geldiğine dikkat edin, 1, 2, 3, 4 rakamlarının etrafındaki tek tırnak işaretine dikkat edin.

Adım 2: Gerekli Paketleri Kurun

Neyse ki bizim için varsayılan Jetson Nano sistem görüntüsü, önceden yüklenmiş birçok şeyle (OpenCV, TensorRT, vb.)

İşin geri kalanını uzaktan yapmak istemeniz durumunda SSH'yi etkinleştirerek başlayalım.

sudo uygun güncelleme

sudo apt install openssh sunucusu

SSH sunucusu otomatik olarak başlayacaktır.

Ubuntu makinenize LAN üzerinden bağlanmak için aşağıdaki komutu girmeniz yeterlidir:

ssh kullanıcıadı@ip_adresi

Windows makineniz varsa, örneğin Putty gibi SSH istemcisi yüklemeniz gerekecektir.

Görüntü işleme için Python Paket Yöneticisi (pip) ve Yastık yükleyerek başlayalım.

sudo apt python3-pip python3-pil'i yükleyin

Ardından, nesne algılamayı gerçekleştirmek için çerçevesinin bazı bölümlerine güvendiğimiz için Jetbot deposunu kuracağız.

sudo apt yükleme python3-smbus python-pyserial

git klonu

cd jet robotu

sudo apt-get install cmake

sudo python3 setup.py kurulumu

Sonunda bu proje için Github depomu ana klasörünüze kopyalayın ve web sunucusunu kullanarak robotun uzaktan kumandası için Flask ve diğer bazı paketleri kurun.

git klonu

CD

sudo pip3 install -r gereksinimleri-opencv

Bu linkten önceden eğitilmiş SSD(Single Shot Detector) modelini indirip jetspider_demos klasörüne atın.

Şimdi gitmeye hazırız!

Adım 3: Kodu Çalıştırın

Kodu Çalıştır
Kodu Çalıştır

Jetspider için iki demo yaptım, ilki daha önce Banana Pi gezici için yaptığım gibi basit bir teleoprasyon ve ikincisi nesne tespiti için TensorRT kullanıyor ve hareket komutlarını seri bağlantı üzerinden mikrodenetleyiciye gönderiyor..

Teleoprasyon kodunun çoğu diğer öğreticimde açıklandığı için (sadece bazı küçük ayarlamalar yaptım, video iletimini yeniden sınıflandırdım) burada Nesne Algılama kısmına odaklanacağım.

Nesne takibi için ana komut dosyası jetspider_object_following'de object_following.py'dir, teleoperasyon için jetspider_teleoperation'da spider_teleop.py'dir.

Betiği izleyen nesne, gerekli modülleri içe aktarmak ve değişkenleri ve sınıf örneklerini bildirmekle başlar. Daha sonra bu satır ile Flask web sunucusunu başlatıyoruz.

app.run(host='0.0.0.0', threaded=True)

Web tarayıcımızda 0.0.0.0(localhost) adresini veya ağdaki Jetson Nano adresini açtığımızda(ifconfig komutu ile kontrol edebilirsiniz) bu fonksiyon çalıştırılacaktır.

tanım indeksi():

Templates klasöründe bulunan web sayfası şablonunu render eder. Şablonun içine gömülü video kaynağı vardır, bu nedenle yüklemeyi bitirdiğinde def video_feed(): yürütülür ve bu, oluşturucu işleviyle başlatılan bir Response nesnesi döndürür.

Yerinde güncellemeleri uygulamanın sırrı (video akışımız için web sayfasındaki resmi güncelleme) çok parçalı bir yanıt kullanmaktır. Çok parçalı yanıtlar, çok parçalı içerik türlerinden birini ve ardından bir sınır işaretçisi ile ayrılmış ve her birinin kendi parçaya özel içerik türüne sahip bölümlerinden oluşan bir başlıktan oluşur.

def gen(): işlevinde, görüntüyü yakalayan, onu def yürütme(img): işlevine gönderen ve bundan sonra web sayfasına gönderilecek bir görüntü veren bir sonsuz döngüde oluşturucu işlevini uygularız.

def execute(img): işlev, tüm sihrin gerçekleştiği yerdir, bir görüntü alır, OpenCV ile yeniden boyutlandırır ve onu Jetbot ObjectDetector sınıfı örneği "modeline" iletir. Algılamaların listesini döndürür ve etraflarına mavi dikdörtgenler çizmek ve nesne algılanan sınıfla notlar yazmak için OpenCV kullanırız. Bundan sonra, ilgilendiğimiz bir nesne olup olmadığını kontrol ederizDetectmatching_detections = [d for d inDetects[0] if d['label'] == 53]

Robotunuzun diğer nesneleri takip etmesini istiyorsanız, bu sayıyı (53) CoCo veri setinden başka bir sayıya değiştirebilirsiniz, 53 bir elmadır. Tüm liste Category.py dosyasındadır.

Son olarak 5 saniye boyunca herhangi bir nesne algılanmazsa seri üzerinden robotun durması için "5" karakterini iletiyoruz. Nesne bulunursa görüntünün merkezinden ne kadar uzakta olduğunu hesaplar ve buna göre hareket ederiz (merkeze yakınsa düz gidin(seride "1" karakteri), soldaysa sola gidin vb.). Özel kurulumunuz için en iyisini belirlemek için bu değerlerle oynayabilirsiniz!

4. Adım: Son Düşünceler

Son düşünceler
Son düşünceler

Bu, ObjectFollowing demosunun özüdür, Flask web sunucusu Video akışı hakkında daha fazla bilgi edinmek istiyorsanız, Miguel Grinberg'in bu harika öğreticisine bir göz atabilirsiniz.

Ayrıca Nvidia Jetbot Nesne Algılama not defterine buradan göz atabilirsiniz.

Umarım Jetbot demoları uygulamalarım, robotunuzu Jetbot çerçevesini kullanarak oluşturmanıza yardımcı olur. Model seçiminin iyi engellerden kaçınma sonuçları vermeyeceğini düşündüğüm için engellerden kaçınma demosunu uygulamadım.

Herhangi bir sorunuz varsa beni LinkedId'de ekleyin ve makine öğrenimi ve robotik içeren daha ilginç projelerden haberdar olmak için YouTube kanalıma abone olun.

Önerilen: