Kanca
Bir yolun iki ucu da çarpışmasız olsa bile, ARADAKİ kısım bir engelin içinden geçebilir — ince bir engeli "atlayabilirsin". Bu ders, planlama motorunun bunu nasıl engellediğini anlatıyor.
Ya şunu denesen? Bir engelin boyutunu iki katına çıkarsan planlayıcılar hâlâ yol bulur mu?
Nasıl hesaplandı?Tablodaki yol uzunluğu, ham (x, y) nokta dizisinin toplam mesafesidir — dizinin kendisi burada.
Her algoritmanın döndürdüğü PlanResult.path, ardışık (x, y) noktalarından oluşur; yukarıdaki tablonun “Yol uzunluğu” sütunu bu dizideki ardışık noktalar arası mesafelerin toplamıdır (pathLength, lib/robotics/planners).
Ne oldu
lib/robotics/collision.ts iki farklı testi ayırır:
Nokta testi (isPointFree) — tek bir konfigürasyonun serbest olup
olmadığını kontrol eder. Küre için merkeze uzaklık, kutu için üç eksenin
HEPSİNDE yarı-genişlik karşılaştırması (yukarıda gördüğün kutu engel tam
bunu kullanıyor).
Segment testi (isSegmentFree) — iki nokta arasındaki YOLUN tamamının
serbest olduğunu kontrol eder. Ama sonsuz sayıda ara nokta test edilemez;
bunun yerine segment sabit bir resolution değerine göre örneklenir:
adım sayısı = round(mesafe / resolution)
Her adımda ara nokta hesaplanıp isPointFree ile test edilir. Bu, hacim
testi değil — ince ve hızlı hareket eden bir engel, örnekleme
aralıklarının arasından "sızabilir" (çözünürlük yeterince küçük değilse).
A* için resolution ızgara hücresiyle aynı olduğundan bu risk yoktur
(her hücre zaten tek tek test edilir); RRT/RRT* için ise segmentResolution
parametresi bu riski kontrol eder — küçültmek doğruluğu artırır ama
hesaplamayı yavaşlatır.
Gerçek dünyada
Endüstriyel offline programlama yazılımları, bir hareket komutunu robota göndermeden önce TÜM yörünge boyunca (sadece başlangıç/bitiş değil) çarpışma simülasyonu çalıştırır — tam bu segment testinin çok daha yüksek çözünürlüklü ve gerçek 3B mesh'lerle yapılan hali. İnce parçalar (bir kaynak teli, bir sensör kablosu) için çözünürlük özellikle sıkı tutulur, çünkü kaba bir örnekleme onları atlayabilir.
Dene
Sahnedeki küre engeli iyice küçültemezsin (boyutu sabit) ama ona çok yakın, dar bir geçitten geçen bir yol zorla: başlangıç ve hedefi kürenin hemen iki yanına denk gelecek şekilde hayal ederek engeller ekle. A*'ın bu dar geçidi bulup bulamadığını gözlemle — ızgara çözünürlüğü (0.05 birim) geçitten daha genişse ne olur dersin?
Şimdi formülü kâğıt üstünde uygula: adım sayısı = round(mesafe / resolution).
2,0 metrelik bir segmenti önce resolution = 0,5 m ile, sonra
resolution = 0,1 m ile örneklersen kaç adım test edilir?
Kaynak kodu: isPointFree / isSegmentFree
Sonraki
Nokta ve segment testlerinin planlayıcılar tarafından NASIL kullanıldığını gördün. Sıradaki ders, bu testleri kullanan üç farklı örneklemeli yöntemi (RRT, RRT*, PRM) karşılaştırıyor.