Tidak ada waktu untuk menjelaskan, lakukan autopilot

gambar



Halo kawan!



Selama akhir pekan, hackasborkaton diadakan - perlombaan model mobil self-driving berdasarkan donkeycar kit dengan bantuan X5 , FLESS , dan komunitas penggemar self-driving .



Tugasnya adalah sebagai berikut: pertama-tama perlu merakit mobil dari suku cadang, lalu melatihnya untuk melewati lintasan. Pemenang ditentukan dengan penyelesaian tercepat 3 lap. Untuk memukul kerucut - diskualifikasi.



Meskipun tugas pembelajaran mesin seperti itu bukanlah hal baru, tetapi kesulitan dapat menunggu jauh: dari ketidakmampuan untuk membuat wifi berfungsi secara normal hingga keengganan model terlatih untuk mengemudikan perangkat keras di sepanjang jalur. Dan semua ini dalam kerangka waktu yang ketat!



Ketika kami mengikuti kompetisi ini, langsung terlihat jelas bahwa akan sangat menyenangkan dan sangat sulit, karena kami hanya diberi waktu 5 jam, termasuk istirahat makan siang, untuk merakit mesin ketik, merekam dataset dan melatih model.



Mesin keledai



Donkeycar terdiri dari casing di mana kamera dengan lensa sudut lebar (170 derajat) dipasang, Raspberry Pi3 +, papan kontrol servo, perangkat lunak, dan pada dasarnya semuanya. Tetapi ternyata nanti, perakitan perangkat yang sederhana sekalipun dalam waktu terbatas dan gangguan peralatan acak mungkin memakan waktu lama, dan Anda tidak akan punya waktu.



gambar



Majelis



Persaingan dimulai dengan fakta bahwa pertama-tama mesin perlu dibongkar dan dirakit lagi. Kami harus memberikan penghormatan kepada penyelenggara, kami tidak ditawari untuk mengumpulkan sekumpulan bagian yang tidak dapat dipahami dari awal, tetapi diberi kesempatan untuk memahami perangkat menggunakan contoh yang sudah jadi. Kami menghemat banyak waktu dengan mengambil gambar dari semua koneksi, dan mengembalikan mesin dalam 10 menit.



gambar



gambar



gambar



gambar



Menghubungkan ke mesin tik dan memeriksa pekerjaan



Setelah kami merakit mobil, ada jeda, karena kami harus menghubungkan mobil ke Wi-Fi dan mulai mengkalibrasi sasis. Ternyata, bekerja dengan Wi-Fi di masa depan akan menjadi salah satu masalah terbesar saat bekerja dengan Raspberry, ternyata Anda harus mengambil Wi-Fi Anda dengan antena.



Kami memutuskan untuk tidak bosan dan terhubung melalui kabel Ethernet, yang, bersama dengan sampah saya lainnya, selalu ada di ransel saya. Untuk beberapa alasan, mesin ketik tidak memiliki server DHCP, atau tidak berfungsi, atau seharusnya tidak ada sama sekali, dan kami menyadari bahwa wireshark akan dengan mudah mendapatkan ip sumber melalui siaran ketika kabel terhubung ke Raspberry. Dan begitulah yang terjadi, tetapi setelah masuk ke mesin, kami menghabiskan cukup banyak waktu mencoba membuat wifi berfungsi. Pada akhirnya, semua peserta dilempar dari file khusus tempat konfigurasi tersebut berada.



Mengkalibrasi sasis dan menghubungkan joystick



gambar



Kami membutuhkan waktu sekitar 35 menit untuk menghubungkan joystick, sementara kami membaca dok dan memindai bluetooth, mencoba memasangkan mesin tik dan joystick. Ternyata masalahnya adalah terlalu banyak joystick di dalam ruangan dan secara acak dipasangkan dengan mobil sesama balap - sangat menyenangkan mengetahui bahwa Anda mengendalikan sasis mobil acak =)



Langkah selanjutnya adalah mengkalibrasi kemudi dan throttle, yaitu PWM putar dan gas.

