Mengemudi Sendiri GAZ66 Monster Truck 1/16

Habr, halo!

Saya ingin memberi tahu Anda tentang bagaimana saya melakukannya dan membuat mesin yang

bisa mengatur diri sendiri :) Saya bisa langsung tahu cara melakukannya dengan memasang sirkuit dan perintah bash secara kering, tetapi itu akan sangat membosankan. Saya menawarkan kepada Anda kisah yang menarik (saya harap) tentang bagaimana saya secara pribadi pergi ke sini dan ke mana saya datang.

Tempat-tempat di mana ada sesuatu untuk mengambil gambar dengan foto. Di mana tentang perangkat lunak - kemungkinan besar tanpa foto.

Ini akan benar-benar cerita dalam format naratif, seperti yang akan saya ceritakan sambil minum kopi. Ini bukan tentang perintah bash, skrip python, dan itu saja.

Mari kita mulai dengan foto dan video tentang apa yang terjadi, dan kemudian keseluruhan cerita di bawah potongan.




Sejarah akan mengikuti skenario ini.


  • Kenapa aku menginginkannya
  • Cara kerja mesin self-driving (tampilan atas)
  • Usia 1 - Gelendwagen dari dunia anak-anak + kamera Raspberry Pi Zero W +
  • Usia 2 - GAZ66 + NVIDIA Jetson Nano + Kamera untuk RaspberryPi
  • Usia 3 - Remo Hobby SMAX
  • Usia 4 - Koneksi SMAX dan GAZ66
  • Usia 5 - Komponen Pemasangan pada Truk Rakasa
  • Usia 6 - Memasang Mobil Keledai dan sekitarnya
  • Usia 7 - Lacak perakitan, perjalanan
  • Usia 8 - Bepergian dengan Joystick
  • Usia 9 - Pelatihan Neuron
  • Usia 10 - Semuanya berhasil, akhirnya!
  • Apa berikutnya?
  • Tantangan pertempuran
  • Masyarakat
  • Gambar kartu sd mesin tik saya

Tuang kopi, kita berangkat!

Kenapa aku menginginkannya


Semuanya berawal dari fakta bahwa saya frustrasi oleh fakta bahwa di satu perusahaan IT besar di Rusia mereka membuat drone yang sangat keren, ini sangat keren, tapi saya tidak bekerja :)

Tidak, well, ini sangat keren - mobil self-driving) Paduan yang sangat baik dari mekanika dan algoritme :)

Frustasi berlanjut hingga saya menggabungkan di kepala saya berbagai fakta tentang diri saya, yaitu:

  • Saya bisa menulis dengan python
  • Saya (kurang-lebih) mengerti bagaimana pembelajaran mesin bekerja
  • Saya tahu cara bekerja dengan Linux di konsol
  • Saya menghabiskan masa kecil saya dengan besi solder
  • Saya memiliki seluruh kotak dengan komponen diy (raspberry pi, arduino, sensor, dll.)

Ketika semuanya berjalan di kepala saya, saya memutuskan - self driving car (sdc) menjadi!

Untuk memulainya, saya memutuskan, akan bermanfaat untuk mengetahui cara kerja sdc, dan ini akan menjadi bagian selanjutnya.

Cara kerja mesin self-driving (tampilan atas)


Agar mobil dapat berjalan sendiri, dibutuhkan empat komponen - kereta, sensor, komputer, dan algoritma.

Mari kita cari tahu


Trolley

Apa yang sebenarnya akan dikendarai. Roda, motor, baterai yang menggerakkan semuanya.

Ada dua kohort bersyarat dari mobil yang saya namakan untuk diri saya sendiri - mobil dari dunia anak-anak, dan mobil untuk hobi.

Jangan coba-coba main mata dengan mobil dari dunia anak-anak, saya mencoba, ini gagal. Kekurangan mereka adalah bahwa mereka memiliki motor yang lemah tanpa umpan balik. Ini berarti bahwa Anda mungkin dapat menghentikan karpet rumah, dan bahwa Anda tidak dapat membalikkan dengan akurasi yang diberikan.

Mobil dari dunia hobi adalah yang Anda butuhkan. Mereka memiliki mesin yang kuat, baterai yang bagus, servo roda depan untuk belokan. Anggap ini sebagai ambang entri. Yang termurah dan normal yang bisa saya temukan adalah Remo Hobby SMAX.



Sensor

