Visual SLAM, Ikhtisar Penguat – Menuju AI

Visual SLAM, Ikhtisar Penguat – Menuju AI

Author(s): Mohammad Javadian Farzaneh

Awalnya diterbitkan di Menuju AI.

Bagian 1

Foto oleh Andrew Neel di Unsplash

Tujuan Penulisan

SLAM merupakan salah satu konsep machine vision yang banyak digunakan dalam robotika. Tesis Master saya terkait dengan konsep ini. Sulit untuk memahami konsep tersebut karena kurangnya pengetahuan tentang frasa dan idiom terkait SLAM. Jadi saya mencurahkan waktu saya untuk mencari tahu tujuan SLAM dan Cara kerjanya. Saya memutuskan untuk menulis pemahaman saya tentang SLAM, terutama Visual SLAM, untuk membantu siapa pun pada langkah pertama tanpa intuisi. Semoga membantu dan mempermudah prosesnya.

Perkenalan

“SLAM” adalah singkatan dari “Pelokalan dan Pemetaan Secara Bersamaan”. Algoritma ini memungkinkan robot untuk membuat peta dari lingkungan yang tidak diketahui dan secara bersamaan melokalkan dirinya ke sana. Ada beberapa jenis dan kategori SLAM yang memanfaatkan berbagai sensor. Salah satu kategori yang paling banyak digunakan adalah Visual SLAM dan Non-Visual SLAM.

Visual SLAM adalah jenis SLAM yang menggunakan kamera sebagai sensor utama untuk membuat peta dari gambar yang diambil. Peta dibuat dari jalur yang dilalui kamera. Jadi di Visual SLAM, kami ingin memulihkan lintasan kamera menggunakan gambar dan menampilkannya di peta 3D/2D.

Apalagi, Visual SLAM sendiri dibagi menjadi tiga kelas berdasarkan jenis kameranya: Monocular, Stereo, dan RGB-D. Penelitian saya tentang Monocular Visual SLAM, jadi beberapa istilah mungkin berbeda, tetapi ide utamanya sama.

Peta sederhana yang dibuat dari jalur kuadrat oleh ORB-SLAM2

Pada gambar di atas, peta dibuat dari urutan gambar yang diambil dari jalur kuadrat. Garis hijau adalah lintasan kamera. Bagian lain menunjukkan poin fitur dan bingkai kunci yang akan dibahas di bagian berikut.

Apakah ada referensi yang bagus di web?

Pada awalnya, saya membutuhkan banyak usaha untuk memahami cara kerja Visual SLAM; banyak makalah, artikel, dan blog membicarakannya, tetapi itu bisa lebih bermanfaat. Setelah beberapa lama, saya menemukan buku berjudul “Introduction to Visual SLAM From Theory to Practice.” Itu adalah pengubah permainan. Saya memahami sebagian besar konsep dan idiom melalui membaca buku ini. Jadi saya akan melanjutkan tulisan saya dari buku ini.

Kerangka Visual Slam

Pertama, kita membutuhkan sensor kamera untuk membuat sistem visual slam. Input sistem adalah gambar karena menggunakan kamera. Setelah mengambil gambar dan melakukan beberapa per-pemrosesan untuk mengurangi noise dan meningkatkan kualitas, gambar siap diproses untuk pembuatan peta. Namun, bagaimana gambar diproses? Oke, kita akan membicarakannya nanti. Mari kita perkenalkan kerangka kerja terlebih dahulu.

Gambar di bawah menggambarkan proses dengan baik:

Kerangka visual SLAM oleh Xiang Gao dan Tao Zhang

Kami telah membahas sensor dan data. Sekarang mari kita bicara tentang bagian lain. Sebagian besar sistem slam visual terdiri dari dua bagian utama: Front-end dan Back-end. Front-end bertanggung jawab untuk memproses gambar dan mengekstraksi poin yang disebut poin fitur. ‌Bagian belakang bertanggung jawab untuk mengoptimalkan perkiraan lintasan dan bagian peta lainnya. Ada bagian bernama penutupan loop. Bagian ini memeriksa apakah kamera telah melihat suatu tempat lagi atau tidak, dan ini sangat penting karena akan mencegah terjadinya beberapa masalah seperti akumulasi penyimpangan. Ada penjelasan yang bermanfaat di tautan di bawah ini. Silakan periksa untuk info lebih lanjut.

