A*ナビゲーションを使用する

概要

A*(「Aスター」と発音します)ナビゲーションツールを使用して、タスク実行者の移動障壁を作成できます。A*システムに接続した固定リソースも、直接通過できない障壁として扱われます。タスク実行者があるポイントから別のポイントへ移動する必要がある場合、A*ナビゲータはこれらの障壁と固定リソース周辺の移動しきい値を使用して、2つのポイント間の最短距離を計算します。

このトピックを読む前に、「移動に関する主要な概念」で説明されている概念について理解しておいてください。このトピックでは、A*ナビゲーションの仕組みの大まかな概要について説明します。

このトピックの残りの部分では、A*ナビゲーションシステムの構築に必要なさまざまなタスクの実行方法について説明します。

3DオブジェクトをA*ナビゲータに接続する

モデルにA*ナビゲータを追加したら、それをナビゲーションシステムを使用するすべてのタスク実行者に接続する必要があります。また、タスク実行者が通り抜けられない障壁として扱われるべき固定リソースをモデルに追加する必要があります。

3DオブジェクトをA*ナビゲータに接続するには:

  1. 固定リソース間に入出力ポート接続(A接続)を作成するのと同じ方法で、A*ナビゲータを3Dオブジェクトに接続できます。ツールバーの[オブジェクトを接続]ボタン をクリックして、メニューを開きます。メニューから[オブジェクトを接続]を選択して接続モードをオンにします。
  2. 接続モードになると、マウスポインターはチェーン記号が横に付いたプラス記号に変わります()。
  3. 接続モードになったら、[AStar Navigator]をクリックします。マウスを動かすと、ナビゲータとカーソルの間に黄色の線が表示されます。
  4. 3Dオブジェクトをクリックしてナビゲータに接続します。接続されると、接続されたオブジェクトの下に紫色のスペースが表示されます。
  5. ナビゲータをオブジェクトに接続した後も、接続モードは継続します。接続モードを終了する必要がある場合は、Escを押すか、モデル内の空白部分を右クリックします。それ以外の場合は、必要に応じて引き続きネットワークノードを接続できます。

仕切りと障壁を追加する

タスク実行者が回避して移動するようになる障害を作成するために、3Dモデルに仕切りや障壁を追加できます。次の例に示すように、仕切りは壁のように機能します。

障壁はグリッド内の全エリアを制限することができます。

仕切りを追加する

モデルに仕切りを追加するには:

  1. A*ナビゲーション]グループのライブラリで、仕切りオブジェクトをクリックして仕切り作成モードに入ります。[分割器を作成]モードでは、マウスポインターが[分割器]アイコン に変わります。
  2. シミュレーションモデル内で、仕切りを配置する位置を見つけます。モデル内のその位置をクリックし、マウスポインターを別の方向に動かすと、仕切りの作成を開始します。仕切りの端が、開始位置を基準にして希望するおおよその長さ、角度、半径になるまで、マウスポインターの位置を調整します。マウスをもう一度クリックすると、仕切りの作成が終了します。
  3. 必要に応じて、終点と接続点を動かして仕切りの長さ、角度、または半径を変更できます。
  4. Escを押すか、モデル内の空白部分を右クリックして、[仕切りを作成]モードを終了します。

障壁を追加する

モデルに障壁を追加するには

  1. A*ナビゲーション]グループのライブラリで、障壁オブジェクトをクリックして障壁作成モードに入ります。[障壁を作成]モードでは、マウスポインターが[障壁]アイコン に変わります。
  2. シミュレーションモデル内で、障壁を配置する位置を見つけます。モデル内のその位置をクリックすると、赤いひし形が表示されます。マウスポインターを別の方向に動かすと、障壁の作成を開始します。障壁が希望するおおよその長さと幅になるまで、マウスポイントを移動します。マウスをもう一度クリックすると、仕切りの作成が終了します。
  3. 必要に応じて、障壁の赤いサイズ変更矢印をクリックして、障壁の長さまたは幅を変更できます。
  4. Escを押すか、モデル内の空白部分を右クリックして、[障壁を作成]モードを終了します。

バリア移動パターンを定義する

デフォルトでは、障壁は、誰も移動できない堅固な障壁として機能します。ただし、障壁を1つ以上の移動パターンのエリアとして定義することもできます。たとえば、障壁の内側にいる間は移動者が一方向にしか移動できないように障壁を定義できます。もう1つの例として、障壁の右側にいるときは移動者が一方向に、障壁の左側にいるときは反対方向に移動するように障壁を設定できます。

