6

私は、ロボットがオブジェクトへの道を見つけ、そのオブジェクトに行くときにいくつかの障害を回避しなければならないプロジェクトに取り組んでいます。

問題は、ロボットとロボットが拾う必要のあるオブジェクトの両方が、パスファインダー内で 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

4

3 に答える 3

3

オブジェクトの近くのピクセルにグラデーション コストを追加することを検討しましたか?

おそらく、線形グラデーションと同じくらい単純なものです。

C = -mx + b

ここで、x は最も近いオブジェクトまでの距離、b は境界のすぐ外側のコスト、m はコストが減少する割合です。もちろん、C が負の場合は 0 に設定する必要があります。

おそらく単純な双曲線崩壊

C = b/x

ここで、b は境界のすぐ外側にある目的のコストです。一定の最低点に達したら、カットオフを 0 にします。

または、指数関数的減衰を使用できます

C = k e^(-hx)

ここで、k はスケーリング定数、h は減衰率です。繰り返しますが、カットオフを持つことは賢明です。


2番目の提案

A* をピクセル マップ マップに適用したことはありません。ほとんどの場合、タイル。

タイルの「解像度」を大幅に下げてみてはいかがでしょうか? おそらく、10 x 10 または 20 x 20 のピクセル セットごとに 1 つのタイルです。タイルのコストは、タイル内のピクセルの最高コストです。

また、A* に使用している最短距離ヒューリスティックの価値を下げてみることもできます。

于 2010-06-18T20:41:24.840 に答える
3

ロボットのサイズを考慮して、障害物を大きくしてみてください。ブロックの問題に対処するために、障害物の角を丸くすることができます。その場合、埋められた隙間は小さすぎて、ロボットが押し込むことはできません。

于 2010-06-19T15:43:27.203 に答える
2

私はそのような物理的なロボットを 1 つ作りました。私の解決策は、左折と右折があるときはいつでも一歩後退することでした。

代替テキスト

赤い線は、私があなたの問題を理解しているとおりです。黒い線は、問題を解決するために私がしたことです。ロボットは、1 歩後退してから右に曲がることができます。

于 2010-06-18T11:08:08.390 に答える