Bagaimana kami melakukan autopilot untuk stasiun layanan

Halo, Habr! Saya bekerja di sebuah startup kecil di Berlin yang mengembangkan autopilots untuk mobil. Kami sedang menyelesaikan proyek untuk stasiun layanan dari produsen mobil besar Jerman dan saya ingin membicarakannya: bagaimana kami melakukannya, kesulitan apa yang kami temui dan hal-hal baru apa yang kami temukan. Pada bagian ini saya akan berbicara tentang modul persepsi dan sedikit tentang arsitektur solusi secara keseluruhan. Tentang sisa modul, mungkin, kita akan memberi tahu di bagian berikut. Saya akan sangat senang menerima umpan balik dan pandangan dari luar tentang pendekatan kami.

Siaran pers proyek dari pelanggan dapat ditemukan di sini .

Untuk memulainya, saya akan memberi tahu Anda mengapa pembuat mobil menoleh kepada kami, dan tidak melakukan proyek sendiri. Sulit bagi keprihatinan besar Jerman untuk mengubah proses, dan format pengembangan mobil jarang cocok untuk perangkat lunak - iterasi panjang dan membutuhkan perencanaan yang baik. Menurut saya, para pembuat mobil Jerman memahami hal ini, dan karena itu Anda dapat bertemu dengan startup yang didirikan oleh mereka, tetapi bekerja sebagai perusahaan independen (misalnya, AID dari Audi dan Zenuity dari Volvo). Pembuat mobil lainnya menyelenggarakan acara seperti Startup Autobahn, di mana mereka mencari kontraktor potensial untuk tugas dan ide baru. Mereka dapat memesan produk atau prototipe dan setelah waktu yang singkat mendapatkan hasil yang selesai. Ini mungkin ternyata lebih cepat daripada mencoba melakukan hal yang sama sendiri, dan biayanya tidak lebih dari pengembangan sendiri dalam hal biaya. Kompleksitas perubahan proses ditunjukkan dengan baik oleh jumlah izin yang diperlukan untuk mulai menguji mobil dengan autopilot di pelanggan: persetujuan untuk merekam video orang (bahkan jika kami tidak menyimpan data, dan kami menggunakan streaming video hanya dalam bentuk anonim tanpa mengidentifikasi orang tertentu), persetujuan untuk merekam video wilayah, persetujuan serikat pekerja dan konsul pekerja untuk menguji teknologi ini, persetujuan dari layanan keamanan, persetujuan dari layanan TI - ini bukan daftar keseluruhan.

Tantangan


Dalam proyek saat ini, pelanggan ingin memahami apakah mungkin untuk mengendarai mobil di pusat layanan menggunakan "AI". Skrip pengguna adalah:

  1. Teknisi ingin mulai bekerja dengan mesin yang ada di suatu tempat di tempat parkir di luar area pengujian.
  2. Dia memilih mobil di tablet, memilih kotak layanan dan mengklik "Drive in".
  3. Mobil itu melaju ke dalam dan berhenti di titik akhir (lift, ramp, atau yang lainnya).
  4. Ketika teknisi selesai bekerja pada mobil, ia menekan tombol pada tablet, mobil keluar dan memarkir di ruang kosong di luar.

Fitur: tidak semua mobil memiliki kamera. Pada mesin-mesin di mana mereka berada, kami tidak memiliki akses ke mereka. Satu-satunya data pada mesin yang kami akses adalah sonars dan odometry

Sonar dan odometri
Sonars adalah sensor jarak yang dipasang dalam lingkaran di mobil dan sering terlihat seperti titik bulat, mereka memungkinkan Anda untuk memperkirakan jarak ke objek, tetapi hanya menutup dan dengan akurasi rendah. Odometry - data tentang kecepatan aktual dan arah mobil. Mengetahui data ini dan posisi awal, Anda dapat menentukan posisi mesin saat ini dengan cukup akurat.

Dengan demikian, mobil harus dikontrol oleh sensor eksternal yang dipasang di area servis.

Solusi


Arsitektur produk akhir adalah sebagai berikut:

  • Di area layanan kami memasang kamera eksternal, kapten dan hal-hal lain (halo Tesla).
  • Data dari kamera pergi ke Jetson TX2 (masing-masing tiga kamera), yang terlibat dalam tugas menemukan mesin dan pra-pemrosesan gambar dari kamera.
  • Selanjutnya, data kamera datang ke server pusat, yang dengan bangga disebut Menara Kontrol dan di mana mereka jatuh ke dalam modul persepsi, pelacakan dan perencanaan jalur. Sebagai hasil dari analisis, keputusan dibuat tentang arah pergerakan lebih lanjut dari mobil dan dikirim ke mobil.
  • Pada tahap proyek ini, Jetson TX2 lain dimasukkan ke dalam mobil, yang, menggunakan driver kami, terhubung ke Vector, yang mendekripsi data mobil dan mengirimkan perintah. TX2 menerima perintah kontrol dari server pusat dan menyiarkannya ke mobil.