バリア移動パターンを定義するには:

  1. 上記のように障壁を作成します。
  2. 障壁をクリックしてください。いくつかの操作ハンドルが表示されます。
  3. 特定のパターンを定義するには、障壁の中央にある4つの矢印のうち1つ以上をクリックします。これで矢印の色が緑色に変わり、その方向への移動が許可されていることを示します。
  4. 障壁内に複数の別々のパターンエリアを定義するには、障壁の端にあるはさみアイコンをクリックします。これにより、エリアが2つの別々のエリアに分割され、それぞれ中央に独自の4つのパターン矢印が表示されます。次に矢印をクリックして、各エリアの移動パターンを定義します。
  5. パターンエリアのサイズを変更するには、分割線をクリックして移動するか、障壁の端の分割線の上に表示されている赤いサイズ調整矢印を使用します。
  6. 作成されたエリアを削除するには、障壁の端にある統合ボタンをクリックして、隣接する2つのエリアを統合します。

一方向分割器を追加する

仕切りは一方向の仕切りにできます。つまり、タスク実行者は一方向では仕切りを通過できますが、逆の方向には通過できません。一方向の仕切りの上の緑色の矢印は、タスク実行者が移動できる方向を示しています。

一方向の仕切りの追加は、通常の仕切りを追加するのと同じ方法で行います。仕切りを作成したらオブジェクトをクリックし、[クイックプロパティ]で[双方向]のチェックを外します。

移動しきい値のトラブルシューティング

このセクションを読む前に、A*移動しきい値に関する主要な概念を読んで、それらがどのように機能するかを理解しておく必要があります。

A*ナビゲーションで発生する可能性がある最も一般的な問題の1つは、タスク実行者がグリッドの予想外の場所に移動したり、固定リソースに向かって不自然なルートをたどったりすることです。通常、これは障壁や仕切りを超えて広がる移動しきい値の問題が原因となります。

この問題を解決するには:

  1. 3Dモデルの[Star Navigator]をダブルクリックして、[プロパティ]ウィンドウを開きます。
  2. ビジュアル]タブで[移動しきい値を表示]チェックボックスをオンにします。
  3. OK]をクリックして変更を保存し、プロパティウィンドウを閉じます。
  4. シミュレーションコントロールバーで、[リセット]ボタンを押してビジュアルの変更を適用します。
  5. 障壁や仕切りの近くにある固定リソースをクリックして選択します。オブジェクトの計算されたパスゾーン(赤い点)が障壁や仕切りを超えていないことを確認します。次の画像は、赤い点が横の仕切りを超えているオブジェクトの例を示しています。
  6. 赤い点が仕切りまたは障壁の適切な側面に含まれるまで、固定リソースを再配置します。

優先パスを追加する

A*アルゴリズムが、タスク実行者があるポイントから別のポイントに到達するために使用する最も効率的なパスを計算しているとき、優先パスは特定のパスにより大きな重みを与えます。

次の画像は、優先パスが適用される前のタスク実行者の移動パスを示しています。

お分かりのように、タスク実行者はキューからプロセッサに到達するために上位のパスをたどります。代わりに、タスク実行者に低位のパスを選択させたい場合があるかもしれません。優先パスを追加して、そのロジックを作成できます。

優先パスは磁石のように少しだけ機能することに注意してください。タスク実行者は、優先パスがタスク実行者の現在の移動の軌跡に影響するほど十分に近い場合にのみ優先パスを使用します。タスク実行者が近づくと、移動計算に優先パスを組み込み始めます。

前の画像でも、タスク実行者は一方向に移動するときに優先パスのみを使用しています。タスク実行者が両方向に進むように使用するには、反対方向に進む2番目の優先パスを追加する必要があります。

優先パスを追加するには:

  1. A*ナビゲーション]グループのライブラリで、優先パスオブジェクトをクリックして優先パス作成モードに入ります。[優先パスを作成]モードでは、マウスポインターが[優先パス]アイコン に変わります。
  2. シミュレーションモデル内で、優先パスを配置する位置を見つけます。モデル内のその位置をクリックし、マウスポインターを別の方向に動かすと、優先パスの作成を開始します。優先パスの端が、開始位置を基準にして希望するおおよその長さ、角度、半径になるまで、マウスポインターの位置を調整します。マウスをもう一度クリックすると、優先パスの作成が終了します。
  3. Escを押して[優先パスの作成]モードを終了します。
  4. 必要に応じて、終点と接続点を動かして優先パスの長さ、角度、または半径を変更できます。

ブリッジを追加する

ブリッジは、必要に応じてオペレーターが障壁を通過できるようにするために使用できます。シミュレーションの観点では、これは、タスク実行者が階段やその他の種類のブリッジを使用して障壁を越えて移動することを表すことができます。

次の画像は、パスに過剰な障壁を配置してタスク実行者が目的地に到達できないようにした場合に、A*システムで起きることを示しています。