Ia mengumpulkan beberapa informasi tentang dunia di sekitarnya dan mentransfernya ke komputer untuk pengambilan keputusan.

Pada dasarnya, set yang sopan untuk SDC adalah:

  • Kamera. Dasar dasar-dasar SDC. Dia melihat sepotong ruang di depannya, mentransfer gambar ke komputer yang mengenali apa yang terjadi, dan memutuskan apa yang harus dilakukan. Tampaknya saya belum melihat implementasi SDC tanpa kamera.
  • Sensor IMU. Sepotong menunjukkan percepatan dan sudut kemiringan di sepanjang sumbu. Ini membantu untuk memahami ke mana kita sebenarnya pergi, dan bagaimana lokasi kita telah berubah relatif terhadap titik awal. Digunakan di hampir semua copters.
  • . , , , . , SDC, , . , 75$, SDC Velodyne 4K$. , 3D , 2D.
  • GPS. , , , SDC .
  • . โ€” , . 3D .



Komputer

Apa yang menerima nilai dari sensor menganalisis situasi, kami mentransfer perintah kontrol ke troli.

Di dunia komputer untuk elektronik tertanam, prosesor ARM yang hemat energi (seperti di ponsel Anda), dan komputer papan tunggal yang didasarkan padanya, menguasai bola.

Saat ini ada dua opsi papan tunggal paling populer - RaspberryPi dan NVIDIA Jetson.
RaspberryPi memiliki harga lebih rendah, berbagai proyek, komunitas besar.

NVIDIA memiliki harga lebih tinggi, lebih sedikit proyek, tetapi lebih banyak produktivitas dalam tugas pembelajaran mesin. Ini memiliki 128 inti CUDA (seperti pada kartu grafis NVIDIA besar Anda), yang digunakan untuk mempercepat algoritma pembelajaran mesin.

Ada tiga potong Raspberry Pi (ZeroW, 3, 4) dan NVIDIA Jetson Nano dalam koleksi saya. Saya memutuskan untuk merakit mesin, tentu saja, di Jetson.



Algoritma

Itu memutuskan tindakan berdasarkan pembacaan sensor. Biasanya, kombinasi visi komputer dan jaringan saraf digunakan untuk ini. Pada versi paling dasar, Anda mengarahkan diri Anda pada mesin tik Anda sepanjang beberapa tanda, merekam video perjalanan tersebut dengan pelacakan gas / rem / belok, dan kemudian melatih pada jaringan saraf ini sehingga ia menemukan Anda ketergantungan sinyal mesin pada gambar dari kamera. Sederhananya, ini adalah tugas mengenali markup, dan berusaha untuk tetap di dalamnya.

Jika Anda ingin menyegarkan cara kerja jaringan saraf, maka saya sarankan Anda menonton video ini:


Di sini saya menjelaskan opsi paling sederhana, di mana hanya ada kamera dan penandaan. Tetapi ada pilihan dengan lebih banyak sensor dan logika kerja yang berbeda - akan ada posting terpisah tentang ini di sini.

Jika levelnya sangat tinggi, maka itu saja.

Hanya tersisa:

  • merakit troli
  • menggantung sensor
  • menghubungkan komputer
  • menggambar markup
  • naik itu
  • untuk melatih jaringan saraf
  • untuk pergi

Sekarang kita sudah mengetahui apa itu mobil self-driving, mari beralih ke era implementasi seperti apa yang saya miliki secara spesifik.

Usia 1 - Gelendwagen dari dunia anak-anak + kamera Raspberry Pi Zero W +


Ya, pendekatan pertama saya hanya itu. Itu terjadi karena ada dunia anak-anak di dekat rumah saya yang saya kunjungi, di mana saya menyukai Gelik, dan saya membelinya.

Oke, saya pikir, ada heliks, sekarang saya butuh komputer dan sensor. Pikir - dilakukan. Memesan RPi Zero W dan kamera untuknya. Ketika saya sedang menunggu komputer dan kamera, saya masuk dan membeli bank daya untuk bisnis ini.
Jadi, semuanya ada di tempatnya, saatnya untuk mengumpulkan. Saya menemukan proyek seperti itu , saya memutuskan untuk mengikutinya.
Gelik dibongkar, mengeluarkan otak asalnya, memindahkannya ke pengontrol mesin, ia, pada gilirannya, memindahkannya ke RPi, menghubungkan kamera ke sana, menyalakan semuanya dengan bank daya, dan puas.

