Mengetahui Pose Robot Dengan Informasi Visual
Lintang Erlangga - May 31st, 2021
Dari sekian banyak pekerjaan yang dilakukan oleh robot, ada satu hal yang membuat daya tarik tersendiri. Yaitu bagaimana robot dapat menentukan posisinya sendiri ketika GPS tidak bisa diandalkan.
Padahal banyak pekerjaan robot itu memerlukan informasi mengenai posisi ia berada. Mulai dari robot penyiram tanaman menggunakan drone, seperti yang dibuat oleh DJI. Robot pembantu di rumah sakit yang namanya Moxi. Dan ada juga robot yang tugasnya mindah-mindahin barang di gudangnya Amazon.
Untuk robot yang beroperasi di ruang terbuka atau outdoor, penggunaan GPS (Global Positioning System) dirasa sudah cukup memadai untuk sistem penentu posisi robot. Namun apabila robot beroperasi di dalam ruangan, ini yang jadi masalah, karena bacaan GPS sendiri menjadi tidak akurat (dulu pakai Here 2, dan ngetes juga pakai HP), padahal beberapa aplikasi robot memerlukan tingkat presisi yang lumayan.
Daftar Isi
Pemanfaatan RTK atau Real Time Kinematics
GPS sendiri artinya kita mengetahui posisi dengan dibantu oleh satelit. Mungkin solusi lainnya ketika GPS tidak akurat, bisa menggunakan Real Time Kinematics atau RTK. RTK sendiri kalau saya baca-baca di spesifikasi produknya, katanya bisa mencapai kekauratan hingga skala sentimeter.
Cara kerja RTK sendiri pada dasarnya sama-sama memanfaatkan data dari GPS. Ada satu komponen namanya base station yang tugasnya melakukan koreksi data. Nah, komponen ini juga harus ditaruh sebisa mungkin supaya terhindar dari halangan. Yang jadi kendala bukan hanya RTK ini ketika ditaruh di dalam ruangan, tapi juga menurunkan mobilitas robot karena RTK-nya kemungkinan besar gak bisa berpindah.
Menggunakan Visual Odometry
Alternatif lainnya yaitu menggunakan suatu metode yang namanya visual odometry. Dengan teknik ini kita gak perlu alat luar tambahan (contohnya base station sebelumnya). Namun kita perlu menambahkan kamera, namun kameranya sendiri terintegrasi di body robot itu sendiri.
Secara garis besar, metode ini mencoba untuk mengestimasi jarak dari objek-objek sekitar. Nanti di setiap selang waktu tertentu diperiksa jarak sesudah dan sebelumnya untuk mendapatkan posisi serta orientasi robot.
Pertanyaanya, emang bisa sebuah kamera mendapatkan informasi berupa jarak suatu objek atau yang lebih dikenal sebagai depth? Nah, biasanya selain kamera, ada juga penggunaan IMU (Inertial Measurement Units) untuk ngebantu estimasi jarak objek di sekitar. Terutama untuk kamera monokular, kalau sekarang kan udah ada kamera stereo dan RGBD yang bisa ngedapetin informasi jarak/depth-nya.
Visual-Inertial Odometry (VIO)
Dengan adanya penambahan sensor IMU, maka pembahasan kali ini kita geser sedikit dari Visual Odometry menjadi VIO. Sebenarnya objektif tidak ada perbedaan, hanya saja secara alur kerjanya yang berbeda. Jadi VIO atau visual-inertial odometry kurang lebih intinya yaitu mengestimasi pose serta kecepatan berdasarkan kamera (bisa dua atau lebih) dibantu juga dengan IMU (sama juga bisa dua atau lebih).
Ide dasarnya pun mirip dengan Visual Odomety yaitu berupaya untuk mengetahui transformasi dari robot pada interval waktu tertentu, seperti diilustrasikan pada gambar berikut.
Sebelumnya buat yang belum tau apa itu transformasi, kalian bisa baca-baca materi pada tautan sebelumnya. Tapi secara garis besar, intinya kita tertarik untuk mengamati suatu perubahan berupa posisi serta orientasi dari suatu objek.
Pada ilustrasi sebelumnya bisa dilihat, kalau tugas utama dari algoritma ini yaitu mencari atau matriks transformasi berdasarkan hasil tracking terhadap fitur (informasi pada gambar) yang digunakan. Setelah matriks tersebut didapat, maka dilakukan transformasi terhadap pose yang direpresentasikan oleh untuk mendapatkan estimasi posenya. Sebagai tambahan, posenya sendiri diukur berdasarkan koordinat global yang telah ditetapkan, yang umumnya titik awal robot ketika programnya dijalankan.
Berbicara fiturnya, paling umum beberapa algoritma visual odometry menggunakan corner dari suatu objek di dalam citra. Maksud dari corner sendiri gampangannya yaitu bagian dari piksel citra yang gradiennya ada di segala arah. Oke, mungkin kita gak akan terlalu menyelam untuk membahas yang satu ini.
Umumnya, algoritma dari VIO ini dibagi menjadi dua, yakni dibagi berdasarkan bagaimana informasi visual dari kamera dan informasi inersial (berupa kecepatan sudut, percepatan) digabung. Dua kategori tersebut yaitu dinamakan sebagai tightly coupled dan loosely coupled. Pada tightly coupled, informasi visual dan inersial digabungkan terlebih dahulu untuk mendapatkan estimasi berupa keluaran akhirnya, yaitu posenya. Sedangkan pada loosely coupled, masing-masing informasi visual dan inersial digunakan terlebih dahulu untuk menghitung estimasi posenya, lalu pose dari masing-masing data tersebut barulah digabung untuk mendapatkan keluaran akhirnya.
Kira-kira lebih unggul yang mana ya? Berdasarkan literatur yang pernah saya baca, tightly coupled lebih diunggulkan ketimbang loosely coupled. Alasan yang saya pahami yaitu, pada loosely coupled tidak dapat mengkoreksi adanya drift dari hasil estimasi pose menggunakan kamera.
Beberapa Algoritma Visual Odometry
Buat kalian yang tertarik main-main sama algoritma ini, sebenarnya ada banyak tersedia di internet yang kalian bisa praktekkan di rumah. Di antaranya yaitu SVO (murni kamera aja), ROVIO, ICE-BA, VINS-Fusion, dan masih banyak lagi sebenarnya.
Untuk coba-coba, saya sarankan kalau kalian punya kamera eksternal coba install Ubuntu dan ROS (Robot Operating System), dibikin dual OS aja laptop atau komputer kalian. Setelah itu tinggal pilih mau algoritma yang mana, karena masing-masing metode udah membuat tata cara penginstalannya.
Saya sangat menyarankan coba SVO dulu, karena setup-nya gak terlalu sulit, mengingat hanya perlu kamera saja. Kalau pakai selain itu, kita perlu ada yang ngehandle bacaan dari IMU lagi. Terlebih lagi, ada satu masalah besar dalam VIO yaitu bagaimana kita mensinkronkan antara data visual dengan data inersial.
Jika kalian tertarik untuk coba-coba silahkan kalau ada kesulitan, bisa ditanyakan di kolom komentar. Sekian dan terima kasih, semoga bermanfaat.
Sumber: Visual-Inertial Odometry of Aerial Robots - Davide Scaramuzza.