私は、ロボットがオブジェクトへの道を見つけ、そのオブジェクトに行くときにいくつかの障害を回避しなければならないプロジェクトに取り組んでいます。
問題は、ロボットとロボットが拾う必要のあるオブジェクトの両方が、パスファインダー内で 1 ピクセル幅であることにあります。実際には、それらははるかに大きいです。多くの場合、A* パスファインダーは、障害物の端に沿ってルートを配置することを選択します。これにより、障害物と衝突することがありますが、これは望ましくありません。
障害物に歩行不可能なフィールドを追加しようとしましたが、常にうまくいくとは限りません。それでも障害物と衝突し、歩けない場所にあまりにも多くのポイントを追加すると、実行できるパスがなくなります。
この問題について何をすべきかについて何か提案はありますか?
編集:
そこで、ジャスティン L が提案したように、障害の周りに多くのコストを追加して、次のようにしました 。
ここでは、障害物周辺のコストを確認できます。最初は、中央の 2 つの障害物がコーナーの障害物と同じように見えるはずですが、パスファインダーを実行すると、コストが上書きされているように見えます。
パスを持つグリッド http://sogaard.us/uploades/1_map_grid.png
写真で見つかったものを示す写真 http://sogaard.us/uploades/2_complete_map.png
上の写真は、写真で見つかったものを示しています。
見つかったパス http://sogaard.us/uploades/3_path.png
これは、私たちの問題が以前にもあったように、障害を抱えていることがわかった道です。
http://sogaard.us/uploades/4_mg_path.png 上のパスを含む前のグリッド
そして、パスがオンになっているコスト マップの別の写真。
私が奇妙に思うのは、なぜ A* パスファインダーがこれらの非常に高いフィールド コストを無効にしているのかということです。
開いているリスト内のノードを現在のフィールドで評価して、現在のフィールド パスが開いているリスト内のパスよりも短いかどうかを確認するときでしょうか?
そして、パスファインダーに使用しているコードは次のとおりです。
Pathfinder.cs: http://pastebin.org/343774
Field.cs および Grid.cs: http://pastebin.org/343775