Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

plannerHybridAStar

ハイブリッド A* パス プランナー

説明

ハイブリッド A* パス プランナー オブジェクトは、非ホロノミック拘束をもつビークルに対し与えられた 2 次元マップで、滑らかなパスを生成します。この手法では、状態変数 (x、y、theta) を使用してビークルの 3D 運動学的状態空間に A* アルゴリズムを適用します。さらに、解析的な Reed-Shepp 拡張を使用して検索速度を向上させます。

MinTurningRadiusForwardCostReverseCost などのプロパティを調整して、接続の動作を変更できます。AnalyticExpansionInterval プロパティを使用して、Reeds-Shepp 接続をチェックするサイクルを設定できます。

メモ

ハイブリッド A* プランナーは、stateValidator オブジェクトの ValidationDistance プロパティに基づいて運動プリミティブと解析的展開を内挿することにより、マップ内で衝突をチェックします。ValidationDistance プロパティが Inf に設定されている場合、オブジェクトは状態バリデーターで指定されているマップのセル サイズに基づいて内挿します。ビークル サイズを考慮して、占有マップをプランナーに割り当てる前にインフレートします。

作成

説明

planner = plannerHybridAStar(validator) は、ハイブリッド A* アルゴリズムを使用してパス プランナー オブジェクトを作成します。validator 入力を、validatorOccupancyMap または validatorVehicleCostmap オブジェクトとして指定してください。validator 入力は、StateValidatorプロパティの値を設定します。