Odometri Visual vs. SLAM Visual vs. Struktur-dari-Gerakan

Apa saja fiturnya?

Seperti disebutkan sebelumnya, front-end dalam visual slam mengekstrak poin fitur. Fitur-fitur ini membuat peta, dan mereka adalah komponen utama. Ada definisi yang berbeda untuk menjawab pertanyaan itu. Yang paling sederhana tertulis di Wikipedia, “sekumpulan informasi yang berkaitan dengan tugas komputasi.” Definisi luar biasa lainnya yang lebih spesifik untuk diskusi kita adalah “ekspresi digital dari informasi gambar”. Berdasarkan istilah ini, setiap piksel gambar dapat dianggap sebagai fitur, tetapi terdapat beberapa masalah terkait hal ini. Masalah utama dengan pendekatan ini adalah bahwa dengan meningkatkan ukuran gambar kompleksitas waktu proses akan meningkat, yang tidak baik. Selain itu, sistem SLAM memerlukan fitur yang stabil di bawah perubahan visual gambar yang berbeda seperti rotasi, penskalaan, dan kecerahan. Jadi piksel bukanlah kandidat yang baik. Beberapa fitur valid lainnya diperlukan. Penelitian menunjukkan bahwa tepi dan sudut pada gambar dapat dianggap sebagai titik fitur. Mereka memiliki aplikasi yang lebih baik daripada piksel.

Apa itu edge, corner, dan Block?

Tepi adalah bagian dari gambar di mana perubahan kecerahan cahaya yang ekstrem terlihat dalam satu arah. Perpotongan dua sisi disebut sudut. Blok adalah bagian dari gambar tanpa perubahan atau sedikit perubahan kecerahan cahaya. Gambar di bawah menunjukkan mereka secara visual:

Definisi visual Edge, Corner dan Block oleh Xiang Gao dan Tao Zhang

Namun, sekali lagi ada masalah dengan sudut dan tepinya. Menskalakan gambar, misalnya membuatnya lebih besar, sudut dapat diubah menjadi tepi atau blok. Silakan lihat gambar di bawah ini:

Sudut dikonversi menjadi tepi karena penskalaan oleh opencv.org

Pada gambar ini, sebuah sudut ditampilkan, dan kemudian sudut tersebut menjadi lebih besar dan diubah menjadi tepi karena penskalaan. Jadi berkat masalah ini lagi kami membutuhkan poin fitur yang lebih andal. Beberapa algoritme mengekstraksi fitur yang lebih bernilai dan andal, seperti SIFT, SURF, dan ORB. Saat ini, ORB digunakan lebih dari algoritma lain karena kecepatan dan ketahanannya. Ada penjelasan bermanfaat tentang ORB di tautan di bawah ini.

Pengantar ORB (Oriented FAST and Rotated BRIEF)

Bagaimana menemukan lintasan kamera menggunakan titik fitur?

Setelah mengekstraksi fitur, pencocokan gambar adalah hal yang paling dasar namun penting untuk dilakukan. Pencocokan gambar membantu kita pada awalnya untuk mengetahui bahwa gambar tersebut cukup terkait untuk digunakan dalam algoritme slam. Menemukan titik fitur yang cocok dan sesuai yang membantu kami memperkirakan pose kamera (Rotasi + Terjemahan) adalah penggunaan keduanya yang kedua.

Untuk menampilkan kamera atau titik mana pun di peta (jika peta 3D digunakan), diperlukan tiga entitas: X, Y, dan Z. Dalam monocular slam, karena kedalaman gambar tidak dapat diakses, dan satu-satunya yang kami miliki adalah gambar 2D, pemulihan ketiga entitas tersebut sulit dan hampir mustahil. Jadi beberapa estimasi harus dilakukan. Kami menyebutnya “Inisialisasi”. Inisialisasi adalah langkah penting dalam monocular slam karena kedalaman, skala, dan pose pertama kamera akan ditemukan. Perhitungan pada langkah ini dilakukan berdasarkan geometri epipolar dengan mengekstraksi matriks esensial atau fundamental. Singkat cerita, diperlukan matriks esensial atau fundamental untuk mendapatkan pose pertama kamera. Mereka dapat diekstraksi dari persamaan bernama kendala epipolar sama dengan nol.