Untuk tingkat infrastruktur, ROS digunakan.

Inilah yang terjadi setelah seorang teknisi memilih mobil dan mengklik "drive in":

  1. Sistem mencari mobil: kami mengirim perintah ke mobil untuk mengedipkan alarm, setelah itu kami dapat menentukan mobil mana di tempat parkir yang dipilih oleh teknisi. Pada tahap awal pengembangan, kami juga mempertimbangkan opsi untuk menentukan mesin berdasarkan plat nomor, tetapi di beberapa area mobil yang diparkir, jumlahnya mungkin tidak terlihat. Selain itu, jika kami membuat penentuan mobil dengan nomor registrasi, maka resolusi foto harus sangat ditingkatkan, yang akan berdampak negatif pada produktivitas, dan kami menggunakan gambar yang sama untuk mencari dan mengemudi. Tahap ini terjadi sekali dan diulang hanya jika karena alasan tertentu kami kehilangan mobil dalam pelacakan.
  2. Segera setelah mobil ditemukan, kami menjatuhkan gambar dari kamera yang terkena mobil ke dalam modul persepsi, yang membagi ruang dan memberikan koordinat semua objek, orientasi dan ukurannya. Proses ini sedang berlangsung, berjalan pada sekitar 30 frame per detik. Proses selanjutnya juga konstan dan berjalan sampai mesin tiba di titik akhir.
  3. Modul pelacakan menerima input dari persepsi, sonar, dan odometri, menyimpan semua objek yang ditemukan dalam memori, menggabungkannya, menyaring lokasi, memprediksi posisi dan kecepatan objek.
  4. Selanjutnya, perencana jalur, yang dibagi menjadi dua bagian: perencana jalur global untuk rute global dan perencana jalur lokal untuk lokal (bertanggung jawab untuk menghindari rintangan), membangun jalur dan memutuskan ke mana harus pergi ke mobil kami, mengirimkan perintah.
  5. Jetson mengambil perintah dengan mobil dan menyiarkannya ke mobil.

Keberangkatan berlangsung dengan cara yang sama dengan kedatangan.

Persepsi


Salah satu yang utama dan, menurut saya, modul yang paling menarik adalah persepsi. Modul ini menjelaskan data dari sensor sedemikian rupa sehingga Anda dapat secara akurat membuat keputusan tentang gerakan. Dalam proyek kami, ini memberikan koordinat, orientasi, dan ukuran semua objek yang jatuh pada kamera. Ketika merancang modul ini, kami memutuskan untuk memulai dengan algoritma yang memungkinkan kami untuk menganalisis gambar dalam satu pass. Kami mencoba:

  1. VAE yang terurai . Modifikasi kecil yang dibuat untuk β-VAE memungkinkan kami untuk melatih jaringan sehingga vektor laten menyimpan informasi gambar dalam tampilan top-down skematis.
  2. GAN Bersyarat (implementasi paling terkenal adalah pix2pix ). Jaringan ini dapat digunakan untuk membangun peta. Kami juga menggunakannya untuk membangun tampilan skematis dari atas, memasukkan data dari satu atau semua kamera ke dalamnya secara bersamaan dan menunggu tampilan skematis dari atas pada output.

Salah satu iterasi GAN Bersyarat untuk satu kamera, dari kiri ke kanan: input gambar, prediksi jaringan, hasil yang diharapkan



Bahkan, ide dari pendekatan ini adalah untuk memastikan bahwa jaringan akhir dapat memahami lokasi dan orientasi semua mobil dan objek bergerak lainnya yang telah jatuh pada kamera dengan melihat foto input sekali. Data pada objek dalam hal ini akan disimpan dalam vektor laten. Pelatihan jaringan berlangsung pada data dari simulator, yang merupakan salinan tepat dari titik di mana demonstrasi akan berlangsung. Dan kami berhasil mencapai hasil tertentu, tetapi kami memutuskan untuk tidak menggunakan metode ini karena beberapa alasan:

  • Dalam waktu yang ditentukan, kami tidak dapat mempelajari cara menggunakan data dari vektor laten untuk menggambarkan gambar. Hasil dari jaringan selalu berupa gambar - tampilan teratas dengan tata letak obyek yang skematis. Ini kurang akurat dan kami khawatir akurasi seperti itu tidak akan cukup untuk mengendarai mobil.
  • Solusinya tidak dapat diskalakan: untuk semua instalasi berikutnya dan untuk kasus ketika Anda perlu mengubah arah beberapa kamera, diperlukan konfigurasi ulang simulator dan pelatihan penuh berulang.

