Kamera visi mesin untuk penggemar. Bagaimana cara menggunakan kamera untuk navigasi offline?

Kami membuat kamera untuk mendeteksi AprilTag dan ArTag dengan mROS. Terhubung melalui Uart atau Ethernet.



Kami mencoba JeVois dan OpenMV, menghargai pro dan kontra, dan memasang kamera kami.



Cari tag visual dan orientasi robot berdasarkan data. Kami sedang mengembangkan robot untuk mengumpulkan bola golf di driving range . Sekarang di dunia hanya satu perusahaan yang menjual robot untuk menyelesaikan masalah ini. Pasarnya sangat menjanjikan, ini mendorong kami untuk mengubah proyek dari DIY menjadi startup teknologi.

Menggunakan GPS tanpa RTK untuk menavigasi robot, sulit untuk mencapai akurasi yang dibutuhkan untuk mencari pangkalan dan parkir dengan benar. Menggunakan Kinematik Waktu Nyata, saya akan mengalami masalah saat mendekati bangunan. Kami mencoba berbagai opsi dan memutuskan untuk membuat kamera kami sendiri untuk mencari tanda visual di pintu masuk pangkalan.

Bagian dari pengembangan robot adalah parkirnya di stasiun docking untuk membongkar kompartemen bola dan mengisi baterai. Kami sudah lama berpikir tentang cara memarkirnya, setuju bahwa robot akan menemukan objek cerah optik dan mengikutinya.

Tag AprilTag atau ArTag dipilih sebagai target, tergantung pada bagaimana mereka menunjukkan diri mereka di lapangan. Karena kami tidak menderita sindrom NIH - pencarian kamera penglihatan mesin dengan dukungan untuk penanda ini dan dengan dukungan skrip tepat di kamera telah dimulai.

JeVois pertama


Dari apa yang dengan cepat ditemukan - JeVois , dikembangkan oleh lab University of Southern California. Sayangnya, saya harus memesan ke Rusia melalui Amazon, tidak ada reseller internal dan tampaknya tidak akan ada - tampaknya pemasaran dan penjualan dilakukan oleh pengembang sendiri (kami cukup terkejut ketika kami harus beralih dari Jevois ke Jevois inc untuk membeli kamera , dan kemudian mencari tautan ke direktori - pilih kamera di suatu tempat di tengah posisi 10-12).



Berjalan pertama di komputer cukup menggembirakan, secara umum, semuanya bekerja langsung dan terlihat cukup menarik. Namun, setelah tes dengan menghubungkan ke papan kontrol, empat masalah serius menjadi jelas:

60-90 FPS yang ditunjukkan dalam materi iklan diberikan untuk resolusi 160x120 atau 320x240, yang sama sekali tidak cocok untuk parkir - tangkapan masih diinginkan dari jarak minimal 5 meter. Dan agar persegi jatuh ke butir 160x120 dari 6-8 meter - Anda harus membuatnya setidaknya setengah meter dan ketika mendekat, pertama-tama benar-benar menutup bingkai, dan kemudian berhenti mendeteksi sama sekali.

Konsumsi 800mA, sementara daya hanya melalui kabel USB dengan mini USB, yang dapat menahan arus ini tanpa banyak drop tegangan. Ternyata sangat sulit menemukan kabel dengan panjang setidaknya setengah meter dengan fitur-fitur seperti itu - sekitar 15 opsi dipilih, dan hasilnya toh tidak terlalu memuaskan.

Kamera buta pada malam hari atau berkedip di siang hari. Keseimbangan otomatis bekerja melampaui kebaikan dan kejahatan.

Kamera didinginkan oleh kipas. Kipasnya sangat kecil, kecepatannya tinggi - noise frekuensi tinggi atau hanya deritan.

Robot melengking adalah hal terakhir yang ingin kami lakukan.

Menulis kode eksekusi di dalam kamera adalah hiburan terpisah - menginstal lingkungan adalah hal yang agak membingungkan, dan merakit dan mengunggah ke kartu SD memerlukan waktu setidaknya 2-5 menit. Ya, tidak ada flash - semuanya ada di kartu SD.

