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.

Open experiment panel in a new tab

Download reproduction source

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
Diagram 1 · Use the button to switch views
Hasil ICP sintetis: target biru, sumber sejajar oranye, sumbu dalam meter.

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.

Related reading

Separate point-cloud residuals from trajectory correctness.Cara mengevaluasi SLAM — ATE, RPE, waktu eksekusi, dan kegagalanExplore another aspect of this fieldDari pemetaan hingga navigasi di ROS 2 — prosedur Jazzy dan Nav2 minimal.Explore another aspect of this fieldMereproduksi kegagalan robot dengan rosbag2: input, TF, dan waktu