Namun demikian, kami tertarik untuk memahami kemungkinan pendekatan ini, dan kami akan mengingatnya untuk tugas di masa depan.

Setelah itu, kami mendekati tugas di sisi lain, melalui pencarian reguler untuk objek + jaringan untuk menentukan posisi spasial dari objek yang ditemukan (misalnya, ini atau itu ). Menurut kami, opsi ini yang paling akurat. Satu-satunya minus adalah bahwa itu lebih lambat dari pendekatan yang diusulkan sebelumnya, tetapi cocok dengan kerangka kerja penundaan kami, karena kecepatan mobil di area layanan tidak lebih dari 5 km / jam. Karya paling menarik di bidang prediksi posisi 3D objek bagi kami adalah yang ini , yang menunjukkan hasil yang cukup bagus pada KITTI . Kami membangun jaringan yang sama dengan beberapa perubahan dan menulis algoritma kami sendiri untuk menentukan kotak di sekitarnya, dan lebih tepatnya, algoritma untuk memperkirakan koordinat pusat proyeksi objek ke tanah - untuk membuat keputusan tentang arah gerakan, kami tidak memerlukan data tentang ketinggian objek. Gambar objek dan jenisnya (mobil, pejalan kaki, ..) dimasukkan ke input jaringan, dan dimensi serta orientasi spasialnya adalah keluaran. Selanjutnya, modul mengevaluasi pusat proyeksi dan memberikan data untuk semua objek: koordinat tengah, orientasi dan dimensi (lebar dan panjang).

Pada produk akhir, setiap gambar dijalankan pertama kali melalui jaringan untuk mencari objek, kemudian semua objek dikirim ke jaringan 3D untuk memprediksi orientasi dan ukuran, setelah itu kami mengevaluasi pusat proyeksi masing-masing dan mengirimkannya serta orientasi dan ukuran data lebih lanjut. Fitur dari metode ini adalah sangat terikat dengan keakuratan batas kotak batas dari jaringan pencarian objek. Karena alasan ini, jaringan seperti YOLO tidak cocok untuk kami. Kami menemukan keseimbangan optimal antara kinerja dan akurasi kotak batas pada jaringan RetinaNet.

Perlu dicatat satu hal yang kita beruntungi dalam proyek ini: tanahnya rata. Ya, itu tidak datar seperti komunitas terkenal, tetapi tidak ada tikungan di wilayah kami. Ini memungkinkan penggunaan kamera bermata tetap untuk memproyeksikan objek ke koordinat bidang bumi tanpa informasi tentang jarak ke objek. Rencana masa depan meliputi pengenalan prediksi kedalaman monokuler. Ada banyak karya tentang topik ini, misalnya, salah satu yang terakhir dan sangat menarik yang kami coba untuk proyek masa depan. Prediksi kedalaman akan memungkinkan Anda untuk bekerja tidak hanya di tanah datar, tetapi juga berpotensi meningkatkan akurasi penentuan hambatan, menyederhanakan proses mengonfigurasi kamera baru dan menghilangkan kebutuhan untuk memberi label pada setiap objek - kami tidak peduli objek apa itu jika itu merupakan semacam hambatan.

Itu saja, terima kasih sudah membaca, dan saya akan dengan senang hati menjawab pertanyaan. Sebagai bonus, saya ingin berbicara tentang efek negatif yang tidak terduga: autopilot tidak peduli dengan orientasi mobil, baginya tidak masalah bagaimana harus maju atau mundur. Hal utama adalah mengemudi secara optimal dan tidak menabrak siapa pun. Oleh karena itu, ada kemungkinan besar bahwa mobil akan melakukan perjalanan secara terbalik, terutama di daerah kecil di mana kemampuan manuver yang tinggi diperlukan. Namun, orang terbiasa dengan kenyataan bahwa mobil sebagian besar bergerak maju, dan sering mengharapkan perilaku yang sama dari autopilot. Jika seorang pebisnis melihat mobil yang, alih-alih mengendarai di depan, mengendarai mundur, maka ia dapat mempertimbangkan bahwa produk tersebut tidak siap dan mengandung kesalahan.

PS Saya minta maaf bahwa tidak ada gambar dan video dengan pengujian nyata, tetapi saya tidak dapat mempublikasikannya karena alasan hukum.

Source: https://habr.com/ru/post/id457500/


All Articles