Sebelum melanjutkan pemerintahan sendiri, saya memutuskan untuk naik melalui konsol untuk bersenang-senang, mengejar kucing, menyiarkan gambar dari kamera ke laptop saya.

Saat itulah beberapa kegagalan menunggu saya.

Pertama, Raspberry Pi Zero W sangat lemah dalam hal kinerja.

Kedua - Kemampuan gelik dari dunia anak-anak hampir tidak ada, dihentikan oleh hampir semua hambatan minimal.

Sudah, menjadi jelas bahwa proyek itu masih lahir, tetapi demi kepentingan, saya mencoba untuk merakit visi komputer (OpenCV) untuk Raspberry Pi Zero langsung di atasnya. Butuh, tanpa bercanda, lebih dari sehari, dan merupakan paku terakhir dalam peti mati implementasi SDC ini.
Menjadi jelas bahwa Anda perlu mengubah komputer untuk kinerja yang lebih baik, dan keranjang, untuk kemampuan lintas negara yang lebih besar.

Ternyata cukup lucu:



2 โ€” 66 + NVIDIA Jetson Nano + RaspberryPi


Jadi, pada titik ini menjadi jelas bahwa Anda memerlukan beberapa mobil yang bisa dilewati, dan lebih disukai sebuah truk, untuk meletakkan semua komponen dalam tubuh. Setelah mempelajari satu layanan untuk pemilihan barang, menjadi jelas bahwa model GAZ66 asli kami cocok untuk saya, itu juga merupakan shishiga di antara orang-orang. Oke, saya memesannya, tunggu, saatnya berpikir tentang komputer. Pada saat ini, NVIDIA baru saja mempersiapkan awal penjualan Jetson Nano-nya, dan saya memesan pada hari pertama penjualan.

Sebuah truk tiba, saya terus menunggu Jetson, dengan tidak sabar mengendarai shishiga di sekitar rumah, menggulingkan anak-anak kucing yang melahirkan kucing tersebut di atas. Bukan untuk mengatakan bahwa anak-anak kucing menyukainya - harus berhenti.

Sementara itu, Jetson masih mengemudi, dan saya memesan vakum lidar dari Cina - saya tidak tahu bagaimana menggunakannya secara khusus, tetapi saya mengerti bahwa saya ingin melakukannya.

Suatu hari seorang kurir bisnis muncul di pintu masuk kantor, menyerahkan sekotak besar NVIDIA satu-pembayar, saya menandatangani faktur, dan merasa seperti penggila pengembang - wow, perangkat yang dibeli pada awal penjualan datang kepada saya.

Saatnya mengumpulkan! Tapi pertama-tama, kamu harus keluar, lol. Membongkar shishigu, membuang otak asalnya, melumasi mekanismenya, mulai berkumpul berdasarkan komputer.

Saya menghubungkan kamera, pengontrol mesin, mesin rotari, mesin gas / rem, memulai skrip Python untuk pengujian - sekali lagi mengecewakan!

Kali ini, ceritanya begini: shishigi menggunakan motor konvensional untuk berbelok, bukan drive servo. Jadi, dia tidak punya umpan balik. Jadi, saya tidak bisa mengendalikan mereka dengan pasti, yang berarti tidak cocok untuk SDC.

Oke, sekali lagi, Anda perlu menyelesaikan masalah ini, lakukan sesuatu. Kami lolos ke era berikutnya.





Usia 3 - Remo Hobby SMAX


Karena pada titik waktu ini jelas bahwa mesin yang dibutuhkan tidak hanya lumayan, tetapi juga komponen yang minimal baik, pilihan jatuh di toko-toko bagi mereka yang memiliki RC, ini adalah hobi.
Tanpa basa-basi lagi, saya tiba di satu toko seperti itu, dan tanpa bersembunyi memberi tahu saya apa yang saya lakukan dan jenis mesin apa yang saya butuhkan. Penjual, baik hati, memberi tahu saya mesin mana yang sesuai dengan persyaratan minimum saya, dan itu adalah Remo Hobby SMAX. Saya membelinya.

Saya pulang, mendapat shishigu, melepas semuanya, duduk untuk terhubung ke SMAX. Dan apa yang kamu pikirkan? Benar - gagal lagi!

