Contents — find the section you need
Change parameters and verify
Open the panel, then press Run to load Python. You can stop execution and reset parameters. Results are computed on this device. No Python installation is required.
Local execution steps below are optional for reproducing the source results; they are not required for the browser experiment.
The experiment controls are in English.
ICP bergantian antara korespondensi tetangga terdekat dan estimasi transformasi kaku. Residual yang lebih kecil tidak membuktikan bahwa pose yang dipulihkan benar. Bentuk 2D sederhana memungkinkan kita untuk mengisolasi inisialisasi, outlier, dan simetri tanpa noise sensor.
Tujuan
Implementasi ini meminimalkan jarak titik-ke-titik kuadrat. Setiap iterasi menemukan tetangga target untuk titik sumber yang ditransformasikan, menjaga kecocokan dalam ambang jarak, dan memperkirakan rotasi/translasi dengan SVD. Koreksi determinan mencegah refleksi. Proses berhenti setelah maksimal 100 iterasi. Tutorial Open3D ICP membedakan tujuan titik-ke-titik dan titik-ke-bidang; hanya yang pertama yang diimplementasikan di sini.
Masukan dan eksekusi
Unduh skrip dan jalankan python3 engineering_labs.py. Dataset ini telah diperiksa dengan Python 3.12.3, NumPy 1.26.4, dan Matplotlib 3.6.3. Open3D tidak diperlukan, dan ini bukan perbandingan kecepatan dengan implementasinya.
Targetnya adalah huruf L yang terbuat dari segmen 3 m dan 2 m, dengan total 102 titik dan sudut yang diduplikasi. Titik sumber dihasilkan oleh kebalikan dari rotasi sebenarnya 20° dan translasi (0,4, −0,3) m. Tidak ada noise sensor yang ditambahkan. Inisialisasi yang baik adalah 18° dan (0,35, −0,25) m; yang buruk adalah 110° dan (1,5, 1) m.
Membaca tiga jenis bukti
Residual berarti RMSE di atas jarak tetangga terdekat yang diterima. Cakupan adalah fraksi dari semua titik sumber dalam ambang batas. Kebenaran dasar sintetis juga memungkinkan kesalahan rotasi dan translasi.
| Kondisi | Ambang Batas [m] | Sisa [m] | Cakupan | Kesalahan rotasi [°] | Kesalahan translasi [m] |
|---|---|---|---|---|---|
| Inisialisasi yang baik | 0.5 | 0.023 | 1.000 | 1.258 | 0.055 |
| Inisialisasi yang buruk | 0.5 | 0.151 | 0.539 | 171.699 | 2.519 |
| 30 outlier, ambang batas lebar | 10 | 1.117 | 1.000 | 71.412 | 2.657 |
| 30 outlier, ambang batas sempit | 0.5 | 0.023 | 0.773 | 1.258 | 0.055 |
| Lingkaran simetris, rotasi awal 90° | 0.5 | kira-kira 0 | 1.000 | 90.000 | kira-kira 0 |
Bahkan inisialisasi yang baik pun masih menyisakan kesalahan: titik-titik tetangga pada segmen yang diambil sampelnya secara teratur memungkinkan solusi lokal yang bergeser. Cakupan 1.000 saja akan melewatkannya. Pencilan terletak di sumber x=4–7 m, y=3 m. Unduh target, input/output pencilan dan ringkasan.
Arah yang tidak teramati pada lingkaran dan dinding
Lingkaran memiliki radius 1 m dan 120 titik, dengan identitas didefinisikan sebagai transformasi sebenarnya. Himpunan titiknya juga cocok setelah rotasi 90°, sehingga pada dasarnya residual nol berdampingan dengan kesalahan pose 90°. Iterasi lebih lanjut tidak dapat memberikan informasi yang hilang.
Dinding menghadirkan masalah yang terkait tetapi berbeda. Kesalahan titik-ke-bidang mengukur perpindahan sepanjang normal dinding dan kurang membatasi gerakan tangensial. Dinding titik-ke-titik terbatas dapat memperoleh informasi dari titik akhir dan penempatan titik, tetapi ini menjadi lemah di koridor panjang tanpa titik akhir yang terlihat. Lingkaran adalah eksperimen yang telah dieksekusi; pembahasan dinding menjelaskan batasan arah tujuan.
Ambang batas yang lebih kecil bukanlah solusi universal
Ambang batas 0,5 m menghilangkan outlier ini, tetapi juga dapat menghilangkan korespondensi yang benar ketika inisialisasi jauh. Ambang batas yang berbeda memilih titik yang berbeda, sehingga residual saja tidak dapat dibandingkan secara langsung. Kode ini berhenti memperbarui dengan kurang dari tiga titik yang diterima; tiga titik itu sendiri bukanlah jaminan geometri yang baik.
Opsi praktis meliputi inisialisasi odometri, penyelarasan kasar-ke-halus, penyaringan outlier, dan pengamatan permukaan dengan orientasi berbeda. Ukur efeknya pada interval dan kondisi referensi yang sama.
Lanjutkan ke evaluasi SLAM
Ini adalah registrasi 2D satu bingkai, bukan uji akurasi mengemudi 3D atau ketahanan objek bergerak. Evaluasi SLAM menambahkan kesalahan lintasan, penyelarasan waktu, dan interval yang gagal. Variasikan hanya sudut awal terlebih dahulu untuk melihat mengapa konvergensi tidak dapat diringkas oleh satu nilai residual.
Jalankan perhitungan yang sama secara lokal
Ekstrak ZIP sumber lengkap yang dapat dijalankan, atau simpan titik masuk eksperimen, kernel yang dihasilkan, dan sumber PID asli dalam satu folder. PID menggunakan pustaka standar Python; Kalman dan ICP membutuhkan NumPy. Perintah pembuatan gambar asli tetap tersedia.
python3 -m pip install numpy==1.26.4
python3 experiment.py icp --parameters '{"case":"good_init","threshold":0.5}' > result.json
Cobalah bad_init, outliers, dan symmetric_ring. Bandingkan ambang batas 10 dan 0,5 untuk outliers. Verifikasi bahwa cincin dapat mempertahankan kesalahan rotasi 90 derajat bahkan dengan residual mendekati nol.
Code, data and reproduction
The ZIP contains the same computation code as the browser, synthetic data and comparison cases. These are not physical measurements.
Download reproduction package · Instructions (EN/JA) · Files and experiment conditions (JSON)
Extract the ZIP into a new directory, then run:
python3 reproduce.py --experiment icp
This Lab compares 5 cases. PID uses Python’s standard library; Kalman/ICP require NumPy. See the instructions for dependencies and tested versions.
Komentar
Silakan masuk terlebih dahulu.
Belum ada data.