Main Content

pathPlannerRRT

RRT* パス プランナーを構成

説明

pathPlannerRRT オブジェクトは、最適な RRT* (Rapidly Exploring Random Tree) アルゴリズムに基づいて車両パス プランナーを構成します。RRT* パス プランナーは、ランダムな衝突のない姿勢から成る木を作成して、車両の周囲の環境を探索します。

pathPlannerRRT オブジェクトを構成した後に、関数 plan を使用して開始姿勢からゴールまでのパスを計画します。

作成

説明

planner = pathPlannerRRT(costmap) は車両パスを計画するための pathPlannerRRT オブジェクトを返します。costmap は、車両の周囲の環境を指定する vehicleCostmap オブジェクトです。costmapCostmap プロパティの値を設定します。

planner = pathPlannerRRT(costmap,Name,Value) は、1 つ以上の名前と値のペア引数を使用して、パス プランナーのプロパティを設定します。たとえば、pathPlanner(costmap,'GoalBias',0.5)GoalBias プロパティを確率 0.5 に設定します。プロパティ名はそれぞれ引用符で囲みます。

プロパティ

すべて展開する

車両環境のコストマップ。vehicleCostmap オブジェクトとして指定します。コストマップは、ランダムに生成された姿勢の衝突チェックで使用されます。このコストマップは、costmap 入力を使用して pathPlannerRRT オブジェクトを作成する際に指定します。

ゴール姿勢の許容誤差。[xTol, yTol, ΘTol] ベクトルとして指定します。パス プランナーは位置 (x, y) および方向角度 Θ の許容誤差内で車両がゴール姿勢に到達すると、プランニングを終了します。xTol と yTol の値は、vehicleCostmap と同じワールド単位です。ΘTol の単位は度です。

ランダムな姿勢ではなくゴール姿勢を選択する確率。範囲 [0,1] の実数スカラーとして指定します。値が大きいと、ゴールへの到達時間が短縮しますが、障害物の回避に失敗するリスクがあります。

連続する姿勢間の接続の計算に使用する手法。'Dubins' または 'Reeds-Shepp' として指定します。前進運動のみを許可する場合は、'Dubins' を使用します。

'Dubins' 手法には、3 つのプリミティブ型運動のシーケンスが含まれており、それぞれ次のタイプのいずれかです。

  • 直進 (前進)

  • 車両の最大ステアリング角度で左折 (前進)

  • 車両の最大ステアリング角度で右折 (前進)

この接続手法を使用した場合、計画した車両パスのセグメントは driving.DubinsPathSegment オブジェクトの配列として格納されます。

'Reeds-Shepp' 手法には、3 つから 5 つのプリミティブ型運動のシーケンスが含まれており、それぞれ次のタイプのいずれかです。

  • 直進 (前進または後退)

  • 車両の最大ステアリング角度で左折 (前進または後退)

  • 車両の最大ステアリング角度で右折 (前進または後退)

この接続手法を使用した場合、計画した車両パスのセグメントは driving.ReedsSheppPathSegment オブジェクトの配列として格納されます。

MinTurningRadius プロパティにより、最大ステアリング角度が決定されます。

2 つの接続された姿勢間の最大距離。正の実数スカラーとして指定します。pathPlannerRRT により、2 つの姿勢間のパスに沿った接続距離が計算されます (カーブを含む)。値が大きいと、姿勢間のパス セグメントが長くなります。

車両の最小回転半径。正の実数スカラーとして指定します。この値は、最大ステアリング角度での旋回円の半径に対応します。値が大きいと、パス プランナーの最大ステアリング角度が制限されます。一方、値が小さいと急カーブになります。既定値はホイールベース 2.8 メートル、最大ステアリング角度 35 度を使用して計算されます。

コストマップを探索するプランナー反復の最小回数。正の整数として指定します。この値を大きくすると、コストマップ内の代替パスのサンプリングが増えます。

コストマップを探索するプランナー反復の最大回数。正の整数として指定します。この値を大きくすると、有効なパスを検出するためのサンプル数が増えます。有効なパスが検出されなかった場合、パス プランナーは、この最大値を超過すると終了します。

近似最近傍探索の有効化。true または false として指定します。この値を true に設定すると、高速であるが近似である探索アルゴリズムが使用されます。この値を false に設定すると、計算時間が増えますが、正確な探索アルゴリズムが使用されます。