persamaan kendala epipolar

Dalam persamaan di atas, p1 dan p2 adalah dua titik fitur yang cocok yang menunjukkan posisi 3D yang identik dari suatu titik dalam koordinat dunia nyata. K adalah matriks intrinsik yang terdiri dari panjang fokus dan titik utama. Matriks ini dapat ditemukan dengan menggunakan metode kalibrasi kamera. t adalah vektor yang menunjukkan terjemahan.

Kita dapat membentuk matriks Esensial dengan mengekstraksi ? ∧ ?. Jika kita membutuhkan matriks fundamental, kita menggunakan rumus ini ? = ?⁻ᵀ ? ? ⁻¹ dengan E adalah matriks esensial. Sekarang kita dapat menggunakan Dekomposisi Nilai Singular (SVD) untuk menemukan pose kamera sama dengan matriks proyeksi atau pose kamera.

Bagaimana cara memperkirakan posisi nyata poin fitur?

Sekarang kita memiliki matriks proyeksi, kita dapat memperkirakan posisi 3D dari titik-titik fitur menggunakan metode “Triangulasi”. Titik fitur yang diekstraksi semuanya ada dalam sistem koordinat gambar. Pertama, kami membawanya ke bidang yang dinormalisasi (Jika Anda tidak terbiasa dengan bidang yang dinormalisasi, lebih baik membaca tentang model kamera lubang jarum). Ketika titik-titik ini berada di bidang yang dinormalisasi, kita dapat menggunakan koordinat x dan y mereka sebagai x dan y 3D, sehingga satu-satunya item yang tersisa adalah z karena, seperti yang disebutkan sebelumnya, di kamera bermata, kedalaman hilang.

Untuk menghitung z perhatikan gambar di bawah ini,

Penjelasan triangulasi.

Dalam gambar ini, P1 dan P2 adalah titik fitur yang menunjuk ke titik P 3D identik yang terletak di dunia nyata. Dua persegi panjang biru adalah gambar yang diambil dari P1 dan P2 secara reseptif. Karena kedua titik ini menunjukkan titik dunia nyata yang sama dan identik, mengubah sistem koordinat P1 ke sistem koordinat P2 P1 harus jatuh tepat pada P2 (Berdasarkan model dan persamaan kamera lubang jarum). Jadi untuk mengubah koordinat kamera P1, diperlukan matriks ekstrinsik, pose kamera, atau matriks proyeksi yang ada di bagian sebelumnya.

Untuk menghitung parameter z di bawah ini digunakan rumus:

Z₂ X₂ = [?₂₁ ?₂₁] Z₁ X₁

Pada rumus di atas, parameter X adalah koordinat P1 dan P2 pada bidang normal, dihitung dengan mengalikan P1 dan P2 dengan invers matriks intrinsik (K).

Berdasarkan rumus di atas, titik X1 akan bergeser ke sistem koordinat titik X2. Tujuan kita adalah mencari parameter Z agar jarak dua titik dalam satu sistem koordinat menjadi seminimal mungkin.

Hingga saat ini, kita telah membahas cara menemukan dan memperkirakan elemen paling awal dari sebuah peta. Setelah inisialisasi, kita dapat menggunakan algoritme PnP untuk memperkirakan pose kamera bingkai baru dan titik fitur barunya.

Artikel ini menjadi panjang dan mungkin membosankan, dan saya akan menjelaskan bagian-bagian yang tersisa di artikel berikut.

Referensi:
Gao, X. dan Zhang, T., 2021. Pengantar SLAM visual: dari teori ke praktik. Sifat Pegas.

Visual SLAM, A Booster Overview awalnya diterbitkan di Towards AI on Medium, di mana orang melanjutkan percakapan dengan menyorot dan menanggapi cerita ini.

Diterbitkan melalui Menuju AI

Author: Jeffrey Hayes