Die Zersetzung von Boustrophedon-Zellen unterteilt eine Umgebung einfach in Bereiche, die durch einen Boustrophedon-Pfad effizient abgedeckt werden können. Eine trapezförmige Zerlegung ist ausreichend und kann unter Verwendung eines Zeilenabtastungsalgorithmus durchgeführt werden. Siehe [Choset 2000], Diese Website
oder (ich empfehle!) Das ausgezeichnete Buch "Computational Geometry" von Mark de Berg, et. Für eine vollständige Beschreibung der erforderlichen Datenstrukturen und Algorithmen.
Choset, Howie. "Abdeckung bekannter Räume: Die Zersetzung von Boustrophedon-Zellen" Autonomous Robots , 2000.
Betrachten Sie beispielsweise die Menge der Hindernisse als Kanten und Scheitelpunkte. Angenommen, die Umgebung wird auch von einem speziellen Polygon begrenzt. Wir haben so etwas wie das Folgende. Um diesen Raum zu zerlegen, fügen wir einfach vertikale Kanten zwischen jedem Scheitelpunkt und der nächsten Linie oder dem nächsten Scheitelpunkt hinzu.
Um dies im Code zu erreichen, benötigen Sie nur einen Schnittpunkttest für Liniensegmente, eine sortierte Liste von Kanten und eine sortierte Liste von Scheitelpunkten.
- vich
- lichvich , die bis zur ersten Kante oder dem ersten Scheitelpunkt, den sie schneidet, verlängert wird
- Erstellen Sie an jeder Kreuzung einen neuen Scheitelpunkt.
In diesem Fall werden in der Menge der neuen Kanten und Eckpunkte nur Trapezoide eingeschlossen. Ich betone jedoch, dass dies nicht online möglich ist (ohne vorherige Kenntnis der Hindernisse). Wenn Sie ohne Vorkenntnisse eine solide Berichterstattung durchführen möchten, sollten Sie sich "Fehleralgorithmen" ansehen. Insbesondere ist hier ein einfacher Algorithmus unter der Annahme, dass die Umgebung begrenzt ist.
Bewegen Sie sich von der Startposition nach oben und links, bis Sie die obere linke Ecke der Umgebung erreichen. Wenn Sie zuerst auf ein Hindernis stoßen, müssen Sie es umfahren. Sie wissen, dass etwas ein Hindernis ist, wenn es umfahren werden kann (Stoßen und Bewegen).
Bewegen Sie sich von links oben nach rechts, bis Sie auf die Grenze stoßen. Bewegen Sie sich dann nach unten und links (wir machen eine Boustrophedon des gesamten Raums).
Wenn Sie sich auf einer Linie von links nach rechts befinden und auf ein Hindernis stoßen, haben Sie zwei Möglichkeiten. (i) Wir können umrunden, bis wir die Links-Rechts-Linie erreichen, die wir abdecken wollen, und dann weitermachen. (ii), Wir können uns umdrehen und eine neue Links-Rechts-Linie abdecken, bis wir uns am Hindernis vorbei finden oder wieder in dieser Situation enden. Ich werde es veranschaulichen.
Links bewegen wir uns um das Hindernis herum, bis wir zu der "Linie" zurückkehren können, der wir folgen wollten. Rechts fahren wir fort, den (kleineren) Bereich auf der einen Seite des Hindernisses abzudecken.
Der Vorteil der ersten Methode besteht darin, dass Sie das Hindernis immer vollständig abbilden, bevor Sie eine Entscheidung darüber treffen, wie Sie es umgehen möchten. Auf diese Weise können Sie den kürzeren Weg einschlagen. Der Vorteil der zweiten Methode ist, dass Sie das Hindernis überhaupt nicht umgehen müssen. Sie können einfach den Bereich abdecken, in dem Sie sich befinden.
Beachten Sie, dass dies Ihre Boustrophedon-Zersetzung online definiert : Sie decken den Bereich zwischen den Hindernissen oder zwischen den Hindernissen und der Grenze ab.
Soweit ich weiß, ist die erste Methode jedoch einfacher zu analysieren. Die komplizierteren Algorithmen (wie BFS usw.) werden entweder ausgewählt, weil die Umgebung unbegrenzt ist (Sie möchten nicht für immer nach einer Grenze suchen), oder es gibt ein wirklich unangenehmes Hindernis in der Art und Weise, in der die Umgebung grundsätzlich partitioniert wird. Warum ist das so schlimm? schau dir dieses Beispiel an:
Wenn Sie sich von links nach rechts bewegen und dann jedes Hindernis umkreisen, entsteht ein Weg zwischen den einzelnen Hindernissen zu viele Abdeckungen der kleinen Teile. In der Tat können Sie dies ohne globale Pfadplanung so schlecht wie die Auflösung Ihres Rasters machen, indem Sie diese Spalten 1 px breit, so hoch wie die gesamte Umgebung und 1 px voneinander entfernt platzieren. Dann müsstest du dich jedes Mal um das Hindernis bewegen, wenn du es triffst.
Aus diesem Grund habe ich Sie gefragt, ob Sie eine Vorstellung davon haben, wo Sie sich in der Umgebung befinden oder ob Sie eine globale Pfadplanung durchführen können. Aber die Online- gegen- Offline- Diskussion und die optimalen Algorithmen dafür sind nicht das, was Sie wirklich wollten.
Update: Ich musste die Bilder entfernen (nicht https) und werde dies veröffentlichen, was häufig in praktischen Anwendungen verwendet wird. http://www.cs.cmu.edu/~motionplanning/papers/sbp_papers/integrated1/yamauchi_frontiers.pdf