Robotika · pelajaran 30
Di mana aku? Lokalisasi Monte Carlo
Peta sudah ada, posisinya belum
Di pelajaran SLAM robot membuat peta sambil berjalan. Begitu peta disimpan, pekerjaan sehari-hari robot berbeda: setiap kali dinyalakan ia harus menjawab “aku ada di mana di peta ini?”. Ini lokalisasi. Odometri saja tidak cukup:
- odometri hanya tahu perubahan posisi, bukan posisi awal;
- odometri pelan-pelan melenceng (pelajaran odometri);
- odometri tidak tahu apa-apa kalau robot diangkat lalu dipindah.
Di ROS 2, lokalisasi dikerjakan node amcl (Adaptive Monte Carlo Localization, bagian dari Nav2). Di halaman ini mode navigasinya AMCL:
map_servermenerbitkan peta rumah yang sudah jadi;amclmembaca/scan,/odomdan/map, lalu menerbitkan/amcl_posedan/particle_cloud.
Ribuan tebakan
Filter partikel tidak menyimpan satu posisi, tetapi ratusan sampai ribuan tebakan. Setiap tebakan (partikel) berisi x, y dan arah. Partikel-partikel itu terlihat sebagai garis ungu, di 3D dan di tab Peta. Setiap kali robot sudah bergerak 5 cm atau berputar sekitar 5°, tiga langkah ini diulang:
- Gerak. Setiap partikel digeser sebesar perubahan
/odom, ditambah sedikit derau acak. Derau dibuat sebanding dengan gerakannya (parameter α1–α4 di amcl). Karena itu awan partikel melebar saat robot bergerak dan odometri kurang bisa dipercaya. - Nilai. Untuk setiap partikel: kalau robot benar-benar di situ, apakah 36 sinar LiDAR berakhir tepat di dinding peta? Jarak tiap ujung sinar ke dinding terdekat diambil dari likelihood field yang dihitung sekali dari peta. Makin dekat ke dinding, makin tinggi bobot partikel itu (kurva Gauss dengan lebar σ).
- Undi ulang (resampling). Partikel baru diambil dari yang lama, sebanding dengan bobotnya. Tebakan buruk punah, tebakan bagus beranak. Undian ulang hanya dilakukan kalau bobot sudah timpang (Neff turun di bawah separuh), supaya keragaman tidak hilang terlalu cepat.
Posisi yang diterbitkan di /amcl_pose adalah rata-rata berbobot partikel. Seberapa yakin AMCL terlihat dari sebarannya: kovarians di pesan itu, dan angka Sebaran di tab Peta.
Lokalisasi global
Tekan 🎲 Sebar partikel (layanan /reinitialize_global_localization). Sekarang 5.000 partikel tersebar di seluruh rumah dengan arah acak: robot benar-benar tidak tahu ia di mana. Jalankan robot (W A S D, atau skrip Cari posisi) dan perhatikan:
- setelah satu-dua pindaian, partikel di tempat yang jelas salah (misalnya menghadap dinding padahal LiDAR melihat lorong panjang) langsung punah;
- beberapa kerumunan tersisa di tempat-tempat yang mirip, misalnya dua sudut ruangan yang bentuknya sama;
- robot bergerak, pindaian berikutnya memecah kemiripan itu, dan tinggal satu kerumunan.
Begitu partikel sepakat, jumlahnya diturunkan ke 800. amcl melakukannya dengan KLD sampling: banyak partikel saat ragu, sedikit saat yakin. Kadang awan partikel sepakat pada tempat yang mirip tapi salah. Itu kegagalan sungguhan filter partikel, dan lebih sering terjadi di peta yang simetris. Coba arena Labirin atau Arena heksagon dengan mode AMCL.
Robot yang diculik
Tekan 🫳 Culik robot. Robot dipindah diam-diam ke tempat lain. Roda tidak berputar, jadi odometri tidak tahu apa-apa, dan semua partikel kini berada di tempat yang salah dengan sangat yakin. Dari mana AMCL tahu ada yang salah?
Augmented MCL menyimpan dua rata-rata seberapa cocok pindaian dengan peta:
- rata-rata lambat, yang mengingat “biasanya cocoknya segini”;
- rata-rata cepat, untuk beberapa pindaian terakhir.
Saat robot sudah ketemu, pindaian cocok 5–10 kali lebih baik daripada saat tersesat. Kalau rata-rata cepat jatuh di bawah separuh rata-rata lambat, sebagian partikel diganti partikel acak di seluruh peta (angka disuntik acak di tab Peta). Salah satu partikel acak itu akhirnya mendarat dekat posisi sebenarnya, cocok dengan pindaian, lalu beranak.
Misi
- Tekan 🎲 Sebar partikel, lalu jalankan robot sampai AMCL menemukannya: meleset < 15 cm dan < 10°, sebaran < 15 cm.
- Lalu tekan 🫳 Culik robot dan terus jalankan sampai AMCL pulih.
Coba juga penggeser di tab Peta. Apa yang terjadi kalau partikel saat disebar hanya 500? Kalau σ model sensor dibuat 2 cm?
Selanjutnya: Lengan yang melukis · Semua pelajaran