Main Content

navPath

説明

navPath オブジェクトには、通常、幾何学的パス プランナーで作成されたパスが格納されます。パス上の点は、関連付けられた状態空間に状態として格納されます。

作成

説明

path = navPath は、SE(2) 状態空間を使ってパス オブジェクト path を既定の設定で作成します。

path = navPath(space) は、space で指定された状態空間を使ってパス オブジェクトを作成します。space 入力は、StateSpace プロパティの値も設定します。

path = navPath(space,states) では、states で指定された状態サンプルでパスを初期化できます。states は状態サンプルの行列として指定します。状態 space オブジェクトの StateBounds 外にある状態はその範囲まで減らされます。states 入力は、States プロパティの値も設定します。

プロパティ

すべて展開する

パスの状態空間。状態空間オブジェクトとして指定します。パスの各状態は、指定された状態空間からのサンプルです。stateSpaceSE2stateSpaceDubinsstateSpaceReedsSheppstateSpaceSE3 などのオブジェクトを状態空間オブジェクトとして使用できます。nav.StateSpace オブジェクトを使用して状態空間オブジェクトをカスタマイズすることもできます。

パスの状態。実数値の M 行 N 列の行列。M はパス内の状態数で、N は各状態の次元です。このプロパティは、オブジェクトの作成中または関数 append を使用する場合にのみ設定できます。

例: [0 0 0; 1 1 0; 2 2 0]

例: [0 0 0 1 0 0 0; 1 1 1 1 0 0 0; 2 2 1 1 0 0 0]

データ型: double

このプロパティは読み取り専用です。

パス内の状態サンプルの数。非負の整数として指定します。この数は、States プロパティで指定された状態行列の行数と同じです。

データ型: double

オブジェクト関数

appendAdd states to end of path
copyCreate copy of path object
interpolateパスに沿って点を内挿
pathLengthパスの長さ

すべて折りたたむ

Dubins 空間で、複数のウェイポイントに基づいて navPath オブジェクトを作成します。

dubinsSpace = stateSpaceDubins([0 25; 0 25; -pi pi])
dubinsSpace = 
  stateSpaceDubins with properties:

   SE2 Properties
                 Name: 'SE2 Dubins'
          StateBounds: [3x2 double]
    NumStateVariables: 3

   Dubins Vehicle Properties
     MinTurningRadius: 1

pathobj = navPath(dubinsSpace)
pathobj = 
  navPath with properties:

    StateSpace: [1x1 stateSpaceDubins]
        States: [0x3 double]
     NumStates: 0

waypoints = [8 10 pi/2;
             7 14 pi/4;
             10 17 pi/2;
             10 10 -pi];
append(pathobj,waypoints)

ちょうど 250 個の点が含まれるよう、そのパスに内挿を行います。

interpolate(pathobj,250)

内挿されたパスと元のウェイポイントを可視化します。

figure
grid on
axis equal
hold on
plot(pathobj.States(:,1),pathobj.States(:,2),".b")
plot(waypoints(:,1),waypoints(:,2),"*r","MarkerSize",10)

Figure contains an axes object. The axes object contains 2 objects of type line.

パスの長さを計算します。

len = pathLength(pathobj);
disp("Path length = " + num2str(len))
Path length = 19.4722

都市ブロックの 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]);

SE(3) 状態空間で、複数のウェイポイントに基づいて navPath オブジェクトを作成します。

path = navPath(ss);
waypoints = [40 180 15 0.7 0.2 0 0.1;
             55 120 20 0.6 0.2 0 0.1;
             100 100 25 0.5 0.2 0 0.1;
             130 90 30 0.4 0 0.1 0.6;
             150 33 35 0.3 0 0.1 0.6];
append(path,waypoints)

ちょうど 250 個の点が含まれるよう、そのパスに内挿を行います。

interpolate(path,250)

内挿されたパスと元のウェイポイントを可視化します。

show(omap)
axis equal
view([-10 55])
hold on
% Start state
scatter3(waypoints(1,1),waypoints(1,2),waypoints(1,3),"g","filled")
% Goal state
scatter3(waypoints(end,1),waypoints(end,2),waypoints(end,3),"r","filled")
% Intermediate waypoints
scatter3(waypoints(2:end-1,1),waypoints(2:end-1,2), ...
         waypoints(2:end-1,3),"y","filled")
% Path
plot3(path.States(:,1),path.States(:,2),path.States(:,3), ...
      "r-",LineWidth=2)

Figure contains an axes object. The axes object with title Occupancy Map contains 5 objects of type patch, scatter, line.

パスの長さを計算します。

len = pathLength(path);
disp("Path length = " + num2str(len))
Path length = 204.1797

バージョン履歴

R2019b で導入