
Isi kandungan:
2025 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2025-01-23 15:01


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

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

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

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:
Pengesanan Objek Dengan Papan Sipeed MaiX (Kendryte K210): 6 Langkah

Pengesanan Objek Dengan Papan Sipeed MaiX (Kendryte K210): Sebagai kesinambungan dari artikel saya sebelumnya mengenai pengecaman gambar dengan Papan Sipeed MaiX, saya memutuskan untuk menulis tutorial lain, dengan fokus pada pengesanan objek. Terdapat beberapa perkakasan menarik muncul baru-baru ini dengan cip Kendryte K210, termasuk S
Pengesanan Objek Raspberry Pi: 7 Langkah

Pengesanan Objek Raspberry Pi: Panduan ini memberikan arahan langkah demi langkah tentang cara menyiapkan API Pengesanan Objek TensorFlow pada Raspberry Pi. Dengan mengikuti langkah-langkah dalam panduan ini, anda akan dapat menggunakan Raspberry Pi anda untuk melakukan pengesanan objek pada video langsung dari P
Penjejakan Objek Berasaskan Pengesanan Warna: 10 Langkah

Penjejakan Objek Berasaskan Pengesanan Warna: Kisah Saya melakukan projek ini untuk belajar memproses gambar menggunakan Raspberry PI dan membuka CV. Untuk menjadikan projek ini lebih menarik, saya menggunakan dua motor SG90 Servo dan memasang kamera di atasnya. Satu motor digunakan untuk bergerak secara mendatar dan motor kedua digunakan untuk menggerakkan verticall
Pengesanan Objek W / Dragonboard 410c atau 820c Menggunakan OpenCV dan Tensorflow .: 4 Langkah

Pengesanan Objek W / Dragonboard 410c atau 820c Menggunakan OpenCV dan Tensorflow .: Instruksional ini menerangkan cara memasang rangka kerja OpenCV, Tensorflow, dan pembelajaran mesin untuk Python 3.5 untuk menjalankan aplikasi Objek Deteksi
Penganalisis Corak Lalu Lintas Menggunakan Pengesanan Objek Langsung: 11 Langkah (dengan Gambar)

Penganalisis Corak Lalu Lintas Menggunakan Pengesanan Objek Langsung: Di dunia masa kini, lampu isyarat penting untuk jalan raya yang selamat. Namun, berkali-kali, lampu isyarat boleh menjengkelkan dalam keadaan di mana seseorang menghampiri lampu sama seperti lampu merah. Ini membuang masa, terutamanya jika cahaya pr