Kanca
Bir robota "şu noktaya git" demek kolay. Zor olan kısım, gitmesi YASAK olan noktaları tanımlamak — ve robotun bunu her adımda, saniyede binlerce kez kontrol etmesi.
Ya şunu denesen? Bir engelin boyutunu iki katına çıkarsan planlayıcılar hâlâ yol bulur mu?
Ne oldu
lib/robotics/collision.ts içindeki isPointFree fonksiyonu tam olarak
bu kontrolü yapar: bir nokta verildiğinde, sahnedeki her engeli tek tek
kontrol eder.
- Küre engel: noktanın engelin merkezine olan mesafesi yarıçaptan küçük veya eşitse, nokta engelin içindedir.
- Kutu engel: noktanın her ekseninde (x, y, z), merkeze olan mesafenin o eksendeki yarı-genişlikten küçük veya eşit olması gerekir — üçü BİRDEN sağlanırsa nokta kutunun içindedir.
A*, ızgaradaki her hücreyi bu fonksiyonla test eder; sonuç "hayır, burada engel var" ise o hücreyi hiç değerlendirmez. Yukarıdaki sahnede eklediğin her engel, aslında arka planda bu iki kontrolden birine dönüşüyor.
Gerçek dünyada
Endüstriyel robot hücrelerinde çok daha karmaşık şekiller (gerçek 3B mesh'ler) üzerinden yapılır, ama temel fikir aynıdır: "bu nokta/segment güvenli bölgede mi?" sorusu her zaman geometrik bir teste indirgenir. Basit şekiller (küre, kutu, silindir) gerçek zamanlı kontrolü hızlı tutmak için tercih edilir — karmaşık bir mesh'i her adımda test etmek çok daha yavaştır.
Dene
Bu sahnede dokunarak eklediğin engellerin hepsi küre — çünkü tek tıklamayla yerleştirilebilen en basit şekil bu. (Kutu engeller de motorda tanımlı, ileri derslerde göreceksin.) Farklı büyüklükte bir "duvar" oluşturmak için art arda birkaç küre yerleştir, aralarında hiç boşluk kalmayacak şekilde bitiştir — A*'ın bunu tek parça bir engel gibi mi yoksa ayrı engeller gibi mi ele aldığını gözlemle.
Sonraki
Şimdiye kadar hep 2 boyutlu bir düzlemde çalıştın. Üniversite seviyesinde bu düzlemin aslında ne temsil ettiğini — konfigürasyon uzayını — ele alacaksın.