オブジェクト関数

planRRT* パス プランナーを使用して車両パスを計画
plotPlot path planned by RRT* path planner

すべて折りたたむ

RRT* アルゴリズムを使用して駐車スポットへの車両パスを計画します。

駐車場のコストマップを読み込みます。コストマップをプロットし、駐車場、および車両が回避するインフレート エリアを確認します。

data = load('parkingLotCostmapReducedInflation.mat');
costmap = data.parkingLotCostmapReducedInflation;
plot(costmap)

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 2 objects of type image, patch. This object represents Inflated Areas.

パス プランナーの開始姿勢とゴール姿勢を [x, y, Θ] ベクトルとして定義します。位置 (x,y) のワールド単位はメートルです。方向値 Θ のワールド単位は度です。

startPose = [11, 10, 0]; % [meters, meters, degrees]
goalPose  = [31.5, 17, 90];

RRT* パス プランナーを作成して、開始姿勢からゴール姿勢までのパスを計画します。

planner = pathPlannerRRT(costmap);
refPath = plan(planner,startPose,goalPose);

計画されたパスをプロットします。

plot(planner)

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 12 objects of type image, patch, scatter, line, polygon. These objects represent Inflated Areas, Planned Path, Desired Goal Pose.

最適な RRT* (Rapidly Exploring Random Tree) アルゴリズムを使用して駐車場の車両パスを計画します。パスが有効であることを確認してから、パスに沿って遷移する姿勢をプロットします。

駐車場のコストマップを読み込みます。コストマップをプロットし、駐車場、および車両が回避するインフレート エリアを確認します。

data = load('parkingLotCostmap.mat');
costmap = data.parkingLotCostmap;
plot(costmap)

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 2 objects of type image, patch. This object represents Inflated Areas.

車両の開始姿勢とゴール姿勢を [x, y, Θ] ベクトルとして定義します。位置 (x,y) のワールド単位はメートルです。方向角度 Θ のワールド単位は度です。

startPose = [4, 4, 90]; % [meters, meters, degrees]
goalPose = [30, 13, 0];

pathPlannerRRT オブジェクトを使用して、開始姿勢からゴール姿勢までのパスを計画します。

planner = pathPlannerRRT(costmap);
refPath = plan(planner,startPose,goalPose);

パスが有効か確認します。

isPathValid = checkPathValidity(refPath,costmap)
isPathValid = logical
   1

パスに沿って遷移する姿勢を内挿します。

transitionPoses = interpolate(refPath);

コストマップ上に計画されたパスと遷移する姿勢をプロットします。

hold on
plot(refPath,'DisplayName','Planned Path')
scatter(transitionPoses(:,1),transitionPoses(:,2),[],'filled', ...
    'DisplayName','Transition Poses')
hold off

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 13 objects of type image, patch, scatter, line, polygon. These objects represent Inflated Areas, Planned Path, Transition Poses.

ヒント

  • プランナーのプロパティのいずれかを更新すると、計画されたパスは pathPlannerRRT からクリアされます。plot を呼び出した場合、plan を使用してパスが計画されるまで、コストマップのみが表示されます。

  • パフォーマンスを向上させるために、pathPlannerRRT オブジェクトは近似最近傍探索を使用します。この探索手法では、sqrt(N) ノードのみが検査されます。ここで、N は探索するノード数です。正確な最近傍探索を使用するには、ApproximateSearch プロパティを false に設定します。

  • Dubins および Reeds-Shepp 接続手法は運動学的に実行可能であると見なされ、慣性の効果は無視されます。これらの手法を利用したパス プランナーは、車輪力の慣性の効果が小さい低速環境に適しています。

参照

[1] Karaman, Sertac, and Emilio Frazzoli. "Optimal Kinodynamic Motion Planning Using Incremental Sampling-Based Methods." 49th IEEE Conference on Decision and Control (CDC). 2010.

[2] Shkel, Andrei M., and Vladimir Lumelsky. "Classification of the Dubins Set." Robotics and Autonomous Systems. Vol. 34, Number 4, 2001, pp. 179–202.

[3] Reeds, J. A., and L. A. Shepp. "Optimal paths for a car that goes both forwards and backwards." Pacific Journal of Mathematics. Vol. 145, Number 2, 1990, pp. 367–393.

拡張機能

バージョン履歴

R2018a で導入