Kesimpulan: kamera untuk bermain dengan penggemar di dalam ruangan dan dengan pencahayaan yang baik. Pada saat yang sama, akan lebih baik jika para peminatnya adalah siswa - antarmuka, dokumentasi, dan metode bekerja dengan kamera dengan jelas mengingatkan saya pada pekerjaan laboratorium siswa, di mana hampir tidak ada perhatian diberikan pada kenyamanan bekerja dengan sistem dan kelebihan lainnya. Ini tentang modul C ++, tentu saja. Skrip python dapat diedit melalui Jevois Inventor, tetapi FPS juga jauh lebih rendah. Di luar tempat, kamera bahkan tidak selamat dari dua hujan, dan kipas menyumbat tanah di lapangan dengan kecepatan ruang.

Hasilnya - tidak cocok untuk digunakan pada robot, tetapi kemungkinan mendasar dari parkir telah terbukti.

OpenMV 3 dan semua variannya




Pada saat pencarian pertama, itu tidak tersedia - ada kampanye di Kickstarter .

Setelah kami bermain cukup dengan JeVois dan 100 dolar dibuang ke tempat sampah - seorang penjual dengan stok ditemukan dan 2 buah dibeli.

Secara umum, tayangannya sangat menyenangkan - antarmuka yang sangat dipikirkan dalam OpenMV IDE, kompilasi python transparan, lebih nyaman untuk menonton algoritma bekerja, dan men-debug-nya. Namun, ada masalah di sini:

  • Resolusi dapat berupa apa saja, tetapi AprilTag hanya dapat dicari di area yang tidak lebih dari 200x200 piksel. Kami kembali ke masalah gandum, dll. Pengembang merekomendasikan pertama menarik gumpalan, kemudian melihat kode di dalamnya. Tetapi pada sesuatu selain latar belakang polos (idealnya dinding putih) ini tidak berfungsi, rumput hijau dan matahari cerah dengan latar belakang mengubah segalanya menjadi bubur. Plus FPS turun hingga maksimal 5.
  • Sensor Omnivision murah + optik murah = gambar sabun. Secara visual, ini tidak terlalu terlihat saat melihat streaming video, tetapi ketika melihat masing-masing frame itu terlihat jelas.
  • Tidak ada tirai IR, tetapi ada pencahayaan IR. [WHAAAAT?]
  • Tidak ada perlindungan dari lingkungan eksternal. Tidak semuanya.



Script itu debug pada kamera ini, beberapa lusin parkir dibuat. Namun, setelah robot bergulir dari Moskow ke St. Petersburg dan kembali, kamera berhenti mulai - regulator daya pingsan. Tindakan yang jelas adalah pengemasan dan stabilisasi daya. Dan di sini hal yang paling menarik ditemukan - kasus dengan IP yang tepat untuk kamera ini tidak dapat ditemukan, atau kotak dengan penutup transparan, tanpa pemasangan internal dan input / output kabel yang ketat. Sebagai hasil dari pencarian, banyak kamera pengintai China murah dengan kasus yang tepat ditemukan. Kamera dibeli dan dimusnahkan, salinan kedua OpenMV menggantikan board, semuanya bekerja.
Tapi malam dan malam menjadi rintangan yang hampir tidak dapat diatasi - tidak ada tirai IR.

Hasil: kamera SANGAT nyaman untuk prototyping, sumber daya terbatas, tidak ada perlindungan dari lingkungan eksternal sama sekali (kamera kedua kemudian pergi ke freezer industri dan tidak bertahan -30). Tidak bagus

Dan kemudian menjadi sangat menarik bagi kami papan macam apa yang kami dapatkan dari kamera Cina

Klon HiSilicon


Pada pemeriksaan lebih dekat, ternyata papan memiliki ARM 2-core, prosesor DSP, tirai IR, pencahayaan IR, sensor yang layak dari Sony, papan ditutupi dengan senyawa pelindung + perumahan untuk jalan. Apa yang Anda butuhkan - tetap mengumpulkan perangkat lunak.

Di dalam ternyata klon Linux yang cukup berfungsi dari HiSilicon + u-boot.
Saya harus mengunduh SDK dari sumber daya Tiongkok dan berurusan dengan majelis. Pada prinsipnya, tidak ada hal buruk yang ditemukan di sepanjang jalan, kecuali bahwa itu perlu untuk memperbaiki beberapa file di dalam SDK - distribusi Linux di mana SDK akan menjadi sangat tua, dan beberapa file header telah berubah sejak saat itu. Yah, saya harus mengganti shell dari zsh ke bash. Saya akan mengabaikan detailnya; demi kebaikan, artikel ini harus terpisah.

