Robotum Kaygan Zemini Tanıyabilir mi? Ölçtüm, Cevap Sekiz Saniye Geç Geldi
Bir hafta önce, kayma dedektörümün tekerlekleri boşa dönen sıkışmış bir robotla düzgün giden bir robotu ayırt edemediğini yazmıştım. O başarısızlıktan makul bir öneri çıkmıştı: kaymayı sürekli kestirmeyi bırak, onun yerine zemini tanı. Hangi yüzeydeysen ona uygun bir hız seç, kaygan yamada yavaş, tutuşlu zeminde normal. Sürekli bir olasılık yerine iki ayrı mod.
Bu yazıda o önerinin ön koşulunu ölçüyorum: robot, hangi yüzeyde olduğunu elindeki sensörlerden anlayabiliyor mu? Üç ayrı sınav kurdum ve üçünü de sırayla göstereceğim. Sonuç beklediğim gibi çıkmadı. Bilgi veride vardı; sorun bilginin ne zaman geldiğiydi.
Önce Etiketi Düzeltmek Gerekti: Kayma Bir Olay, Zemin Bir Durum
Eski etiketimin adı is_slippingti ve şu soruyu cevaplıyordu: "şu anda
tutuşu kaybediyor muyum?" Bu bir olay, bir an sürüyor. Oysa "hangi
yüzeydeyim" sorusu bir durum ve dört metre boyunca sürüyor. Tek etiket
iki soruya birden hizmet edemez, ben de bir süre durumu incelemek için olay etiketini
kullanmışım.
Bunun için deneyi değiştirdim. Artık her örneğin yanına robotun yer gerçeği konumu yazılıyor ve etiket, o konumun yama sınırlarının içinde olup olmadığından geliyor. Sınırları da elle yazmıyorum, betik dünya dosyasından okuyor; böylece dünya değişirse etiket kendiliğinden düzeliyor.
Bunu kurarken hoş bir şey fark ettim: dünyalar zaten ihtiyacım olan şeydi. Her dünya tutuşlu zeminden oluşuyor, 2.5 metre ile 6.5 metre arasında dört metrelik düşük sürtünmeli bir yama var, sonra yine tutuş. Yani her koşum iki yüzeyden de geçiyor. Yeni bir dünya kurmama gerek yokmuş, elimdekini doğru okumam gerekiyormuş.
Deneyin Künyesi
| Dünya | Yama sürtünmesi | Örnek | Yamada geçen örnek | Kaygan etiketli oran |
|---|---|---|---|---|
| slip_mu02 | 0.02 | 867 | 616 | 0.710 |
| slip_mu05 | 0.05 | 867 | 615 | 0.709 |
| slip_mu12 | 0.12 | 867 | 397 | 0.000 |
| slip_mu20 | 0.20 | 867 | 405 | 0.000 |
Buradaki "kaygan" şu demek: robot yamada ve yamanın sürtünmesi 0.05 ya da altında. Bu sınır keyfi değil, daha önceki bir taramada yavaşlamanın karşılığını verdiği yer orası çıkmıştı. Sürtünmesi 0.12 ve 0.20 olan iki dünya sınıflandırmaya yalnızca negatif örnek veriyor, yani "burası kaygan değil" örneği.
Robotun elindeki sensörler tekerlek enkoderleri ve bir IMU. Bunlardan on üç öznitelik türetiliyor; çoğu tekerlek ivmesi ile gövde ivmesi arasındaki artığa dayanıyor. Bu ayrıntı sonda önemli olacak.
Birinci Sınav: Model Hiç Görmediği Zeminde Ne Yapıyor?
Yöntem basit: bir zemini dışarıda bırak, üç dünyayla eğit, dördüncüsünde test et. Böylece model kendisine sorulan sürtünme değerini hiç görmemiş oluyor. Karşılaştırma ölçütü de çoğunluk taban çizgisi, yani "hiç sensöre bakmadan hep aynı cevabı ver" stratejisi.
| Dışarıda bırakılan | Model doğruluğu | Çoğunluk | Kazanç |
|---|---|---|---|
| 0.02 | 0.448 | 0.710 | −0.263 |
| 0.05 | 0.409 | 0.709 | −0.300 |
| 0.12 | 0.897 | 1.000 | −0.103 |
| 0.20 | 0.844 | 1.000 | −0.156 |
İlk iki satır kötü. Kaygan dünyalarda model, hiçbir sensöre bakmadan her örneğe "kaygan" diyen bir stratejinin 26 ve 30 puan altında kaldı. Alttaki iki satırda çoğunluk zaten 1.000 olduğu için oradaki kazanç yapısal olarak en fazla sıfır çıkabilir; o yüzden onlar başarısızlık hakkında bilgi taşımıyor. Sonuç ilk iki satır.
İkinci Sınav: Sorun Modelde mi, Veride mi?
Bu noktada üç ayrı teşhis var ve üçü üç ayrı aya mal olur: model ailesi yanlış olabilir, eğitim verisi az olabilir, ya da aranan bilgi sensörlerde hiç olmayabilir. Bunları ayıran ucuz bir sınav var, ben buna tavan sınavı diyorum. Modeli, test zeminini de içeren veriyle eğitiyorsun ve skoru okuyorsun. Çıkan sayı, taşıma bedava olsaydı bu öznitelik kümesinin ulaşabileceği en iyi nokta.
Bunu dört ayrı öznitelik penceresiyle koştum. Pencere, özniteliklerin kaç saniyelik geçmişe bakarak hesaplandığı. Çoğunluk taban çizgisi bu tabloda 0.645.
| Öznitelik penceresi | Tavan doğruluk | Tavan kazancı | Görülmemiş zeminde ortalama kazanç |
|---|---|---|---|
| ham, 0.2–1.5 s | 0.727 | +0.082 | −0.205 |
| 2 s | 0.785 | +0.140 | −0.232 |
| 5 s | 0.855 | +0.210 | −0.181 |
| 10 s | 0.867 | +0.222 | −0.212 |
Tablodan iki şey birden okunuyor. Birincisi iyi haber: veride bir durum sinyali var ve pencere uzadıkça büyüyor, taban çizgisinin 8 puan üstünden 22 puan üstüne çıkıyor. İkincisi kötü haber: hiçbir pencerede yeni zemine taşınmıyor, son sütun her satırda negatif. Yani sinyalin gerçek olan kısmı yavaş bir kısım.
Üçüncü Sınav: Cevap Ne Zaman Geliyor?
Yavaş sinyal, çevrimdışı bir sınıflandırıcıda sorun değil. Ama bu model bir politikayı sürecek ve politikanın robot hâlâ yamadayken karar vermesi gerekiyor. Hesap şöyle: yama dört metre, komut edilen hız 0.4 m/s, yani temiz bir geçiş yaklaşık on saniye sürüyor.
Aşağıdaki tablo, beş saniyelik pencereli modelin görülmemiş zemindeki davranışı. Yumuşatma ve histerezisten sonraki hâli, yani politikanın gerçekten tüketeceği biçim.
| Dünya | Yamanın kapsanan kısmı | Kararın gecikmesi | Yama dışında yanlış alarm |
|---|---|---|---|
| 0.02 | %51 | 8.3 s | %0 |
| 0.05 | %22 | 13.2 s | %0 |
| 0.12 | yok | yok | %7 |
| 0.20 | yok | yok | %28 |
On saniyelik bir geçişte model kararını 8.3 saniyede veriyor. 0.05 dünyasında 13.2 saniye, yani geçişin kendisinden uzun.
Yüzde 51'lik kapsama göründüğünden iyi değil, iki sebeple. Birincisi iki komut profilinin ortalaması: sürekli koşumda yüzde 30, dur-kalk koşumunda yüzde 71. İkincisi daha can sıkıcı: koşumun kapsanabilmesinin bir sebebi robotun orada sıkışıp kalması, yani temiz bir geçişin süreceğinden çok daha uzun süre yamada olması. Dedektöre verilen zaman, robotun halihazırda ne kadar kötü battığıyla birlikte artıyor. Bir denetleyicinin isteyeceği şeyin tersi.
Gecikme yumuşatmanın yan etkisi de değil, çünkü hiç pencere kullanmadan, ham özniteliklerle ölçtüğümde 8.0 saniye çıktı. Kapsamayı artırmak da bedava değil: 0.20 dünyasında aynı ayarlar yama dışında zamanın yüzde 28'inde tetikleniyor. Yani kusursuz tutuşlu bir zeminde robot dörtte bir oranında sebepsiz yavaşlıyor.
Peki Hızlı Kısım Neden Yok?
Sebep öznitelik tanımlarının içinde. Öznitelikler türev tabanlı, çoğu tekerlek ivmesi ile gövde ivmesi arasındaki artık. Şimdi iki duruma bakalım:
| Öznitelik | Sıkışmış robot | Düzgün giden robot | Cohen d |
|---|---|---|---|
| wheel_speed | 0.4000 | 0.3999 | +0.07 |
| wheel_accel_abs | 0.0000 | 0.0118 | −0.20 |
| resid_signed_long | 0.0334 | −0.0013 | +0.56 |
| gyro_std | 0.0002 | 0.0002 | −0.04 |
Sabit tekerlek hızıyla sıkışan robotta ivme her yerde sıfır. Sabit hızla giden robotta da her yerde sıfır. On üç özniteliğin en iyisinin etki büyüklüğü 0.56, ki zayıf sayılır, ve o öznitelikle iki durumu ayırma başarısı 0.552 dengeli doğruluk. Yazı tura 0.500 veriyor.
Bu, kayma tespitinin başlangıçta neden işe yaramış göründüğünü de açıklıyor: o, yamaya giriş anındaki geçici olayı yakalıyordu. Geçiş gözlenebilir bir şey, durum değil. Politikanın ihtiyacı olan ise durum, üstelik ilk saniyede.
Uyarı: Bu Sayılar Bozuk Bir Düzenekte Ölçüldü
Bu ölçümden iki gün sonra robotumun çalışma boyunca 13.3 derece burnu aşağı durduğunu ve gövdesinin ön kenarını zemine sürttüğünü buldum. İncelediğimi sandığım kaymayı üreten şey o sürtünmeydi. Yukarıdaki her şey o düzenekte ölçüldü ve bulundukları bölüm sonuç dosyamda geçersiz işaretli. Sayıları sessizce yeniden kullanmak yerine neyin ayakta kaldığını açık yazayım.
Ayakta kalan: yapısal argüman düzeneğe bağlı değil. Sabit hızdaki iki durum aynı türevi verir, bu aritmetik ve robotun düz olması onu değiştirmez.
Ayakta kalmayan: sayılar. 0.552, 8.3 saniye, tavan eğrisi. Hepsi eğik bir robotta ölçüldü ve yeniden koşulmadan düz robot için alıntılanamaz.
Yeniden ölçülen bir komşu sonuç var: düzeltilmiş düzenekte, 0.02 sürtünmeli iki derecelik rampada EKF, 6.852 metrelik odometri hatasının 0.009 metresini düzeltiyor, yani yüzde birin onda biri kadar. Düzeltmeden önce aynı karşılaştırma 4.11 metrenin 13 milimetresiydi, yüzde üçte bir. Düzenek değişti, cevap değişmedi: tekerlek odometrisini IMU ile kaynaştırmak kayma hatasını onarmıyor, çünkü iki kanal da kaymayı görmüyor.
Sırada bekleyen: gözlenebilirlik sınavının rampada tekrarı. Orada farklı bir cevap bekliyorum ve koşmanın sebebi de bu. Eğimde sıkışan robotta ivmeölçerdeki yerçekimi bileşeni ile tekerlek-gövde uyuşmazlığı birlikte değişiyor; düz zeminin sunmadığı bağlaşım tam olarak buydu.
Bundan Sonra Modeli Suçlamadan Önce Yaptığım Üç Sınav
1. Tavan sınavı. Modelin test zeminini görmesine izin ver ve skoru oku. Tavan çoğunluk taban çizgisinde duruyorsa bilgi sensörlerde yoktur; hiçbir mimari onu oraya koyamaz, sensör eklemek gerekir.
2. Taşıma sınavı. Tavan yüksek ama dışarıda bırakılan zeminde performans negatifse sorun taşımadadır. O zaman daha fazla zemin toplamak ya da daha iyi değişmezlikler aramak bir aya değer.
3. Karar zamanı sınavı. Bende olmayan sınav buydu ve bu fazı bitiren de bu oldu. Doğruluk bütün bir koşum üzerinden hesaplanıyor, oysa denetleyici cevabı tek bir anda tüketiyor. Sorulması gereken şu: cevap, hâlâ işe yarar olduğu pencereye göre ne zaman geliyor? On saniyelik bir geçişin dokuzuncu saniyesinde haklı çıkan bir sınıflandırıcı, birinci saniyesinde haklı çıkandan biraz daha kötü değil, başka türlü işe yaramaz. Doğruluk artışı bunu onarmıyor.
Sınırlar
Bu çalışma yalnızca simülasyon, tek bir diferansiyel sürüşlü robot, tek bir nominal hız (0.4 m/s) ve etkiyi gerçekçi kılmak için değil ölçülebilir kılmak için seçilmiş sürtünme değerleri. Dünya başına iki komut profili var. Gözlenebilirlik iddiası bu sensör kümesi için, yani tekerlek enkoderi ve IMU için geçerli; başka bir şey taşıyan robot hakkında bir şey söylemiyor. Ve yukarıdaki düzenek uyarısı buradaki her sayı için geçerli.
Kod, geçici patent başvurusu ve dergi değerlendirmesi açık olduğu için özel bir depoda duruyor. Okumak isterseniz yazın, erişim veririm.