Pada dasarnya, mobil RC dirancang sedemikian rupa sehingga mesin terhubung ke pengontrol mesin, dan pada gilirannya, terhubung ke modul radio yang berkomunikasi dengan remote control. Dan itu adalah SMAX yang dirancang sehingga ada pengontrol mesin dan modul radio digabungkan - saya benar-benar tidak memiliki kesempatan untuk terhubung ke pengontrol mesin bukan modul radio.

Oke, kamu harus melakukan sesuatu lagi. Saya kembali ke lokasi mobil RC, saya naik ke komponen. Mengaduk-aduk di sana, dan bersorak, saya menemukan pengontrol motor yang memiliki kabel terpisah ke modul radio.

Saya memesan, membawa, mengumpulkan semuanya lagi - itu berfungsi, tetapi hanya berubah. Tapi tidak ada gas dan mundur! Ya ampun, kurasa, tapi aku terus mengambilnya.

Kali ini tidak berhasil, agar mesin SMAX untuk bangun, konsol harus mengirimkan nilai tertentu (360) melalui modul radio. Tapi saya tidak tahu tentang itu, dan memasukkan nilai langsung untuk gas rem. Dan mesin tidak bereaksi, melanjutkan dari logika bahwa tidak ada yang memintanya untuk bangun.

Pada titik tertentu, saya duduk untuk memilah-milah segala sesuatu secara berurutan, berharap itu akan bereaksi terhadap setidaknya sesuatu.

Pada awalnya saya melewati 100 - melewati. Lalu 50 oleh. Dan ketika saya mencapai pencarian 10, saya mendengar jeritan selamat datang di 360 - sorak-sorai! Bekerja!

Saya menguji gas / mundur / kiri / kanan dari konsol, semuanya berfungsi. Ini api, inilah saya seorang programmer =)

Sepertinya sudah waktunya untuk berkumpul, tetapi ada masalah - sama sekali tidak ada tempat untuk meletakkan komponen. Mobil RC dirancang sedemikian rupa sehingga atasan mereka adalah hal yang sangat kondisional. Pertama, bagian atas terdiri dari plastik yang sangat tipis, dan kedua, itu adalah jip, dan tidak ada tempat untuk meletakkan semuanya.
Pada saat ini saya memutuskan untuk mencari, dan bagaimana, sebenarnya, orang lain melakukannya.

Saya menemukan proyek mobil keledai, yang memiliki segalanya berdasarkan turn-key untuk merakit SDC Anda - baik contoh Perangkat Keras dan kerangka kerja Perangkat Lunak. Tampaknya keren, ambil dan gunakan, tetapi ada nuansa:

  • mereka mencetak bagian atas mobil pada printer 3D, dan kemudian mengingatkan mobil sangat jauh. pendeknya, jelek, tidak menyenangkan secara estetika
  • model 3D mereka kompatibel dengan mesin yang tidak kami jual.

Oke, ingat Donkey Car, maka kita akan mengambil kerangka Perangkat Lunak mereka, tetapi untuk sekarang kita perlu memikirkan perangkat keras.

Suatu hari, menoleh ke apartemen saya, saya melihat shishigu yang dibongkar, di SMAX tanpa top, dan berpikir - hmmm, dan mereka tampaknya memiliki skala yang sama (1/16). Dia mengambil shishiga, mengambil SMAX, hanya menempatkan satu per satu di sisi lain - dan sungguh, itu benar! Dan itu terlihat keren! OK, saya harus melakukannya! Kami lolos ke era berikutnya.







Usia 4 - Koneksi SMAX dan GAZ66


Jadi, pada awal era ini, saya memiliki target internal - untuk menghubungkan bagian atas dari satu mesin ke bagian bawah dari yang lain. Karena saya dan kolega saya mengambil chip dalam printer 3D, dan saya adalah co-owner (investor serius), diputuskan untuk menggambar koneksi dalam program CAD, mencetak, dan dengan demikian menghubungkan mereka.

Dengan ide ini, saya berjalan sekitar 2 bulan, berpikir bahwa saya baru saja akan duduk untuk memahami sistem CAD. Lol, tidak. Setelah mengakui pada diri sendiri bahwa saya tidak ingin memahami sistem CAD, saya mulai berpikir apa pilihan lain.

Saya kembali ke dunia anak-anak, memutuskan untuk melihat para desainer, tiba-tiba mereka entah bagaimana membantu saya. Saya membeli konstruktor logam klasik, yang bersama saya ketika saya masih di sekolah (sekolah tua abu disatukan).