Sumber daya ini membantu:

Parsing, menghubungkan ke kamera

Contoh diagram perakitan perangkat lunak

Kemudian semuanya berjalan sesuai dengan skema yang terkenal:



Sebagian besar waktu yang dibutuhkan untuk mendapatkan gambar dari sensor, saya menulis sisanya hanya dalam 4 jam, hanya dengan porting algoritma debugged dari Python ke C ++.
Bekerja dengan sensor membutuhkan waktu sekitar satu setengah minggu. Tentu saja tidak ada / dev / video0 di perangkat ini, hampir perangkat keras telanjang dengan kerja langsung dengan memori dan port.
Kita harus segera mengatakan bahwa sampel dari SDK berfungsi tanpa modifikasi hanya pada papan debug untuk SDK ini, jika tidak maka diperlukan banyak pengeditan kecil. Lucu seperti kelihatannya, masalah utama adalah untuk menentukan sensor mana yang ada di kamera, karena Cina menulis satu dalam deskripsi, yang lain ditandai di papan tulis, model ketiga diinisialisasi dalam perangkat lunak. Sebagai contoh, kamera memiliki sensor IMX323 dalam deskripsi, papan ditandai SC2235, ketika diluncurkan dalam skrip init, dimulai dengan AR130, dan perangkat lunak kamera menginisialisasi sebagai SC2235P.

Alasan untuk semua ini cukup sederhana: untuk pengguna akhir, bahwa IMX323, bahwa SC2235 semuanya sama, gambarnya sangat mirip. Kernel dan rootfs dengan skrip int dikumpulkan dari SDK dengan perubahan minimal dan tidak repot dengan skrip inisialisasi terpisah untuk masing-masing model - hanya parameter peluncuran yang benar, dan nama dibiarkan apa adanya. Dalam perangkat lunak untuk bekerja dengan kamera, bagian kedua menginisialisasi DSP dengan sensor sudah diluncurkan dan model kamera yang tepat sudah kritis di sana - oleh karena itu, log sudah memiliki model yang tepat - SC2235P. P - ini penting, ini merupakan sensor yang berbeda dalam hal karakteristik, yang bahkan bekerja pada frekuensi bus yang sedikit berbeda dan resolusi yang berbeda dibandingkan dengan SC2235.

Bagian kedua dari pencarian adalah lembar data pada sensor, yang pada umumnya tidak. Oleh karena itu, saya harus membangun kembali modul hi_i2c dengan mencetak ke log melalui printk dan menggantinya di tempat sampah yang dihapus dari kamera, menulis peredam konfigurasi DSP dari prosesor video dan menghapus konfigurasi dari kamera yang berfungsi, ditambah beberapa kali untuk melihat driver dari proyek DafangSoftware. Secara terperinci, ini menarik 3-4 artikel terpisah, yang ingin saya tulis setelah NG.

Pada akhirnya, semuanya ternyata lebih baik dari yang diharapkan - pekerjaan yang percaya diri untuk menangkap AprilTag dari 6 meter bahkan dalam kegelapan yang hampir sempurna, 25-12 fps, pengontrol kontrol parkir PID, dll.
Hasilnya - ini yang paling untuk bekerja di lapangan, banyak hal telah dipertimbangkan untuk melindungi dari kondisi eksternal. Satu-satunya hal yang tidak dapat diverifikasi sepenuhnya adalah pekerjaan di bawah sinar matahari yang cerah, cuaca sejak Oktober telah memburuk.

Gagasan untuk pengembangan


Dan di sini kami memiliki sebuah ide - kami memiliki analog OpenMV dengan fitur-fitur perangkat keras yang jauh lebih baik dan produksi massal. Tetap membawa pekerjaan dengan kamera ke level OpenMV, ke micropython di sana, membuat IDE yang nyaman dan memeriksa ulang bagaimana skrip saat ini dari OpenMV akan bekerja. Selain itu, mRos sepenuhnya porting di sana, dan ini segera memperluas penggunaan kamera tersebut untuk sistem ROS.

Sebagai hasilnya, kami berencana untuk mengirimkan analog OpenMV pada bulan Maret dan mROS pada bulan Mei.

Untuk mengurangi harga penyesuaian kamera, kami siap menawarkannya kepada Anda. Isi formulir dan kami akan menghubungi Anda ketika kami siap memesan batch pertama.

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


All Articles