planner = plannerHybridAStar(validator,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して、パス プランナーのプロパティを設定します。プロパティ名はそれぞれ一重引用符 (' ') で囲みます。

プロパティ

すべて展開する

計画用の状態バリデーター。SE(2) 状態空間に基づいて validatorOccupancyMap または validatorVehicleCostmap オブジェクトとして指定します。

生成される運動プリミティブの長さ。'MotionPrimitiveLength' とメートル単位の正のスカラーからなるコンマ区切りのペアとして指定します。大規模なマップやスパースな環境では長さを増やします。密な環境では長さを減らします。

メモ

'MotionPrimitiveLength' は、'MinTurningRadius' に基づく円の円周長の 4 分の 1 を超えることはできません。

データ型: double

ビークルの最小回転半径。'MinTurningRadius' とメートル単位の正のスカラーからなるコンマ区切りのペアとして指定します。

メモ

'MinTurningRadius' の値は、これに基づく円の円周長の 4 分の 1 を 'MotionPrimitiveLength' が超えることができないように設定されます。

データ型: double

生成される運動プリミティブの数。'NumMotionPrimitives' と 3 以上の正の奇数の整数スカラーからなるコンマ区切りのペアとして指定します。

前進方向に移動するためのコスト乗数。'ForwardCost' と正のスカラーからなるコンマ区切りのペアとして指定します。前進運動にペナルティを設定するにはコスト値を増やします。

データ型: double

後退方向に移動するためのコスト乗数。'ReverseCost' と正のスカラーからなるコンマ区切りのペアとして指定します。後退運動にペナルティを設定するにはコスト値を増やします。

データ型: double

運動方向切り替え用の加法コスト。'DirectionSwitchingCost' と正のスカラーからなるコンマ区切りのペアとして指定します。方向切り替えにペナルティを設定するにはコスト値を増やします。

データ型: double

そのインスタンスで使用可能な、コストの最も低いノードから解析的展開を試行する間隔。'AnalyticExpansionInterval' と正の整数スカラーからなるコンマ区切りのペアとして指定します。

ハイブリッド A* パス プランナーは、そのインスタンスで使用可能な最も低いコストのノードから運動プリミティブを展開します。

  • 展開されるノードの数は、両方向で生成されるプリミティブの数とそれらの有効性によって異なり、このサイクルは 'AnalyticExpansionInterval' に達するまで繰り返されます。

  • その後プランナーは、Reeds-Shepp モデルを使用して、ツリーからゴール姿勢に達するための解析的展開を試行します。試行が失敗した場合、プランナーはサイクルを繰り返します。

アルゴリズムのパフォーマンスを上げるには、間隔を短くして、Reeds-Shepp の最終ゴールへの接続のチェック数を増やします。

出力パスにおける内挿された姿勢間の距離。'InterpolationDistance' とメートル単位の正のスカラーからなるコンマ区切りのペアとして指定します。

データ型: double

R2023b 以降

遷移コスト関数。関数ハンドルとして指定します。この値は、ある状態から別の状態に遷移する場合のコストを指定します。既定では、関数 plannerHybridAStar は遷移コスト関数としてユークリッド距離を使用します。カスタムの遷移コスト関数を指定して、遷移コストを計算することもできます。カスタム コスト関数の関数ハンドルは、少なくとも 1 つの入力をもち、1 つの出力を返さなければなりません。出力は、運動プリミティブの前進方向および後退方向の遷移コストを指定するスカラーまたはベクトルにすることができます。

例: planner = plannerHybridAStar(validator,TransitionCostFcn=@(param1)customFcnName(param1));

データ型: function_handle

R2023b 以降

解析的展開のコスト。関数ハンドルとして指定します。既定では、関数 plannerHybridAStar は Reeds-Shepp モデルに基づいて解析的展開を使用します。解析的展開にカスタムのコスト関数を指定することもできます。カスタム コスト関数の関数ハンドルは、少なくとも 1 つの入力をもち、1 つの出力を返さなければなりません。

例: planner = plannerHybridAStar(validator,AnalyticalExpansionCostFcn=@(param1)customFcnName(param1));

データ型: function_handle

オブジェクト関数

plan2 つの姿勢間で障害物のないパスを検索
showVisualize the planned path

すべて折りたたむ

ハイブリッド A* アルゴリズムを使用して、駐車場を通るビークルの衝突のないパスを計画します。

マップの作成と状態バリデーターへの割り当て

駐車場のビークル コストマップでセルのコスト値を読み込みます。

load parkingLotCostVal.mat % costVal

コスト値をもつbinaryOccupancyMapを作成します。

resolution = 3;
map = binaryOccupancyMap(costVal,resolution);

状態空間を作成します。

ss = stateSpaceSE2;

状態空間の範囲を更新してマップ制限と同じにします。

ss.StateBounds = [map.XWorldLimits;map.YWorldLimits;[-pi pi]];

衝突チェック用の状態バリデーター オブジェクトを作成します。

sv = validatorOccupancyMap(ss);

マップを状態バリデーター オブジェクトに割り当てます。

sv.Map = map;

パスの計画と可視化

plannerHybridAStarオブジェクトを状態バリデーター オブジェクトで初期化します。プランナーの MinTurningRadius および MotionPrimitiveLength プロパティを指定します。

planner = plannerHybridAStar(sv, ...
                             MinTurningRadius=4, ...
                             MotionPrimitiveLength=6);

ビークルの開始姿勢とゴール姿勢を [x, y, theta] ベクトルとして定義します。"x""y" は位置をメートル単位で指定し、"theta" は向きの角度をラジアン単位で指定します。

startPose = [4 9 pi/2]; % [meters, meters, radians]
goalPose = [30 19 -pi/2];

開始姿勢からゴール姿勢までのパスを計画します。

refpath = plan(planner,startPose,goalPose,SearchMode='exhaustive');     

関数 show を使用してパスを可視化します。

show(planner)

Figure contains an axes object. The axes object with title Hybrid A* Path Planner, xlabel X [meters], ylabel Y [meters] contains 8 objects of type image, line, scatter. These objects represent Reverse Motion Primitives, Forward Motion Primitives, Forward Path, Path Points, Orientation, Start, Goal.

参照

[1] Dolgov, Dmitri, Sebastian Thrun, Michael Montemerlo, and James Diebel. Practical Search Techniques in Path Planning for Autonomous Driving. American Association for Artificial Intelligence, 2008.

[2] Petereit, Janko, Thomas Emter, Christian W. Frey, Thomas Kopfstedt, and Andreas Beutel. "Application of Hybrid A* to an Autonomous Mobile Robot for Path Planning in Unstructured Outdoor Environments." ROBOTIK 2012: 7th German Conference on Robotics. 2012, pp. 1-6.

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2019b で導入

すべて展開する