Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

plannerRRTStar

オプションの RRT パス プランナー (RRT*) の作成

説明

plannerRRTStar オブジェクトは、漸近的に最適な RRT プランナー (RRT*) を作成します。RRT* アルゴリズムは、状態空間距離について最適なソリューションに収束します。また、そのランタイムは RRT アルゴリズムのランタイムの定数係数です。RRT* は幾何学的プランニング問題を解決するために使用されます。幾何学的プランニング問題では、状態空間から取得された 2 つの任意のランダム状態が接続可能であることが必要です。

作成

説明

planner = plannerRRTStar(stateSpace,stateVal) は、状態空間オブジェクト stateSpace および状態バリデーター オブジェクト stateVal から RRT* プランナーを作成します。stateVal の状態空間は stateSpace と同じでなければなりません。stateSpace および stateValplanner オブジェクトの StateSpace プロパティと StateValidator プロパティも設定します。

プロパティ

すべて展開する

近傍探索半径を推定するために使用される定数。正のスカラーとして指定します。ボール半径が大きくなると、ツリー内のノード数が増えるにつれて探索半径が小さくなる速度が遅くなります。

データ型: single | double

プランナーがゴールに到達後も最適化を続けるかどうかを決定します。false または true として指定します。また、プランナーは、反復の最大回数またはツリー ノードの最大数に到達した場合、このプロパティの値に関係なく終了します。

データ型: logical

プランナーの状態空間。状態空間オブジェクトとして指定します。stateSpaceSE2stateSpaceDubinsstateSpaceReedsShepp などの状態空間オブジェクトを使用できます。nav.StateSpace オブジェクトを使用して状態空間オブジェクトをカスタマイズすることもできます。

プランナーの状態バリデーター。状態バリデーター オブジェクトとして指定します。validatorOccupancyMapvalidatorVehicleCostmap などの状態バリデーター オブジェクトを使用できます。

探索木内の最大ノード数 (ルート ノードを除く)。正の整数として指定します。

データ型: single | double

反復の最大回数。正の整数として指定します。

データ型: single | double

ツリー内で許可される運動の最大長。スカラーとして指定します。

データ型: single | double

ゴールに到達したかどうかを判別するコールバック関数。関数ハンドルとして指定します。独自のゴール到達関数を作成できます。この関数は次の構文に従う必要があります。

 function isReached = myGoalReachedFcn(planner,currentState,goalState)

ここで、次のようになります。

  • planner — 作成されたプランナー オブジェクト。plannerRRTStar オブジェクトとして指定します。

  • currentState — 現在の状態。3 要素の実数ベクトルとして指定します。

  • goalState — ゴールの状態。3 要素の実数ベクトルとして指定します。

  • isReached — 現在の状態がゴール状態に到達しているかどうかを示す boolean 変数。true または false として返されます。

コード生成ワークフローでカスタムの GoalReachedFcn を使用するには、関数 plan を呼び出す前にこのプロパティをカスタムの関数ハンドルに設定する必要があります。このプロパティを初期化後に変更することはできません。

データ型: function handle

状態のサンプリング中にゴール状態を選択する確率。[0,1] の実数スカラーとして指定します。このプロパティは、状態空間から状態をランダムに選択するプロセス中に、実際のゴール状態を選択する確率を定義します。最初は確率を 0.05 などの小さい値に設定できます。

データ型: single | double

オブジェクト関数

planPlan path between two states
copyCreate copy of planner object

すべて折りたたむ

状態空間を作成します。

ss = stateSpaceSE2;

作成された状態空間を使用して、occupancyMap ベースの状態バリデーターを作成します。

sv = validatorOccupancyMap(ss);

例のマップから占有マップを作成し、マップ分解能を 10 セル数/メートルとして設定します。

load exampleMaps.mat
map = occupancyMap(simpleMap, 10);
sv.Map = map;

バリデーターの検証距離を設定します。

sv.ValidationDistance = 0.01;

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

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

RRT* パス プランナーを作成し、ゴール到達後にさらに最適化できます。

planner = plannerRRTStar(ss,sv);
planner.ContinueAfterGoalReached = true;

最大反復回数を削減し、最大接続距離を増やします。

planner.MaxIterations = 2500;
planner.MaxConnectionDistance = 0.3;

開始状態とゴール状態を設定します。

start = [0.5, 0.5 0];
goal = [2.5, 0.2, 0];

既定の設定を使用してパスを計画します。

rng(100, 'twister') % repeatable result
[pthObj, solnInfo] = plan(planner,start,goal);

結果を可視化します。

map.show;
hold on;
plot(solnInfo.TreeData(:,1),solnInfo.TreeData(:,2), '.-'); % tree expansion
plot(pthObj.States(:,1),pthObj.States(:,2),'r-','LineWidth',2); % draw path

Figure contains an axes object. The axes object with title Occupancy Grid contains 3 objects of type image, line.

参照

[1] Karaman, S. and E. Frazzoli. "Sampling-Based Algorithms for Optimal Motion Planning." The International Journal of Robotics Research. Vol. 30, Number 7, 2011, pp 846 – 894.

拡張機能

バージョン履歴

R2019b で導入