Dia menyeretnya pulang, meletakkan dua bagian mesin secara berdampingan, dan mulai menerapkan semua jenis elemen desainer pada mereka. Berapa lama, secara singkat, semacam pemahaman mulai muncul, bagaimana, setidaknya secara teori, ini bisa dilakukan.

Mulai lakukan. Menghabiskan lebih dari satu hari dengan kunci pas bayi, kacang, dan pemikiran spasial.

Ketika saya terhubung, saya belajar mengebor plastik dengan obeng, dengan hati-hati merobek bagian berlebih agar tidak merusak kasing, kunci mur dengan mur lainnya (tetapi tanpa mesin cuci toh begitu-begitu). Secara umum, Trudovik saya akan bangga pada saya.

Setelah sekitar tiga perubahan dan tiga hari, saya melihat truk monster ini di depan saya - Edisi SMAX GAZ66 oleh Beslan.

Jadi, tampaknya basis perangkat keras sudah siap, beralih ke era berikutnya.





Usia 5 - Komponen Pemasangan pada Truk Rakasa


Akhirnya:

  • Saya memiliki gerobak dengan komponen yang bagus
  • Saya memiliki estetika dan lapang atas
  • gas / rem / belokan bekerja secara normal pada troli ini
  • atas dan bawah bahkan terhubung bersama =)

Saatnya untuk memasang komponen pada keindahan ini.

Berbekal obeng sebagai bor untuk plastik, dan selotip dua sisi sebagai dudukan universal untuk semuanya, saya mulai berbisnis.

Saya membuat dudukan untuk kamera di kabin, yang memungkinkan Anda untuk menyesuaikan sudut kamera. Melemparkan kereta panjang dari kamera ke Jetson, yang, pada gilirannya, duduk di belakang.

Selain Jetson, orang-orang berikut ini menetap di belakang:

  • POWERBANK untuk menyalakan komputer (menyumbangkan utamanya, keren, dengan pengiriman daya usb sehingga jetson tidak gagal daya)
  • PCA9685 (pengontrol PWM) untuk kontrol motor
  • baterai untuk memberi daya pada mesin mesin

Karena proyek itu sudah dianggap jangka panjang pada saat itu, saya memutuskan untuk tidak mengacaukan lidar dan membuat MVP setidaknya pada kamera dan perangkat lunak dari Donkey Car.

Untuk bersenang-senang saya menghubungkan lampu utama saya dari GAZ66 untuk membuatnya lebih indah dan lebih percaya diri dalam gelap.

Oke, mesin saya menyala, mesin merespons perintah dari python, kamera memberikan gambar, lampu menyala, semuanya baik-baik saja, saatnya untuk menginstal perangkat lunak.





Usia 6 - Memasang Mobil Keledai dan sekitarnya


Untungnya, pada tahap terakhir saya menemukan proyek Mobil Keledai, dan itu membuat hidup saya jauh lebih mudah, menyelamatkan saya dari menulis semuanya sendiri. Sederhananya, DonkeyCar adalah kerangka kerja yang sudah memiliki semua yang Anda butuhkan untuk SDC. Dan mereka bahkan memiliki panduan tentang cara menginstal perangkat lunak. Tetapi, seperti yang biasanya terjadi pada OpenSource, panduan ini sudah usang dan saling bertentangan di saat-saat tertentu.

Oke, harus mencari tahu. Untuk operasi normal kerangka kerja, diperlukan pustaka berikut:

  • Opencv
  • tensorflow-gpu (gpu untuk jetson, karena ada kernel cuda. โ€‹โ€‹untuk rpi ada tensorflow-lite)
  • tensorrt (perpustakaan untuk mempercepat inferensi neuron)
  • dan semua yang diatur secara otomatis berdasarkan daftar lingkungan

Mari kita mulai dengan OpenCV.

Panduan DonkeyCar mengatakan bahwa Anda perlu membuatnya dari sumbernya sendiri, karena untuk ARM tidak ada OpenCV di pip. Saya bahkan melakukan ini, mengkompilasi OpenCV, tetapi sebelum menginstalnya saya memutuskan untuk memeriksa, tiba-tiba sistem memiliki versi lama OpenCV, dan perlu dibongkar. Saya menelepon python, impor cv2, meminta versi, tetapi bam, dan relevan. Cepat mencari dan menemukan bahwa di versi terbaru linux4tegra (yang ada di jetson), orang-orang dari NVIDIA mulai menginstal OpenCV. Keren, aku tidak punya banyak pekerjaan. Bagus, saya bisa mengkompilasi sendiri :)