Ini adalah salah satu parameter terpenting, yang diperlukan untuk membuat nilai berkorelasi dengan kecepatan mobil dan model mengatasi dengan kontrol.



gambar



Dengan intuisi kami, kami mencoba melakukan akselerasi dan belokan agar mobil melaju cukup cepat, tetapi pada saat yang sama dapat dikendalikan.





Hanya ada sekitar 2 jam tersisa hingga akhir acara, dengan mempertimbangkan kinerja tim, dan itu perlu dilakukan segera. Kami berlari untuk menuliskan data dengan pemikiran bahwa itu perlu untuk menciptakan kondisi yang paling bervariasi di mana mesin akan tetap berada. Kami berasumsi bahwa saat kompetisi dimulai, lampu kemungkinan besar akan diatur ulang, benda asing akan muncul di dekat trek, dll.



Kami merekam sekitar 18 ribu gambar bersama dengan nilai throttle and turn, mencoba untuk membuat banyak orang masuk ke dalam bingkai, kami berlari mengelilingi trek, melompati, meletakkan kursi, membuat jembatan, menempatkan lampu secara acak, pergi ke arah yang berlawanan.



Kami juga menambahkan albumentasi sebagai augmentasi dan mencoba menambahkannya sebanyak mungkin!



Di pertigaan iniSaya melakukan hardcode augmentasi berat dengan hard-code dengan amplop dari pil dan sebaliknya - itu juga membutuhkan pembangunan kembali lingkungan untuk mesin tik, yang mempengaruhi waktu.



Pada saat model pertama dilatih, kami sudah memiliki kode untuk model kedua, orang-orang membawa data baru dari trek tetangga dan berlari untuk memeriksa bagaimana model pertama akan berjalan.



Model pertama melaju 3 lap dengan kesalahan dan lepas landas 4 lap. Setelah itu, kami kehilangan 20 menit lagi, karena kami lupa memasukkan kartu SD ke dalam mesin.



Model terakhir dilatih pada 19 ribu gambar dengan augmentasi kustom dan pembersihan data.



gambar



Beginilah jaringan itu sendiri terlihat:



gambar



Dapat dilihat bahwa ada bidang untuk pembalikan, Anda setidaknya dapat memotong batchnorm sebagai permulaan, tetapi kami memutuskan untuk menyentuhnya setidaknya, sehingga kekacauan tidak akan terjadi.



Selanjutnya, grafik model pertama dan kedua dengan kerugian MSE terbaik masing-masing 0,093 dan 0,086.



gambar



gambar



Grafik kedua tampaknya terlihat lebih baik!



Jelas dari video bahwa kami telah mengkalibrasi kemudi dengan buruk dan kurang membersihkan kumpulan data, tetapi itu sudah cukup bagi kami.





Video dari GoPro, yang kami rekam setelah peluncuran utama:





Akhir



Kami yang pertama memulai balapan dan pergi ke trek, tetapi kegagalan menunggu kami di sana, Wi-Fi terus-menerus turun, kami hampir tersingkir dari kompetisi. Dan sekarang, ketika permulaan hampir diberikan, mesin tiba-tiba mulai kembali. Rupanya, saya bingung saat mengkalibrasi throttle.



Tapi tidak ada, yang membuat semua penonton tertawa, dia maju dan menjaga lingkaran bermartabat 8 ​​atau 9 di trek, memutar dengan kuat, tetapi tetap memberi kami kemenangan yang memang pantas!





Saya mencoba untuk tidak melihat ke dalam bingkai.



gambar



gambar



Ucapan Terima Kasih



Berkat komunitas ods.ai , tidak mungkin berkembang tanpanya! Terima kasih banyak kepada rekan satu tim saya: Valea Biryukova, Egor Urvanov (Urvanov), Roma Derbanosov (Yandex). Kami menantikan review video dari Viktor Rogulenko (FLESS).



PS: Terima kasih khusus kepada Valya Biryukova, yang, sayangnya, memiliki suhu 38,5 sehari sebelum kompetisi, tetapi banyak membantu dengan tautannya .



Aurorai, llc



All Articles