Boustrophedon hücre ayrışması, bir ortamı bir boustrophedon yolu ile etkili bir şekilde örtülebilen alanlara alt bölümlere ayırmaktır. Bir trapezoidal ayrışma yapılacaktır ve bir hat süpürme algoritması kullanılarak gerçekleştirilebilir. Bkz. [Choset 2000], Bu web sitesi
veya (tavsiye ederim!) Mark de Berg, et. al, gerekli veri yapıları ve algoritmalarının tam bir açıklaması için.
Choset, Howie. "Bilinen Alanların Kapsamı: Boustrophedon Hücresel Ayrışması" Otonom Robotlar , 2000.
Örneğin, engel kümesini kenarlar ve köşeler olarak düşünün. Diyelim ki çevre özel bir çokgene de bağlı. Aşağıdaki gibi bir şeyimiz var. Bu alanı ayrıştırmak için, her tepe noktası ile en yakın çizgi veya tepe noktası arasına dikey kenarlar ekliyoruz.
Bunu kodda gerçekleştirmek için yalnızca bir çizgi segmenti kesişim testine, sıralı kenar listesine ve sıralı köşe listesine ihtiyacınız vardır.
- vi
- livi
- Her kavşakta yeni bir tepe noktası oluşturun.
Bu yapıldığında, yeni kenarlar ve köşeler kümesi sadece yamukları kapsar. Ama şunu vurgulıyorum, bunu çevrimiçi olarak yapamazsınız (engeller hakkında önceden bilgi sahibi olmadan). Önceden bilgi sahibi olmadan sağlam bir kapsama alanı oluşturmak istiyorsanız, "hata algoritmalarına" bakabilirsiniz. Özellikle, ortamın sınırlı olduğunu varsayarak basit bir algoritma.
Başlangıç konumundan, ortamın sol üst köşesine ulaşıncaya kadar yukarı ve sola hareket edin. İlk önce bir engelle karşılaşırsanız, onun etrafında seyahat etmelisiniz. Bir şeyin etrafı dolaştırılabiliyorsa (çarpma ve taşıma) bir engel olduğunu biliyorsunuz.
Sol üst köşeden, sınırla karşılaşana kadar sağa hareket edin. Sonra aşağı ve sola hareket edin (tüm alanın bir bürokrasisini yapıyoruz).
Sol-sağ çizgideyken ve bir engelle karşılaştığınızda iki seçeneğiniz vardır. (i) Kapsamaya çalıştığımız sol-sağ çizgiye ulaşana kadar dolaşabiliriz, sonra devam edebiliriz. (ii), Engeli aşarak ya da bu duruma tekrar gelene kadar yeni bir sol-sağ çizgiyi döndürebilir ve kaplayabiliriz. Ben açıklayacağım.
Solda, takip etmeye çalıştığımız “çizgiye” dönene kadar engelin etrafında hareket ediyoruz. Sağda, engelin bir tarafındaki (daha küçük) alanı kapatmaya devam ediyoruz.
İlk yöntemin avantajı, etrafta nasıl dolaşacağınıza karar vermeden önce her zaman engeli tamamen haritalamanızdır, böylece daha kısa yoldan gidebilirsiniz. İkinci yöntemin avantajı, engeli aşmak zorunda kalmamanızdır, sadece bulunduğunuz alanı kapsamaya devam edebilirsiniz.
Bunun boustrophedon ayrışmanızı çevrimiçi bir şekilde tanımladığını unutmayın : Engeller arasındaki veya engeller ile sınır arasındaki alanı kaplarsınız .
Ancak bildiğim kadarıyla, ilk yöntemin analiz edilmesi daha kolaydır. Daha karmaşık algoritmalar (BFS gibi), ya ortam sınırsız olduğu için (sonsuza kadar bir sınır aramak için harcamak istemediğiniz için) seçilir ya da temel olarak ortamı bölümlere ayırma yolunda gerçekten kötü bir engel vardır. Bu neden kötü? bu örneğe bakın:
Sağ-sol Hareketli sonra her engeli çizerek üretir yolu her engel arasındaki küçük parçaların çok fazla kapakları. Aslında, küresel yol planlaması olmadan, bu sütunları 1 piksel genişliğinde, tüm ortam kadar yüksek ve 1 piksel aralıklı yerleştirerek ızgara çözünürlüğünüz kadar kötü hale getirebilirsiniz. O zaman her vurduğunuzda engelin etrafında hareket etmelisiniz.
Bu yüzden çevrede nerede olduğunuz hakkında bir fikriniz olup olmadığını veya küresel yol planlaması yapabileceğinizi sordum. Ancak çevrimiçi ve çevrimdışı tartışma ve bunun için en uygun algoritmalar gerçekten istediğiniz şey değil.
Güncelleme: Görüntüleri kaldırmak zorunda kaldım (https değil) ve bunu pratik gerçek dünya uygulamalarında sıklıkla kullanılanı göndereceğim. http://www.cs.cmu.edu/~motionplanning/papers/sbp_papers/integrated1/yamauchi_frontiers.pdf