Selanjutnya, tensorflow-GPU.

Panduan DonkeyCar menunjukkan, pertama, cabang versi yang sudah usang (1.xx), dan kedua, bahkan bukan versi terbaru dari yang sudah ketinggalan zaman. Saya memutuskan untuk tidak mendengarkan mereka, dan meletakkan versi terbaru saat ini (2.0).

Langkah selanjutnya adalah tensorrt.

Panduan untuk menginstal tensrort di jetson ditulis dalam halaman wiki yang terpisah, dan jelas dari itu bahwa penulis tidak membaca panduan utama =) Karena dalam panduan tensorrt, variabel lingkungan ditugaskan ulang, dan OpenCV berhenti berfungsi. Saya memelintirnya dengan cara ini dan itu, mengembalikan semuanya, dan memutuskan untuk memalu variabel lingkungan dan lingkungan - memasukkannya langsung ke lingkungan utama.

Puas dengan dirinya sendiri, ia membuka python, pada gilirannya disebut cv2, tensorflow, tensorrt, dan kemudian meminta python untuk versi mereka - mereka semua diimpor, semuanya menunjukkan versi terbaru. Keren!

Proses pemasangan untuk mobil keledai itu sendiri cukup sederhana, saya tidak akan menjelaskannya, saya sarankan membaca panduan mereka. Satu-satunya hal yang saya perhatikan sekarang adalah bahwa dalam konfigurasi keledai mobil Anda dapat meningkatkan resolusi gambar dari 86x86 untuk RPi menjadi 224x224 untuk Jetson (karena akan ada lebih banyak kinerja dan akurasi akan lebih tinggi).

Jadi, semuanya sudah siap, saatnya untuk berlari dan menguji!

Mesin saya benar-benar menyala, ia memulai server web pada IP itu, ke mana router mengeluarkan mesin. Dan Anda dapat benar-benar pergi ke sana, dan dari browser drive joystick, melihat gambar dari kamera.

Saya juga harus mengkalibrasi nilai-nilai yang disediakan untuk PWM (PCA9685) untuk menemukan putaran penuh ke depan, mundur penuh, maksimum ke samping.

Di sini, omong-omong, saya menemukan bahwa mesin saya terhubung secara tidak benar - mesin kembali jauh lebih bersemangat daripada maju - saya secara eksperimental menemukan kabel, melemparkannya ke arah sebaliknya. Di sana diatur sedemikian rupa sehingga semua kabel dari mesin memiliki warna yang sama, dan Anda tidak dapat mengingat bagaimana itu. Tapi saya menghubungkannya dengan benar, dan menempatkan panas menyusut pada masing-masing kawat, sehingga saya bisa membedakannya nanti.

Keren, saatnya beralih ke menyiapkan trek!

Usia 7 - Lacak perakitan, perjalanan


Algoritma Mobil Keledai dirancang sedemikian rupa sehingga ada neuron yang dilatih oleh seorang guru. Dan ini berarti bahwa gambar dari kamera sedang dilacak, dan file json muncul di sebelah setiap gambar di mana nama gambar, akselerasi, rotasi, stempel waktu ditulis. Dan untuk melatih neuron, gambar seperti + pasangan json membutuhkan setidaknya 5K.

Diputuskan untuk memasang trek di rumah, mereka mengatakan apartemen itu besar, ada tempat untuk berbalik. Tetapi mulai mengumpulkan, menjadi jelas bahwa tidak ada tumpangan di sekitar apartemen - lantainya berbeda warna, kontrasnya akan berbeda, dan modelnya tidak bisa lepas.

Oke, saya memutuskan untuk meletakkannya di satu ruangan. Saya membeli 4 gulungan selotip, dan menempelkannya ke trek di lantai.

Saya memasukkan mobil, menyalakannya, pergi, dan sekali lagi gagal - ternyata satu ruangan terlalu kecil, dan mobil saya klise tidak termasuk dalam belokan. Lebih tepatnya, itu sudah termasuk, tetapi pada kecepatan yang memalukan maka =)

Oke, kita perlu melakukan iterasi kedua, dan kita membutuhkan ruang besar. Pilihan jatuh di kantor - ada banyak tempat, lantainya monofonik, buka 24X7. Satu-satunya masalah adalah bahwa pembersih bekerja di malam hari, dan trek harus dilepas. Artinya, Anda perlu melakukan segalanya dalam sekali jalan - naik dengan tangan Anda untuk menjadi guru, melatih model, melemparkannya kembali ke mesin tik, dan pergi tanpa kendali tangan.

