plan
2 つの状態間のパスの計画
説明
は、開始状態からゴール状態までの path = plan(planner,startState,goalState)path を返します。
[ は、パス プランニングの解法情報が含まれた path,solutionInfo] = plan(planner,startState,goalState)solutionInfo も返します。
例
状態空間を作成します。
ss = stateSpaceSE2;
作成された状態空間を使用して、occupancyMap ベースの状態バリデーターを作成します。
sv = validatorOccupancyMap(ss);
例のマップから占有マップを作成し、マップの分解能を 1 メートルあたり 10 セルとして設定します。
load exampleMaps
map = occupancyMap(simpleMap,10);
sv.Map = map;バリデーターの検証距離を設定します。
sv.ValidationDistance = 0.01;
状態空間の範囲を更新してマップ制限と同じにします。
ss.StateBounds = [map.XWorldLimits;map.YWorldLimits;[-pi pi]];
パス プランナーを作成し、最大接続距離を増やします。
planner = plannerRRT(ss,sv,MaxConnectionDistance=0.3);
開始状態とゴール状態を設定します。
start = [0.5 0.5 0]; goal = [2.5 0.2 0];
既定の設定を使用してパスを計画します。
rng(100,'twister'); % for repeatable result [pthObj,solnInfo] = plan(planner,start,goal);
結果を可視化します。
show(map) hold on % Tree expansion plot(solnInfo.TreeData(:,1),solnInfo.TreeData(:,2),'.-') % Draw path plot(pthObj.States(:,1),pthObj.States(:,2),'r-','LineWidth',2)
![Figure contains an axes object. The axes object with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 3 objects of type image, line.](../../examples/nav/win64/PlanPathBetweenTwoStatesExample_01.png)
都市ブロックの 3 次元占有マップをワークスペースに読み込みます。セルを障害物なしとして見なすしきい値を指定します。
mapData = load("dMapCityBlock.mat");
omap = mapData.omap;
omap.FreeThreshold = 0.5;占有マップをインフレートして、障害物の周囲の安全な動作のためにバッファー ゾーンを追加します。
inflate(omap,1)
状態変数の範囲を指定して SE(3) 状態空間オブジェクトを作成します。
ss = stateSpaceSE3([0 220;0 220;0 100;inf inf;inf inf;inf inf;inf inf]);
作成された状態空間を使用して、3 次元占有マップの状態バリデーターを作成します。占有マップを状態バリデーター オブジェクトに割り当てます。サンプリング距離間隔を指定します。
sv = validatorOccupancyMap3D(ss, ... Map = omap, ... ValidationDistance = 0.1);
最大接続距離を増やし、最大反復回数を減らして、RRT パス プランナーを作成します。ターゲットまでのユークリッド距離がしきい値の 1 メートルを下回っている場合にパスがゴールに到達していると判定するカスタムのゴール関数を指定します。
planner = plannerRRT(ss,sv, ... MaxConnectionDistance = 50, ... MaxIterations = 1000, ... GoalReachedFcn = @(~,s,g)(norm(s(1:3)-g(1:3))<1), ... GoalBias = 0.1);
開始姿勢とゴール姿勢を指定します。
start = [40 180 25 0.7 0.2 0 0.1]; goal = [150 33 35 0.3 0 0.1 0.6];
結果を再現できるように乱数発生器を構成します。
rng(1,"twister");パスを計画します。
[pthObj,solnInfo] = plan(planner,start,goal);
計画されたパスを可視化します。
show(omap) axis equal view([-10 55]) hold on % Start state scatter3(start(1,1),start(1,2),start(1,3),"g","filled") % Goal state scatter3(goal(1,1),goal(1,2),goal(1,3),"r","filled") % Path plot3(pthObj.States(:,1),pthObj.States(:,2),pthObj.States(:,3), ... "r-",LineWidth=2)
![Figure contains an axes object. The axes object with title Occupancy Map, xlabel X [meters], ylabel Y [meters] contains 4 objects of type patch, scatter, line.](../../examples/nav/win64/PlanPathThrough3DOccupancyMapUsingRRTPlannerExample_01.png)
入力引数
パス プランナー。plannerRRT オブジェクトまたは plannerRRTStar オブジェクトとして指定します。
パスの開始状態。N 要素の実数値ベクトルとして指定します。N は状態空間の次元です。
例: [1 1 pi/6]
例: [40 180 25 0.7 0.2 0 0.1]
データ型: single | double
パスのゴール状態。N 要素の実数値ベクトルとして指定します。N は状態空間の次元です。
例: [2 2 pi/3]
例: [150 33 35 0.3 0 0.1 0.6]
データ型: single | double
出力引数
計画されたパス情報を保持するオブジェクト。navPath オブジェクトとして返されます。
解法情報。構造体として返されます。構造体のフィールドは以下のとおりです。
solutionInfo のフィールド
| フィールド | 説明 |
|---|---|
IsPathFound | パスが見つかったかどうかを示します。パスが見つかった場合は、1 を返します。それ以外の場合は、0 を返します。 |
ExitFlag | プランナーの終了ステータスを示します。以下のように返されます。
|
NumNodes | プランナーが終了したときの探索木内のノード数 (ルート ノードを除く)。 |
NumIterations | 実行された "延長" ルーチンの数。 |
TreeData | プランナーが終了したときの探索木のステータスを反映した、探索された状態のコレクション。各個別エッジを区切るために NaN 値が区切り文字として挿入されます。 |
PathCosts | 各反復におけるパスのコストが含まれます。パスがゴールに達していないときの反復の値は、 メモ このフィールドは、
|
データ型: structure
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
バージョン履歴
R2019b で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)