タスク実行者は、目的地に最も近いと思われるポイントに到達すると、到着したと見なされることに注意してください。プロセッサにあまり近くなくても、プロセッサでアイテムをアンロードします。タスク実行者をプロセッサに近づけたい場合は、ブリッジを追加できます。

ただし、今度はタスク実行者が仕切りの反対側に閉じ込められていることに注意してください。ブリッジは一方向にしか動かないため、タスク実行者はトラップされます。この問題を解決するには、別の方向に向かう2つ目のブリッジを追加します。

ブリッジを作成するには:

  1. A*ナビゲーション]グループのライブラリで、ブリッジオブジェクトをクリックしてブリッジ作成モードに入ります。[ブリッジを作成]モードでは、マウスポインターが[ブリッジ]アイコン に変わります。
  2. シミュレーションモデル内で、ブリッジを配置する位置を見つけます。モデル内のその位置をクリックし、マウスポインターを別の方向に動かすと、ブリッジの作成を開始します。ブリッジの端が、開始位置を基準にして希望するおおよその長さ、角度、半径になるまで、マウスポインターの位置を調整します。マウスをもう一度クリックすると、ブリッジの作成が終了します。
  3. Escを押して[ブリッジを作成]モードを終了します。
  4. 必要に応じて、終点と接続点を動かしてブリッジの長さ、角度、または半径を変更できます。

必須パスを追加する

必須パスは、移動者がシステム内の指定されたパスに沿ってのみ移動するよう強制するために使用できます。たとえば、人と無人搬送車(AGV)の両方を含む移動エリアがあるとします。人には通常、指定された移動経路がありませんが、AGVにはこれが必要です。ここでの選択肢の1つは、AGVにはAGVモジュールを使用し、人にはA*を使用することです。ただし、このオプションの問題は、AGVトラフィックは人のトラフィックを認識できず、人のトラフィックはAGVトラフィックを認識できないことです。したがって、オブジェクトは互いの上を走ることがあります。あるいは、A*移動エリアで必須パスを定義し、AGVに必須パスのみを移動するように指示することで、AGVの指定パスをシミュレーションすることもできます。AGVと人が同じA*移動グリッドを共有するため、お互いを認識し回避できるようになります。

必須パスを作成するには:

  1. A*ナビゲーション]グループのライブラリで、必須パスオブジェクトをクリックして必須パス作成モードに入ります。[必須パスを作成]モードでは、マウスポインターが[必須パス]アイコン に変わります。
  2. シミュレーションモデル内で、必須パスを配置する位置を見つけます。モデル内のその位置をクリックし、マウスポインターを別の方向に動かすと、必須パスの作成を開始します。パスの終点が開始位置を基準にして希望するおおよその長さと角度になるまでマウスポインターの位置を調整します。マウスをもう一度クリックすると、ブリッジの作成が終了します。
  3. Escを押して[必須パスを作成]モードを終了します。
  4. 必要に応じて、終点と接続点を動かしてブリッジの長さ、角度、または半径を変更できます。
  5. 必須パスを追加したら、どの移動者が必須パスでのみ移動するかを指定する必要があります。これを行うには、A*ネットワークに追加されているタスク実行者をクリックします。右側の[クイックプロパティ]パネルの[A* Traveler]の下にある[必須パスを使用]チェックボックスをオンにします。

A*表示のオンまたはオフ

A*ナビゲーションシステムを構築し、それが正しく機能することを確認したら、システムの表示をオフにしてモデルのビジュアルを簡潔にすることをおすすめします。A*表示をオフにするには:

  1. 3Dモデルの[Star Navigator]をダブルクリックして、[プロパティ]ウィンドウを開きます。
  2. 必要に応じて[ビジュアル]タブで、すべてのチェックボックスをオフにします。

大規模なタスク実行者を操作する

トランスポーターなどの大きなタスク実行者を使用している場合は、タスク実行者が実際にはA*グリッド上の1つの正方形よりも大きい可能性があることに注意が必要です。FlexSimは、中心点に基づいてタスク実行者がどの正方形にいるのか判断します。移動グリッドのサイズによっては、3Dビジュアルに関して不自然な問題が発生することがあります。

これらの問題は、衝突回避を使用するときに特に明らかになるかもしれません。A*ナビゲータは、移動者が移動している個々の正方形のみに基づいて衝突回避を計算します。つまり、移動者のサイズが2つ以上の正方形を占める場合、この余分なサイズは衝突回避メカニズムにより無視され、一部の移動者が重なり合う可能性があることになります。正方形のサイズを小さくして移動を正確にすることと、正方形のサイズを大きくして衝突回避を改善することの間の適切なバランスを決める必要があります。