Isi kandungan:

Tutorial Pengesanan Objek Robot Berkadapan Jetson Nano: 4 Langkah
Tutorial Pengesanan Objek Robot Berkadapan Jetson Nano: 4 Langkah

Video: Tutorial Pengesanan Objek Robot Berkadapan Jetson Nano: 4 Langkah

Video: Tutorial Pengesanan Objek Robot Berkadapan Jetson Nano: 4 Langkah
Video: Dikira Warga Gadungan Ternyata Gerakannya Bikin NgeriiišŸ˜± 2024, Jun
Anonim
Image
Image

Nvidia Jetson Nano adalah kit pembangun, yang terdiri daripada SoM (System on Module) dan papan pembawa rujukan. Ini terutama disasarkan untuk membuat sistem tertanam yang memerlukan daya pemprosesan yang tinggi untuk pembelajaran mesin, penglihatan mesin dan aplikasi pemprosesan video. Anda boleh menonton ulasan terperinci untuknya di saluran YouTube saya.

Nvidia telah berusaha menjadikan Jetson Nano sebagai mesra pengguna dan mudah untuk membangunkan projek dengan seboleh mungkin. Mereka bahkan melancarkan sedikit kursus bagaimana membina robot anda dengan Jetson Nano, beberapa hari selepas papan itu dilancarkan. Anda boleh mendapatkan butiran mengenai projek itu di sini.

Namun saya sendiri mempunyai beberapa masalah dengan Jetbot sebagai projek:

1) Tidak cukup EPIC untuk saya. Jetson Nano adalah papan yang sangat menarik dengan kemampuan pemprosesan yang hebat dan membuat robot beroda sederhana dengannya sepertinya sangatā€¦ perkara yang tidak dapat dilakukan.

2) Pilihan perkakasan. Jetbot memerlukan beberapa perkakasan yang mahal / boleh diganti dengan alternatif lain - contohnya mereka menggunakan kayu bedik untuk teleoperasi. Kedengarannya menyeronokkan, tetapi adakah saya benar-benar memerlukan kayu bedik untuk mengawal robot?

Oleh itu, sebaik sahaja saya menggunakan Jetson Nano, saya mula mengusahakan projek saya sendiri, iaitu Jetspider. Ideanya adalah untuk meniru demo asas yang dimiliki Jetbot, tetapi dengan perkakasan yang lebih umum dan dapat digunakan untuk pelbagai projek yang lebih luas.

Langkah 1: Sediakan Perkakasan Anda

Sediakan Perkakasan Anda
Sediakan Perkakasan Anda

Untuk projek ini, saya menggunakan prototaip awal robot berkembar Zuri, yang dibuat oleh Zoobotics. Sudah lama berada di makmal syarikat kami. Saya dilengkapi dengan pelekap kayu yang dipotong laser untuk Jetson Nano dan pelekap kamera. Reka bentuknya adalah proprietari, jadi jika untuk robot Jetson Nano anda ingin membuat sesuatu yang serupa, anda boleh melihat projek Meped, yang serupa dengan reka bentuk sumber terbuka. Sebenarnya, kerana tiada siapa yang mempunyai kod sumber untuk pengawal mikro Zuri (Arduino Mega) di makmal kami, saya menggunakan kod dari Meped dengan beberapa penyesuaian kecil pada kaki / kaki yang diimbangi.

Saya menggunakan web-cam serasi USB Raspberry Pi biasa dan dongle USB Wifi.

Perkara utama adalah kerana kita akan menggunakan Pyserial untuk komunikasi bersiri antara mikrokontroler dan Jetson Nano, sistem anda pada dasarnya dapat menggunakan semua jenis mikrokontroler, asalkan dapat dihubungkan dengan Jetson Nano dengan kabel bersiri USB. Sekiranya robot anda menggunakan motor DC dan pemacu motor (contohnya berdasarkan L298P) adalah mungkin untuk menghubungkan pemacu motor secara langsung dengan Jetson Nano GPIO. Tetapi, malangnya, untuk mengawal servos anda hanya boleh menggunakan mikrokontroler lain atau pemacu servo I2C khusus, kerana Jetson Nano tidak mempunyai perkakasan GPIO PWM.

Sebagai kesimpulan, anda boleh menggunakan jenis robot dengan mikrokontroler yang boleh dihubungkan dengan Jetson Nano menggunakan kabel data USB. Saya memuat naik kod untuk Arduino Mega ke repositori github untuk tutorial ini dan bahagian yang berkaitan untuk menghubungkan Jetson Nano dengan Arduino ada di sini:

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