Oke, hari X, setelah acara tentang percobaan A / B, diputuskan untuk tetap di kantor dan membuat jalur.
Tempat dipilih, rekaman sudah siap, tim pembangun trek dalam permainan. Hanya satu jam, dan di koridor kantor ada jalur yang bagus.

Saya memasukkan mobil, menyalakannya, mencoba mengemudi - hore, mobil itu berputar, dan saya harus membatasi kecepatan hanya 80%.



Usia 8 - Bepergian dengan Joystick


Jadi, saya punya trek, saya punya mobil, dan saya butuh gambar 5K pasangan + json.

Secara empiris, saya menemukan bahwa satu putaran trek saya adalah 250 pasang foto + json, yang berarti bahwa saya harus meninggalkan setidaknya 20 putaran.

Lebih disukai berturut-turut. Anda bisa, tentu saja, sebentar-sebentar, tetapi kemudian gas yang dilemparkan terguncang oleh model, dan itu dapat mulai melambat, tetapi saya tidak menginginkan ini.

Saya mulai mencoba mengendarai dalam 20 putaran tanpa istirahat, dan ini, harus saya katakan, bukanlah tugas yang mudah.

Kesulitan pertama muncul karena ada kolom besar dan kuat di tengah rute, dan ketika mesin mengemudi setelahnya, koneksi dengan laptop dari mana ia dikendalikan menjadi tertinggal, dan kelambatan kecil ini membuat saya keluar dari batas rute.

Oke, jadi Anda perlu memastikan bahwa koneksi berasal dari perangkat yang saya gunakan untuk mengetik saat saya mengemudi. Dan ini berarti Anda harus mengemudi dari peramban ponsel.

Tapi masih ada joystick, dan saya pegang dengan kedua tangan, di mana lagi saya bisa mendapatkan telepon? Melakukan mesin tik bukanlah suatu pilihan, itu akan memperlambatnya, dan kemudian, tanpa telepon, ia akan berjalan lebih cepat, dan mungkin bingung di sudut-sudut karena akselerasi yang berlebihan.

Hmm, maka Anda perlu menggabungkan telepon dan joystick. Oke, saya punya pembaca, ini cukup besar, cocok dengan telepon dan joystick - itu akan. Dia mengambil kaset itu, dan menempelkan telepon ke pembaca dengan kaset, dan tepat di bawah joystick. Saya melihat keajaiban ini, dan berpikir - secara umum, siapakah Anda? :-)

Tapi, itu berhasil :) Dengan hal ini saya berhasil meninggalkan 20 lap. Tetapi sebenarnya, bahkan 25, karena saya merasakan di suatu tempat sekitar 15 lingkaran.

Dachshund, siap, saya punya dataset untuk melatih neuron, saatnya melatih!

Usia 9 - Pelatihan Neuron


Saat ini saya punya mobil, trek, dataset - ya, saya selangkah lebih maju dari hasilnya!
Di rumah, PC berputar saat idle, dengan NVIDIA RTX 2070, di mana saya berencana untuk belajar. Untungnya, untuk rumah pintar, saya memiliki IP eksternal, dan saya hanya perlu mendapatkan port 22 dari Internet ke PC. Bagus bahwa ada asisten yang melakukan ini untuk saya ketika saya berada di kantor.

Jadi, saya pergi ssh ke komputer dengan ubuntu, memantau folder rumah untuk sshfs, mengunggah file. Tampaknya hanya 40 megabyte, tetapi itu berlangsung sekitar 30 menit. Itu terjadi, seperti yang saya mengerti, karena ada banyak dari mereka.

File di komputer Anda, tensorflow-gpu terinstal, perangkat lunak DonkeyCar terinstal, saatnya untuk berlatih.
Saya memanggil skrip dari DonkeyCar untuk melatih neuron, saya arahkan ke folder dengan dataset - itu berlari.
Saat neuron sedang berjalan, nvtop (monitor kartu video) menunjukkan utilisasi 1406%, htop reguler menunjukkan 100% cpu load untuk semua 16 core, itu berjalan).

Setelah sekitar 20 menit, saya memiliki model yang terlatih untuk mengendarai mobil. Tampaknya, ambillah, gunakan itu. Tapi tidak :)

