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, en yakın komşu eşleşmesi ve rijit dönüşüm tahminini dönüşümlü olarak kullanır. Daha küçük bir artık değer, kurtarılan pozisyonun doğru olduğunu kanıtlamaz. Basit 2B şekiller, sensör gürültüsü olmadan başlatmayı, aykırı değerleri ve simetriyi izole etmemizi sağlar.
Amaç
Bu uygulama, karesel nokta-nokta mesafelerini en aza indirir. Her yineleme, dönüştürülmüş kaynak noktaları için hedef komşuları bulur, eşleşmeleri bir mesafe eşiği içinde tutar ve SVD ile döndürme/ötelemeyi tahmin eder. Bir determinant düzeltmesi yansımayı önler. En fazla 100 yinelemeden sonra durur. Open3D ICP eğitim kılavuzu, nokta-nokta ve nokta-düzlem amaçlarını birbirinden ayırır; burada yalnızca ilki uygulanmıştır.
Girişler ve yürütme
Komut dosyasını indirin ve python3 engineering_labs.py'yi çalıştırın. Python 3.12.3, NumPy 1.26.4 ve Matplotlib 3.6.3 ile kontrol edilmiştir. Open3D gerekli değildir ve bu, Open3D uygulamasının hız karşılaştırması değildir.
Hedef, 3 m ve 2 m'lik segmentlerden oluşan, toplamda 102 nokta içeren ve köşesi tekrarlanan bir L şeklidir. Kaynak noktaları, gerçek 20° dönüşün tersi ve (0,4, −0,3) m öteleme ile oluşturulmuştur. Sensör gürültüsü eklenmemiştir. İyi başlangıç 18° ve (0,35, −0,25) m; kötü başlangıç ise 110° ve (1,5, 1) m'dir.
Üç çeşit kanıt okuyun
Kalıntı, kabul edilen en yakın komşu mesafeleri üzerindeki RMSE anlamına gelir. Kapsama, eşik içindeki tüm kaynak noktalarının oranıdır. Sentetik gerçek değer, dönüş ve öteleme hatalarına da izin verir.
| Koşul | Eşik [m] | Artık [m] | Kapsama | Dönme hatası [°] | Öteleme hatası [m] |
|---|---|---|---|---|---|
| İyi başlatma | 0.5 | 0.023 | 1.000 | 1.258 | 0.055 |
| Kötü başlatma | 0.5 | 0.151 | 0.539 | 171.699 | 2.519 |
| 30 aykırı değer, geniş eşik | 10 | 1.117 | 1.000 | 71.412 | 2.657 |
| 30 aykırı değer, dar eşik | 0.5 | 0.023 | 0.773 | 1.258 | 0.055 |
| Simetrik daire, 90° başlangıç dönüşü | 0.5 | yaklaşık 0 | 1.000 | 90.000 | yaklaşık 0 |
İyi bir başlangıç bile bir hata bırakıyor: düzenli olarak örneklenen segmentlerdeki komşu noktalar, kaydırılmış bir yerel çözüme izin veriyor. Yalnızca 1.000 kapsama alanı bunu kaçırırdı. Aykırı değerler kaynak x=4–7 m, y=3 m'de yer alıyor. Hedef, aykırı değer giriş/çıkış ve özet dosyalarını indirin.
Dairelerde ve duvarlarda gözlemlenemeyen yönler
Dairenin yarıçapı 1 m ve 120 noktası var, özdeşlik gerçek dönüşüm olarak tanımlanıyor. Nokta kümesi 90° döndürmeden sonra da eşleşiyor, bu nedenle esasen sıfır kalıntı 90° poz hatasıyla birlikte var oluyor. Daha fazla yineleme eksik bilgiyi sağlayamaz.
Bir duvar, ilgili ancak farklı bir sorun sunar. Nokta-düzlem hatası, duvar normali boyunca yer değiştirmeyi ölçer ve teğetsel hareketi yetersiz bir şekilde sınırlandırır. Sonlu nokta-nokta duvarlar, uç noktalardan ve nokta yerleşiminden bilgi edinebilir, ancak bu, görünür uç noktaları olmayan uzun bir koridorda zayıflar. Daire, gerçekleştirilmiş bir deneydir; duvar tartışması, amacın yönsel kısıtlamalarını açıklar.
Daha küçük bir eşik evrensel bir çözüm değildir
0,5 m eşiği bu aykırı değerleri ortadan kaldırır, ancak başlatma çok uzakta olduğunda doğru eşleşmeleri de ortadan kaldırabilir. Farklı eşikler farklı noktaları seçer, bu nedenle yalnızca artık değerler doğrudan karşılaştırılabilir değildir. Bu kod, üçten az kabul edilen nokta ile güncellemeyi durdurur; üç nokta kendi başına iyi bir geometri garantisi değildir.
Pratik seçenekler arasında odometri başlatma, kaba-ince hizalama, aykırı değer filtreleme ve farklı yönelimlere sahip yüzeylerin gözlemlenmesi yer alır. Bunların etkilerini aynı aralıklar ve referans koşulları üzerinde ölçün.
SLAM değerlendirmesine devam edin
Bu, tek karelik 2B kayıt işlemidir, 3B sürüş doğruluğu veya hareketli nesne sağlamlığı testi değildir. SLAM değerlendirmesi yörünge hatalarını, zamanlama hizalamasını ve başarısız aralıkları ekler. Yakınsamanın neden tek bir artık değerle özetlenemeyeceğini görmek için önce yalnızca başlangıç açısını değiştirin.
Aynı hesaplamayı yerel olarak çalıştırın
Tam çalıştırılabilir kaynak ZIP dosyasını çıkarın veya deney giriş noktasını, oluşturulan çekirdekleri ve orijinal PID kaynağını tek bir klasöre kaydedin. PID, Python standart kütüphanesini kullanır; Kalman ve ICP, NumPy gerektirir. Orijinal şekil oluşturma komutları kullanılabilir durumda kalır.
python3 -m pip install numpy==1.26.4
python3 experiment.py icp --parameters '{"case":"good_init","threshold":0.5}' > result.json
bad_init, outliers ve symmetric_ring'i deneyin. Aykırı değerler için 10 ve 0,5 eşik değerlerini karşılaştırın. Halkanın, sıfıra yakın artık değerle bile 90 derecelik bir dönüş hatasını koruyabildiğini doğrulayın.
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.
Yorumlar
Lütfen önce giriş yapın.
Henüz veri yok.