{

kes '1':

ke hadapan ();

rehat;

kes '2':

belakang ();

rehat;

kes '3':

belok kanan();

rehat;

kes '4':

belok kiri();

rehat;

Kami memeriksa apakah ada data yang tersedia, dan jika ada, sampaikan ke struktur kawalan case-case. Perhatikan, bahawa data dari siri ini muncul sebagai watak, perhatikan tanda petik tunggal di sekitar angka 1, 2, 3, 4.

Langkah 2: Pasang Pakej yang Diperlukan

Nasib baik untuk kami, imej sistem Jetson Nano lalai dilengkapi dengan banyak barang yang telah dipasang sebelumnya (seperti OpenCV, TensorRT, dan lain-lain), jadi kami hanya perlu memasang beberapa pakej lain untuk membuat kod berfungsi dan mengaktifkan SSH.

Mari mulakan dengan mengaktifkan SSH sekiranya anda ingin melakukan semua pekerjaan yang lain dari jarak jauh.

sudo apt kemas kini

sudo apt install openssh-server

Pelayan SSH akan bermula secara automatik.

Untuk menyambung ke mesin Ubuntu melalui LAN, anda hanya perlu memasukkan arahan berikut:

ssh nama pengguna @ ip_address

Sekiranya anda mempunyai mesin Windows, anda perlu memasang klien SSH, misalnya Putty.

Mari mulakan dengan memasang Python Package Manager (pip) dan Pillow untuk manipulasi gambar.

sudo apt pasang python3-pip python3-pil

Kemudian kami akan memasang repositori Jetbot, kerana kami bergantung pada beberapa bahagian kerangka untuk melakukan pengesanan objek.

sudo apt pasang python3-smbus python-pyserial

klon git

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py pasang

Akhirnya klon repositori Github saya untuk projek ini ke folder rumah anda dan pasang Flask dan beberapa pakej lain untuk alat kawalan jauh robot menggunakan pelayan web.

git klon

cd

sudo pip3 install -r requirements-opencv

Muat turun model SSD (Single Shot Detector) yang telah dilancarkan dari pautan ini dan letakkan di folder jetspider_demos.

Sekarang kita boleh pergi!

Langkah 3: Jalankan Kod

Jalankan Kod
Jalankan Kod

Saya membuat dua demo untuk Jetspider, yang pertama adalah teleoprasi sederhana, sangat serupa dengan yang saya buat sebelumnya untuk Banana Pi rover dan yang kedua menggunakan TensorRT untuk pengesanan objek dan menghantar arahan pergerakan melalui sambungan bersiri ke mikrokontroler.

Oleh kerana sebahagian besar kod teleoprasi dijelaskan dalam tutorial saya yang lain (saya hanya membuat beberapa perubahan kecil, menyusun semula transmisi video) di sini saya akan memberi tumpuan kepada bahagian Pengesanan Objek.

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

Objek berikut skrip dimulakan dengan mengimport modul yang diperlukan dan menyatakan pemboleh ubah dan contoh kelas. Kemudian kami memulakan pelayan web Flask dengan baris ini

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

Sebaik sahaja kami membuka alamat 0.0.0.0 (localhost) di penyemak imbas web kami atau alamat Jetson Nano di rangkaian (boleh memeriksa dengan perintah ifconfig), fungsi ini akan dilaksanakan

indeks def ():

Ini menjadikan templat halaman web yang kita ada dalam folder templat. Templat mempunyai sumber video yang disematkan di dalamnya, jadi setelah selesai memuatkan, def video_feed (): akan dijalankan, yang mengembalikan objek Respons yang diinisialisasi dengan fungsi generator.

Rahsia untuk melaksanakan kemas kini di tempat (mengemas kini gambar di laman web untuk aliran video kami) adalah dengan menggunakan respons berbilang pihak. Respons pelbagai bahagian terdiri daripada tajuk yang merangkumi salah satu jenis kandungan berbilang bahagian, diikuti oleh bahagian-bahagian, dipisahkan oleh penanda sempadan dan masing-masing mempunyai jenis kandungan khusus bahagiannya sendiri.

Dalam def gen (): fungsi kita menerapkan fungsi generator dalam gelung tak terhingga yang menangkap gambar, mengirimkannya ke def execute (img): function, menghasilkan gambar yang akan dikirim ke halaman web setelah itu.

def execute (img): fungsi adalah di mana semua keajaiban berlaku, ia mengambil gambar, mengubah ukurannya dengan OpenCV dan menyebarkannya ke Jetbot ObjectDetector contoh "model" kelas. Ia mengembalikan senarai pengesanan dan kami menggunakan OpenCV untuk melukis segi empat biru di sekelilingnya dan menulis anotasi dengan kelas yang dikesan objek. Selepas itu kami memeriksa sama ada terdapat objek minat kami yang dikesanmatching_detections = [d for d in detection [0] if d ['label'] == 53]

Anda boleh menukar nombor itu (53) ke nombor lain dari set data CoCo jika anda mahu robot anda mengikuti objek lain, 53 adalah sebiji epal. Keseluruhan senarai terdapat dalam fail pages.py.

Akhirnya jika tidak ada objek yang dikesan selama 5 saat, kami menghantar watak "5" untuk robot berhenti di atas siri ini. Sekiranya objek dijumpai, kami mengira sejauh mana dari pusat gambar dan bertindak dengan sewajarnya (jika dekat dengan pusat, lurus (watak "1" pada siri), jika di sebelah kiri, ke kiri, dll). Anda boleh bermain dengan nilai-nilai tersebut untuk menentukan yang terbaik untuk persediaan tertentu anda!

Langkah 4: Pemikiran Akhir

Pemikiran Akhir
Pemikiran Akhir

Ini adalah inti dari demo ObjectFollowing, jika anda ingin mengetahui lebih lanjut mengenai streaming Video pelayan web Flask, anda boleh melihat tutorial hebat ini oleh Miguel Grinberg.

Anda juga boleh melihat buku nota Nvidia Jetbot Object Detection di sini.

Saya harap pelaksanaan demo Jetbot saya dapat membantu membina robot anda menggunakan rangka kerja Jetbot. Saya tidak melaksanakan demo penghindaran halangan, kerana saya fikir pilihan model tidak akan memberikan hasil penghindaran halangan yang baik.

Tambahkan saya di LinkedId jika anda mempunyai sebarang pertanyaan dan melanggan saluran YouTube saya untuk diberitahu mengenai projek yang lebih menarik yang melibatkan pembelajaran mesin dan robotik.

Disyorkan: