衝突100%回避の実装


21

私は、ゲーム開発と、私が知っているすべての衝突回避/解像度については、私はそれを学んだと絶対初心者だまたはを通じて、過去の週に、このサイト...私はここに求めているものですので、もし正しい私に躊躇しないでください間違った仮定/誤解に基づいています。明確にするために最善を尽くしましたが、それは主題がまだ私にとって斬新であると言いました。

乗り物

私のゲームでは、自律的に移動する車両があります。それらは3D空間に配置され、その動きは各車両ごとに異なる多くの変数によって管理されます。ここで関心のあるものは主に:

  • 前進のみ。
  • 速度最小と最大の間で変化することができるが、その分ではない(でも近くに)ゼロ。
  • 速度に依存するステアリング半径(速度が速いほど、半径が大きい)
  • 2つの最大加速度(速度の増減に使用)

ゴール

私の目標は、100%正確な衝突回避を実現する何らかのAIを実装することです(つまり、車両が衝突することはありません)。

設計

  • が、私はより多くのAIを持つことのアイデアを好む「オンボード」(すなわち、最終的に照会および/または他の車両へメッセージを送信する、それ自身の「AI回避衝突」を有する各車両)私はでCA AIを実装することも可能です中央レベル(車両へのコマンドのディスパッチ)。
  • ほとんどの場合、車両はあら​​ゆる方向に互いを避けなければなりませんが、特定の状況では、衝突を避けて同じターゲットに向かう必要があります

これまでに見つけたものと行き詰まった場所

このサイトの他の質問で見つけた多くのリンクの中で、特にこれらのリンクを使用していることがわかりました。

  1. プールボール同士の衝突
  2. 不当な衝突回避
  3. 待ち行列

これらの3つのリンクは多くの点で「目を開きました」が、私の場合、その情報をどのように使用するかがすぐにはわかりません。特に記事#2では、衝突を防ぐために「試行」するだけです(ただし、衝突は時々発生します)。記事3では、衝突を防ぐために車両を時々停止する必要があります。

私が気づいたのは、上記のリンクされた衝突回避アルゴリズムが線形速度の「瞬時投影」を使用して、何かが車両の途中にあるかどうかをチェックすることです。私の場合、これで十分なのか、もっと現実的な方法で自分の位置を投影する必要があるのか​​疑問に思っていました(例:右に90°のステアリングに60°いる場合、残りの位置について自分の位置を計算する必要があります曲線の30°、および直線運動を想定)。

最後に、私は特にデッドロックを恐れています。つまり、世界の車両の密度はかなり低くなりますが、特定の数の車両が同じポイントに向かって収束すると、衝突コースにいることに気づいたら、回避操作は不可能になるのではないかと心配しています車両が他の車両と衝突する経路にあるためです。

質問

「目標」に到達するにはどうすればよいですか?もちろん、詳細な説明は大歓迎ですが、外部リソースへのリンクも大いに役立ちます(この問題に最初に取り組んでいるとは思いませんが、おそらくWebの検索に間違ったキーワードを使用しましたか? )

よろしくお願いします!


20
すべての車両を停止させます。100%の回避が達成されました。
マーティンソイカ

2
それらが互いに相対的に停止すれば十分です。つまり、それらはすべて、まったく同じ速度で、まったく同じ方向に移動します。より大きな問題は、可能なすべての構成に対して100%のレートでそれを行うアルゴリズムを達成することは(おそらく)不可能であることです。たとえば、互いにゼロに等しくない最小距離で非常に大きな旋回半径を持ち、最大速度で互いに飛行している2台の車両を考えます。
マーティンソイカ

12
@mac-このアルゴリズムを開発する際に留意すべきことの1つは、It's A Gameです。この問題を解決しようとして時間がかかりすぎる場合は、間違った問題を解決しようとしている可能性があります。困難な状況を検出した場合、特にプレーヤーがそれを見ることができない場合、チートすることができます-車両を移動するか、その取り扱いルールに違反します。あなたが思いつくどんな車両取り扱いルールでも、退屈に見えないことを確認してください。それは正しいことよりも楽しいことの方が重要です。
フリップ

3
@macまあ、おそらくA *でグローバルコントローラを使用するでしょう。このソリューションから遠ざかることを望んでいたことは承知していますが、車両のグローバルビューを備えており、パスを事前に計算できるため、より意味があります。また、車両に優先順位を付けることもできます(ターゲットに最も近い車両がより高い優先順位を取得するため、パスは変更されず、他のルートは再ルーティングされます)。
ジョナサンコネル

6
@Flipフライトシミュレーターは依然としてゲームと見なされますが、「ごまかした」場合、これを実現したプレーヤーはゲームを中断します。
ジョナサンコネル

回答:


5

