Menggunakan mata Ikan pada Raspberry Pi 3 dengan ROS - Bagian 2

Selamat siang, para pembaca Habr! Ini adalah bagian kedua dari cerita tentang menggunakan kamera mata ikan pada Raspberry Pi 3. Bagian pertama dapat ditemukan di sini . Pada artikel ini, saya akan berbicara tentang mengkalibrasi kamera mata ikan dan menggunakan kamera untuk mendeteksi objek menggunakan paket find_object_2d. Siapa yang peduli, tolong, di bawah kucing.

Kalibrasi kamera mata ikan menggunakan camera_calibration


Di sini saya menjelaskan prosedur kalibrasi berdasarkan manual resmi di portal ros.org.

Untuk melakukan kalibrasi, kita membutuhkan paket kalibrasi kamera. Kita dapat menginstalnya dengan apt:

sudo apt-get install ros-kinetic-camera-calibration 

Kami akan membutuhkan templat kotak-kotak. Unduh templat dari manual resmi di ros.org dan cetaklah. Untuk kenyamanan, saya menempelkannya di papan kayu lapis:

gambar

Mari kita jalankan program kalibrasi:

 rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/usb_cam/image_raw camera:=/usb_cam 

Kami akan mendapatkan gambar:

gambar

Pindahkan template sedikit dan tunggu sampai template dipilih dalam bingkai (garis berwarna dengan titik-titik tidak akan muncul pada template).

gambar

gambar

Pindahkan template sedikit lebih ke samping. Untuk berhasil melakukan kalibrasi, kita perlu melakukan serangkaian gerakan template di depan kamera dari sisi ke sisi sehingga template jatuh ke semua posisi sudut di bidang tampilan kamera (kiri, kanan, atas dan bawah). Di sebelah kanan jendela gambar kamera di jendela program adalah panel pendaftaran dengan tiga bilah kemajuan:

  • X menangkap pergerakan pola ke arah kiri / kanan (horizontal) di bidang tampilan kamera
  • Y menangkap pergerakan pola ke arah atas / bawah (horizontal) di bidang tampilan kamera
  • Ukuran menangkap pendekatan / penghapusan template dari kamera dan memiringkan sehubungan dengan kamera.
  • Skew memperbaiki kemiringan templat kiri, kanan, atas dan bawah (bevel).

Jadi, untuk kalibrasi yang berhasil, penting bahwa templat muncul di berbagai sudut bingkai, menempati seluruh bingkai dan juga dimiringkan ke kiri, kanan, atas dan bawah.

Mengkalibrasi kamera mata ikan pada Raspberry Pi Anda bisa memakan waktu cukup lama, jadi bersabarlah. Prosedur kalibrasi saya memakan waktu 20 menit.

Ketika kalibrasi selesai, tombol Calibrate harus diaktifkan (disorot dalam warna):

gambar

Kita juga dapat melihat hasil kalibrasi di terminal:

gambar

Jika Anda puas dengan hasilnya, tekan tombol COMMIT. Jendela program akan ditutup dan Anda akan melihat pesan "menulis data kalibrasi ke ..." di terminal.

Periksa apakah file yang ditentukan telah dibuat:

 ll ~/.ros/camera_info/head_camera.yaml -rw-rw-r-- 1 vladimir vladimir 592 Apr 14 14:02 /home/vladimir/.ros/camera_info/head_camera.yaml 

Kalibrasi selesai. Sekarang data kalibrasi yang diperoleh dapat digunakan dalam lokalisasi visual dan algoritma SLAM di ROS.

Mendeteksi objek menggunakan find_object_2d


Menginstal paketnya cukup sederhana. Instal dari repositori apt di Ubuntu 16.04 untuk ROS Kinetic:

 sudo apt-get install ros-kinetic-find-object-2d source /opt/ros/kinetic/setup.bash 

Jalankan master ROS dan rqt_image_view:

 roscore roslaunch usb_cam usb_cam-test.launch 

Menggunakan perintah berikut, mulai simpul detektor:

 rosrun find_object_2d find_object_2d image:=/usb_cam/image_raw 

Jendela program deteksi terbuka:

gambar

Di sini kita akan melihat aliran dari kamera dan hasil dari deteksi fitur karakteristik pada objek.
Untuk mulai dengan, kami akan melakukan pelatihan detektor di fasilitas kami. Tempatkan objek pertama di depan kamera:

gambar

Klik kanan pada panel kiri Objek di jendela dan opsi Tambahkan objek dari adegan akan terbuka. Pilih opsi ini dan jendela untuk menambahkan objek akan terbuka:

gambar

Setelah memilih posisi terbaik untuk objek, klik tombol Ambil Gambar untuk mengambil gambar objek:

gambar

Kita harus memilih objek dalam gambar. Gunakan kursor mouse untuk memilih objek:

gambar

Klik tombol Next untuk memotong objek dalam gambar dan beralih ke langkah berikutnya. Setelah memotong gambar, kami mendapatkan jumlah fitur karakteristik yang terdeteksi di objek. Tinggal menekan tombol Putus untuk menambahkan objek ke basis data objek detektor terlatih. Di sini kita melihat langkah terakhir dari prosedur untuk menambahkan objek:

gambar

Sebagai hasilnya, kami melatih detektor pada satu objek. Sekarang Anda dapat mencoba deteksi objek dalam adegan:

gambar

Mari menggambar posisi objek yang terdeteksi ke terminal:

 rosrun find_object_2d print_objects_detected 

Outputnya akan seperti ini:

 Object 1 detected, Qt corners at (259.387238,103.530960) (448.684052,79.495495) (282.419050,240.049667) (458.438938,199.656717) --- Object 1 detected, Qt corners at (255.340408,104.615120) (451.348079,75.302353) (284.672425,230.382223) (452.696585,197.625600) --- Object 1 detected, Qt corners at (253.440521,102.973320) (447.226440,76.793541) (278.530854,238.918013) (454.377219,197.526599) --- 

Mari daftar topik:

 rostopic list 

Dua topik baru muncul dalam daftar: / objects dan / objectsStamped.

Kami menampilkan informasi tentang objek yang terdeteksi:

 rostopic echo /objects 

 layout: dim: [] data_offset: 0 data: [1.0, 266.0, 177.0, 0.7527905702590942, 0.060980819165706635, 0.00022385441116057336, 0.3012462854385376, 0.8929792046546936, 0.0008534671505913138, 334.9065856933594, 182.55294799804688, 1.0] --- 

Di sini, nilai kedua dan ketiga (266.0, 177.0) mewakili lebar dan tinggi objek. Semua nilai lain dalam bidang data mewakili matriks homografi 3x3 (digunakan untuk menghitung posisi dan orientasi objek, serta skala dan nilai pergeseran).

Seperti yang ditunjukkan oleh pengamatan, find_object_2d melakukan pekerjaan yang buruk dalam mendeteksi objek dengan tekstur lemah atau tanpa tekstur (tanpa tekstur). Selain itu, detektor tidak efektif ketika mendeteksi suatu objek pada sudut besar ke objek (jika kita mengamati objek dari samping), atau pada jarak yang jauh dari objek.

gambar

Setelah menyelesaikan pekerjaan dengan detektor, find_object_2d akan menawarkan kami untuk menyimpan objek yang ditambahkan ke disk.

Itu saja untuk saat ini. Semoga beruntung untuk semua orang dan sampai jumpa lagi!

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


All Articles