
Salah satu manfaat
Sistem Operasi Robot (ROS) adalah memiliki banyak paket yang dapat digunakan kembali dalam aplikasi kita. Dalam kasus kami, kami ingin memperkenalkan sistem pengenalan dan deteksi objek. Paket
find_object_2d mengimplementasikan
detektor fungsi dan deskriptor SURF, SIFT, ORB, FAST, dan BRIEF untuk mendeteksi objek . Dengan menggunakan antarmuka grafis yang disediakan oleh paket ini, kita dapat menandai objek yang ingin kita deteksi dan menyimpannya untuk deteksi di masa mendatang. Node detektor akan mendeteksi objek dalam gambar kamera dan mempublikasikan detail objek melalui subjek. Menggunakan sensor 3D, dapat mengevaluasi kedalaman dan orientasi suatu objek.
Di akhir artikel, pengujian video pada contoh algoritma ORB dan SIFT.
Pengaturan find_object_2d
Menginstal paket ini cukup sederhana. Ini adalah perintah untuk menginstalnya di Ubuntu 16.04 dan ROS Kinetic:
$ sudo apt-get install ros-kinetic-find-object-2d
Instal dari sumber
Beralih ke ruang kerja ROS:
$ cd ~/catkin_ws/src
Salin kode sumber ke folder src:
$ git clone https://github.com/introlab/find-object.git src/find_object_2d
Buat ruang kerja:
$ catkin_make
Menjalankan node find_object_2d menggunakan webcam
Berikut ini adalah prosedur untuk memulai node detektor untuk webcam. Jika kita ingin mendeteksi objek menggunakan webcam, pertama-tama kita harus menginstal paket usb_cam (lihat artikel sebelumnya).
1. Luncurkan roscore:
$ roscore
2.1 Hubungkan kamera USB ke komputer dan jalankan driver USB_cam ROS:
$ roslaunch usb_cam usb_cam-test.launch
Ini akan meluncurkan driver ROS untuk webcam USB, dan Anda dapat melihat topik dalam driver ini menggunakan perintah daftar rostopic. Daftar topik dalam driver ditampilkan di sini:
Topik diterbitkan dari driver kamera2.2 Cara alternatif untuk menyiarkan video dari kamera melalui uvc_camera:
$ rosrun uvc_camera uvc_camera_node
3. Dari daftar topik, kita akan menggunakan tema gambar mentah dari kamera, yang diterbitkan dalam topik / usb_cam / image_raw. Jika Anda mendapatkan topik ini, maka langkah selanjutnya adalah meluncurkan node penemuan objek. Perintah berikut akan memulai node penemuan objek:
$ rosrun find_object_2d find_object_2d image:=/usb_cam/image_raw
Perintah ini akan membuka jendela deteksi objek di mana kita melihat saluran kamera dan fitur objek.
4. Jadi, bagaimana kita bisa menggunakannya untuk mendeteksi objek? Berikut ini adalah prosedur untuk melakukan penemuan dasar menggunakan alat ini:
Jendela Deteksi Cari-Objek5. Anda dapat mengklik kanan pada panel sisi kiri (Objek) dari jendela ini, dan Anda akan mendapatkan kesempatan untuk menambahkan objek dari adegan. Jika Anda memilih opsi ini, Anda akan diminta untuk menandai objek dari adegan saat ini, dan setelah penandaan selesai, objek yang ditandai akan mulai dilacak dari adegan tersebut. Tangkapan layar sebelumnya menunjukkan langkah pertama di mana adegan dengan objek ditangkap.
6. Setelah mengarahkan objek ke kamera, klik tombol "Ambil Gambar" untuk mengklik objek:
Tambahkan Wizard Objek untuk Mengabadikan Objek7. Jendela berikutnya adalah untuk menandai objek dari penjilidan saat ini. Gambar berikut menunjukkan ini. Kita dapat menggunakan kursor mouse untuk menandai objek. Klik tombol "Next" untuk memotong objek, dan Anda dapat melanjutkan ke langkah berikutnya:
Tambahkan Wizard Objek ke Label suatu Obyek8. Setelah memangkas objek, itu akan menunjukkan jumlah total deskriptor fungsi untuk objek, dan Anda dapat mengklik tombol "End" untuk menambahkan templat objek untuk dideteksi. Gambar berikut menunjukkan langkah terakhir menambahkan templat objek ke aplikasi detektor ini:
Langkah terakhir dari Add Features Wizard9. Selamat! Anda telah menambahkan objek untuk ditemukan. Sekarang Anda dapat melihat deteksi yang ditunjukkan pada bidikan berikutnya. Anda dapat melihat kotak pembatas di sekitar objek yang terdeteksi:
Menemukan-Obyek Wisaya Peluncuran Penemuan10. Apakah ini cukup? Bagaimana dengan posisi objek? Kita bisa mendapatkannya
posisi objek menggunakan perintah berikut:
$ rosrun find_object_2d print_objects_detected
Detail Properti11. Anda juga dapat memperoleh informasi lengkap tentang objek yang terdeteksi
/ Objek topik. Topik ini menerbitkan array multicast yang terdiri dari lebar dan tinggi objek dan matriks homografi untuk menghitung posisi dan orientasi objek serta skala dan nilai offsetnya. Anda bisa mendapatkan topik gema / objek seperti ini:
Nilai tema / objek12. Kita dapat menghitung posisi dan orientasi baru dari persamaan berikut:
Persamaan untuk menghitung posisi objekDi sini H adalah homografi dari matriks 3 Γ 3, (x1, y1) adalah posisi objek dalam gambar yang disimpan, dan (x2, y2) adalah posisi objek yang dihitung dalam bingkai saat ini.
Anda dapat memeriksa kode sumber simpul print_objected_src untuk mendapatkan konversi menggunakan matriks homografi.
Berikut adalah kode sumber untuk simpul ini.Pengujian video dari paket find_object_2d menggunakan contoh algoritma ORB dan SIFT
Ringkasan algoritma: ORB cepat, tetapi tidak melihat objek jarak jauh dan seringkali tidak menentukan geometri dengan benar. SIFT melihat objek jarak jauh, secara akurat menentukan geometri, kontra membutuhkan sumber daya komputasi yang besar dan dibayar untuk penggunaan komersial.
Pertanyaan yang harus dipecahkan oleh robot EduMIP :
- Terima dari kamera Logitech C920 di BeagleBone Blue, video yang sudah dikodekan dengan perangkat keras dan transfer dalam bentuk ini ke komputer besar di ROS.
- Hubungkan sensor jarak VL6180X, Vl53l0x dan bumper untuk membangun peta di ROS. (Aksesori sudah dipesan)
- Tulis algoritma dalam ROS yang akan memproses data peta dan objek yang terdeteksi dari kamera dan membangun rute pergerakan berdasarkan mereka.
Jika ada penggemar robotika seperti saya yang siap untuk bergabung dengan proyek ini, kemudian menulis dalam email pribadi, saya perlu bantuan tentang masalah di atas.