群れアルゴリズムを検討しましたか?あなたの説明を見ると、それが私に思い浮かぶことです。これに関する記事はたくさんありますが、ここに私が好きなものがあります。結束のような群れのすべての側面を使用することはないでしょう。ほとんどの側面は、アライメントや分離など、あなたがしようとしていることに役立ちます。どちらも衝突を避けるのに役立ちます。群れとは少し違うものになりますが、始めるのに役立つはずです。

がんばろう!


2
ここでの関連検索用語はBoidsです。しかし、私はこれがOPが探していたものではないと思います-それは彼が車をあらゆる方向に行きたいと思っているようです。
BlueRaja-ダニーPflughoeft

フロックとは、AIがお互いの衝突を回避することです。
マットジェンセン

OPは、信頼できる衝突回避を求めています。力に基づくモデルには厳しい制約が組み込まれていないため、フロッキングは保証されません。群れは確実にトピックに入るための良いエントリーポイントですが、答えは見当違いです。代わりにOPが「速度の障害」を探すことをお勧めします。
トビアスグルダン

@TobiasGurdanあなたがより適切な答えを持っているなら(そしてあなたがそうすることに同意します)、あなたは答えを作成するべきです。
マイケルハウス

3

アプローチは次のとおりです。すべての車両には、最終的に車両が減速してループに入る短い投影経路があり、これらの経路は重複しない場合があります。車両が減速するように設定されているポイントに到達するたびに、既存のいずれにも重ならない新しいパスを生成しようとします。それが不可能であると判断された場合、車両は指定された経路を継続し、定期的に新しい経路の作成を再試行します。

この方法は、ループにつながるパスを相互にオーバーラップさせ、衝突が発生しないと判断できる場所でループさせることにより、トラフィックをよりタイトにすることができます。


0

各車両に、それ自体の周囲で半径方向の検索を実行するメソッドを用意します。この半径内に他の車両がある場合、好みに合った方法で移動します:1)反対のベクトルに移動、2)減速、3)スピードアップなど

組み合わせを行うこともできます。他の車両のベクトルが真っ直ぐでも真後ろでもない場合:離れます。それ以外の場合、それがまっすぐ進んでいる場合:スローダウン。それ以外:スピードアップ。


0

私の目標は、100%正確な衝突回避を実現する何らかのAIを実装することです(つまり、車両が衝突することはありません)。

これが可能であれば、今では世界中のすべての航空機に搭載されていたでしょう。

「自律的な」側面を緩和し、2台(またはそれ以上)の車両間の予測される衝突を解決する機能を持つことをお勧めします。ランダムに新しい方向に移動して問題が解決するかどうかを確認するのと同じくらい単純ですが、重要なことは、両方の車両に適した合意に達したときにのみ関数が戻ることです。

また、近い将来に衝突すると予測される車両は、同じ先読み距離を維持しながら速度を低下させることをお勧めします。これにより、実際の生活と同様に、衝突を回避する機会が車両に与えられます。


彼は宇宙のルールを設計しているので、それは絶対に可能です。実世界は明らかにもっと複雑ですが、実世界の航空機は衝突回避技術のトンを使用していると確信しています...
BlueRaja-Danny Pflughoeft

0

群衆シミュレーションは、あなたが達成しようとしているものに最も関連するトピックかもしれないと私には聞こえます。UNCのGAMMAグループには、このテーマに関する多くの作業があり、検討する価値があります。彼らの説明:

群衆とマルチエージェントのシミュレーションは、それぞれが1つの環境で相互作用する多数の人々、クリーチャー、またはその他のキャラクターをシミュレートするプロセスです。これらのアクターは、目標に向かって動き、環境と対話し、相互に応答することが期待されます。群衆シミュレーションには、建築計画の改善、トレーニング環境と仮想現実の強化、ゲームや映画での人工知能(AI)キャラクターの駆動など、多くの用途が あります。私たちのグループは、高速で保証された衝突回避、リアルタイムの経路とモーションの計画、群集の流れ、誘導行動など、群衆シミュレーションの多くの問題に取り組んできました。

http://gamma.cs.unc.edu/research/crowds/


-1

100%の回避方法はないと思いますが、車両が完全な世界情報を持っている場合、各車両をその長さが速度に依存するボックスに入れて、それらのボックスで衝突チェックを実行できます。実際に衝突がある場合は、衝撃(または2つのボックス間の衝突面積)に応じた強さで操縦し、ダウを遅くします(ただし、回避操作中はボックスを同じ長さに保ちます)。

車両が完全な情報を持っていない場合、これは明らかに機能しませんが、この場合、100%の回避を保証するものは何もありません(既に述べたように、平行移動を除く)

ここで説明されているいくつかのメソッドは、おそらくこれが役立つでしょう。特に、非整列衝突回避ステアリング動作

よろしく


1
元の質問を読みましたか?お勧めのリンクは既に質問にあります
...-bummzack
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.