Daftar Isi:

Tutorial Deteksi Objek Robot Berkaki Empat Jetson Nano: 4 Langkah
Tutorial Deteksi Objek Robot Berkaki Empat Jetson Nano: 4 Langkah

Video: Tutorial Deteksi Objek Robot Berkaki Empat Jetson Nano: 4 Langkah

Video: Tutorial Deteksi Objek Robot Berkaki Empat Jetson Nano: 4 Langkah
Video: Jetson Nano Quadruped Robot Object Detection + Teleoperation 2024, Juni
Anonim
Image
Image

Nvidia Jetson Nano adalah kit pengembang, yang terdiri dari SoM (Sistem pada Modul) dan papan pembawa referensi. Ini terutama ditargetkan untuk membuat sistem tertanam yang membutuhkan daya pemrosesan tinggi untuk pembelajaran mesin, visi mesin, dan aplikasi pemrosesan video. Anda dapat menonton ulasan terperinci untuk itu di saluran YouTube saya.

Nvidia telah berusaha menjadikan Jetson Nano sebagai proyek yang mudah digunakan dan mudah dikembangkan. Mereka bahkan meluncurkan sedikit kursus tentang cara membuat robot Anda dengan Jetson Nano, beberapa hari setelah papan diluncurkan. Anda dapat menemukan detail tentang proyek itu di sini.

Namun saya sendiri memiliki beberapa masalah dengan Jetbot sebagai proyek:

1) Itu tidak cukup EPIC bagi saya. Jetson Nano adalah papan yang sangat menarik dengan kemampuan pemrosesan yang luar biasa dan membuat robot beroda sederhana dengan itu tampak seperti hal yang sangat … tidak menyenangkan untuk dilakukan.

2) Pilihan perangkat keras. Jetbot membutuhkan beberapa perangkat keras yang mahal/dapat diganti dengan alternatif lain - misalnya mereka menggunakan joystick untuk teleoperasi. Kedengarannya menyenangkan, tetapi apakah saya benar-benar membutuhkan joystick untuk mengendalikan robot?

Jadi, segera setelah saya mendapatkan Jetson Nano, saya mulai mengerjakan proyek saya sendiri, sebuah Jetspider. Idenya adalah untuk mereplikasi demo dasar yang dimiliki Jetbot, tetapi dengan perangkat keras yang lebih umum dan dapat diterapkan ke berbagai proyek yang lebih luas.

Langkah 1: Siapkan Perangkat Keras Anda

Siapkan Perangkat Keras Anda
Siapkan Perangkat Keras Anda

Untuk proyek ini saya menggunakan prototipe awal robot berkaki empat Zuri, yang dibuat oleh Zoobotics. Itu tergeletak di sekitar lab perusahaan kami untuk waktu yang lama. Saya melengkapinya dengan dudukan kayu yang dipotong laser untuk Jetson Nano dan dudukan kamera. Desainnya eksklusif, jadi jika untuk robot Jetson Nano Anda ingin membuat sesuatu yang serupa, Anda dapat melihat proyek Meped, yang merupakan hewan berkaki empat serupa dengan desain open-source. Faktanya, karena tidak ada yang memiliki kode sumber untuk mikrokontroler Zuri (Arduino Mega) di lab kami, saya menggunakan kode dari Meped dengan beberapa penyesuaian kecil pada offset kaki/kaki.

Saya menggunakan web-cam USB Raspberry Pi yang kompatibel dan dongle USB Wifi.

Poin utamanya adalah karena kita akan menggunakan Pyserial untuk komunikasi serial antara mikrokontroler dan Jetson Nano, sistem Anda pada dasarnya dapat menggunakan semua jenis mikrokontroler, asalkan dapat dihubungkan dengan Jetson Nano dengan kabel serial USB. Jika robot Anda menggunakan motor DC dan driver motor (misalnya berbasis L298P), driver motor dapat langsung dihubungkan dengan Jetson Nano GPIO. Namun sayangnya, untuk mengontrol servos Anda hanya dapat menggunakan mikrokontroler lain atau driver servo I2C khusus, karena Jetson Nano tidak memiliki perangkat keras GPIO PWM.

Singkatnya, Anda dapat menggunakan jenis robot dengan mikrokontroler apa pun yang dapat dihubungkan dengan Jetson Nano menggunakan kabel data USB. Saya mengunggah kode untuk Arduino Mega ke repositori github untuk tutorial ini dan bagian yang relevan untuk menghubungkan Jetson Nano dengan Arduino ada di sini:

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