Ingat, saya menulis di atas tentang tensorrt, yang mengoptimalkan inferensi neuron dan menjalankannya pada kernel cuda? Tentu saja, saya ingin menjalankannya.

Dan itu berarti apa yang saya butuhkan:

  • membekukan model (Anda harus mengemas semuanya untuk model dalam satu file)
  • mengkonversi hasil dekorasi ke format tensorrt

Saya mencoba untuk membekukan model, saya memanggil skrip dari DonkeyCar, kegagalan. Dan sementara itu, sampai malam, segera petugas kebersihan membongkar jejak saya, saya perlu cepat.

Hipotesa lahir bahwa ini adalah karena saya mengambil tensorflow yang salah yang dimiliki DonkeyCar. Oke, saya menarik tensorflow 2.0, saya menetapkan 1,15, saya coba lagi - sukses, tepuk tangan!

Sekarang konversi, dan lagi kerusakan - tim tidak ditemukan. Oke, saya akan mencari ada apa. Ternyata NVIDIA menandai fitur ini sebagai usang, dan merobek dukungan. Sekarang, kata mereka, Anda perlu mengkonversi dengan tangan. Untungnya, saya menemukan repo git, di mana ada permintaan serupa, dan pengguna menemukan tempat di mana skrip python sebenarnya terletak, yang mengubah model.

Saya memanggil naskah dari tempat itu, dan kebenaran merespons. Tapi, katanya, tidak ada ular sanca ketiga bagimu, ayo yang kedua.

Oke, saya memanggil python kedua. Dia mengatakan kepada saya - saya tidak punya tensorflow. Yah, saya memintanya untuk meletakkan tensorflow-gpu 1,15, dan dia mengatakan kepada saya bahwa tidak ada versi seperti itu, hanya ada 1,14. Oke, saya setuju, mari ambil kesempatan, dan letakkan versi yang berbeda di lingkungan python yang berbeda. Letakkan tensorflow di python kedua, yang dipanggil untuk konversi - tepuk tangan, itu berhasil!

Oke, saya punya model untuk tensorrt dan untuk tensorflow-GPU biasa, saya masukkan ke mesin.

Saya memulai mesin dengan model untuk tensorrt, trackback kesalahan besar, waktu menekan - ok, saya akan mencoba model yang biasa.

Saya memulai kesalahan yang biasa lagi, tapi kali ini cukup jelas - ukuran gambar Anda 224X224, sementara 86X86 diharapkan. Ingat, di suatu tempat yang jauh lebih tinggi saya menulis bahwa aturan konfigurasi, mengubah resolusi gambar dari kamera?

Jadi, pada mesin tik saya dikoreksi, tetapi tidak pada komputer host.

Saya kembali ke komputer host, perbaiki konfigurasi di sana, latih kembali, lakukan ulang dekorasi, konversi ulang, lemparkan kembali.



Saya memulai mesin dengan model untuk tensorrt, dan ...

Usia 10 - Semuanya berhasil, akhirnya!


Hore! Mobil saya pergi! Sendiri, tanpa aku. Sangat keren. Saya sangat senang)


Selama hampir setahun saya melakukan semua ini, dan sekarang)

Apa berikutnya?


Ada sejumlah rencana untuk pengembangan lebih lanjut, saya akan beralih dari yang sederhana menjadi kompleks.

  • Tambahkan sensor IMU ke model untuk meningkatkan akurasi. Misalnya, saat berkendara menanjak, lebih banyak upaya diperlukan pada mesin.
  • Menerjemahkan logika ke perjalanan bukan di jalan raya, tetapi hanya berkeliling kendala
  • Tambahkan LIDAR dan ambil bacaan darinya

Tantangan pertempuran


Jika Anda sendiri, atau bersama teman-teman, merasa ingin balapan, maka tulislah untuk saya, mari kita atur kompetisi =)

Masyarakat


Saya juga mengumpulkan ruang obrolan yang menarik dan saya sedang menyiapkan saluran. Saya tidak yakin bahwa menurut aturan Habr adalah mungkin demikian, jadi saya akan mengirim ke PM berdasarkan permintaan.

Gambar kartu sd mesin tik saya


Atas permintaan, juga, saya akan mengirimkan gambar img mobil saya kepada Anda, jika Anda ingin melakukannya atas dasar yang sama, dan tidak ingin mandi dengan pengaturan.

All Articles