{

kasus 1':

maju();

merusak;

kasus '2':

kembali();

merusak;

kasus '3':

belok kanan();

merusak;

kasus '4':

belok kiri();

merusak;

Kami memeriksa apakah ada data yang tersedia, dan jika ada, meneruskannya ke struktur kontrol switch-case. Perhatikan, bahwa data dari serial itu datang sebagai karakter, perhatikan tanda kutip tunggal di sekitar angka 1, 2, 3, 4.

Langkah 2: Instal Paket yang Diperlukan

Untungnya bagi kami, image sistem Jetson Nano default hadir dengan banyak hal yang sudah diinstal sebelumnya (seperti OpenCV, TensorRT, dll), jadi kami hanya perlu menginstal beberapa paket lain untuk membuat kode berfungsi dan mengaktifkan SSH.

Mari kita mulai dengan mengaktifkan SSH jika Anda ingin melakukan semua pekerjaan lainnya dari jarak jauh.

sudo apt update

sudo apt install openssh-server

Server SSH akan mulai secara otomatis.

Untuk terhubung ke mesin Ubuntu Anda melalui LAN, Anda hanya perlu memasukkan perintah berikut:

ssh nama pengguna@ip_address

Jika Anda memiliki mesin Windows, Anda perlu menginstal klien SSH, misalnya Putty.

Mari kita mulai dengan menginstal Python Package Manager(pip) dan Pillow untuk manipulasi gambar.

sudo apt install python3-pip python3-pil

Kemudian kita akan menginstal repositori Jetbot, karena kita mengandalkan beberapa bagian dari kerangka kerjanya untuk melakukan deteksi objek.

sudo apt install python3-smbus python-pyserial

git clone

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py install

Terakhir, kloning repositori Github saya untuk proyek ini ke folder rumah Anda dan instal Flask dan beberapa paket lain untuk kendali jarak jauh robot menggunakan server web.

git clone

CD

sudo pip3 install -r requirements-opencv

Unduh model SSD (Single Shot Detector) yang telah dilatih sebelumnya dari tautan ini dan letakkan di folder jetspider_demos.

Sekarang kita baik untuk pergi!

Langkah 3: Jalankan Kode

Jalankan Kode
Jalankan Kode

Saya membuat dua demo untuk Jetspider, yang pertama adalah teleoprasi sederhana, sangat mirip dengan yang saya buat sebelumnya untuk bajak Pisang Pi dan yang kedua menggunakan TensorRT untuk deteksi objek dan mengirimkan perintah gerakan melalui koneksi serial ke mikrokontroler.

Karena sebagian besar kode teleoprasi dijelaskan dalam tutorial saya yang lain (saya hanya membuat beberapa penyesuaian kecil, mengubah transmisi video) di sini saya akan fokus pada bagian Deteksi Objek.

Skrip utama untuk objek berikut adalah object_following.py di jetspider_object_following, untuk teleoperasi adalah spider_teleop.py di jetspider_teleoperation.

Objek skrip berikut dimulai dengan mengimpor modul yang diperlukan dan mendeklarasikan variabel dan instance kelas. Kemudian kita mulai server web Flask dengan baris ini

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

Segera setelah kami membuka alamat 0.0.0.0(localhost) di browser web kami atau alamat Jetson Nano di jaringan (dapat memeriksa dengan perintah ifconfig), fungsi ini akan dijalankan

indeks def():

Itu membuat template halaman web yang kita miliki di folder templates. Template memiliki sumber video yang disematkan di dalamnya, jadi setelah selesai memuat, def video_feed(): akan dieksekusi, yang mengembalikan objek Respon yang diinisialisasi dengan fungsi generator.

Rahasia untuk menerapkan pembaruan di tempat (memperbarui gambar di halaman web untuk aliran video kami) adalah dengan menggunakan respons multi-bagian. Respon multipart terdiri dari header yang menyertakan salah satu tipe konten multipart, diikuti oleh bagian, dipisahkan oleh penanda batas dan masing-masing memiliki tipe konten spesifik bagiannya sendiri.

Dalam fungsi def gen(): kita mengimplementasikan fungsi generator dalam infinite loop yang menangkap gambar, mengirimkannya ke fungsi def execute(img):, menghasilkan gambar untuk dikirim ke halaman web setelah itu.

def execute(img): fungsi adalah tempat semua keajaiban terjadi, ia mengambil gambar, mengubah ukurannya dengan OpenCV dan meneruskannya ke instance kelas Jetbot ObjectDetector "model". Ini mengembalikan mengembalikan daftar deteksi dan kami menggunakan OpenCV untuk menggambar persegi panjang biru di sekitarnya dan menulis anotasi dengan kelas objek yang terdeteksi. Setelah itu kita cek apakah ada objek yang kita minati detectmatching_detections = [d for d in detection[0] if d['label'] == 53]

Anda dapat mengubah nomor (53) ke nomor lain dari dataset CoCo jika Anda ingin robot Anda mengikuti objek lain, 53 adalah sebuah apel. Seluruh daftar ada di file kategori.py.

Akhirnya jika tidak ada objek yang terdeteksi selama 5 detik kami mengirimkan karakter "5" untuk robot untuk menghentikan serial. Jika objek ditemukan, kami menghitung seberapa jauh dari pusat gambar dan bertindak sesuai (jika dekat dengan pusat, lurus (karakter "1" pada seri), jika di kiri, ke kiri, dll). Anda dapat bermain dengan nilai-nilai tersebut untuk menentukan yang terbaik untuk pengaturan khusus Anda!

Langkah 4: Pikiran Terakhir

Pikiran Akhir
Pikiran Akhir

Ini adalah inti dari demo ObjectFollowing, jika Anda ingin tahu lebih banyak tentang streaming Video server web Flask, Anda dapat melihat tutorial hebat ini oleh Miguel Grinberg.

Anda juga dapat melihat notebook Deteksi Objek Nvidia Jetbot di sini.

Saya harap implementasi demo Jetbot saya akan membantu membangun robot Anda menggunakan kerangka kerja Jetbot. Saya tidak menerapkan demo penghindaran rintangan, karena menurut saya pilihan model tidak akan menghasilkan hasil penghindaran rintangan yang baik.

Tambahkan saya di LinkedId jika Anda memiliki pertanyaan dan berlangganan saluran YouTube saya untuk mendapatkan pemberitahuan tentang lebih banyak proyek menarik yang melibatkan pembelajaran mesin dan robotika.

Direkomendasikan: