Main Content

navPath

설명

navPath 객체는 일반적으로 기하 경로 플래너에 의해 생성된 경로를 저장합니다. 경로 점은 연관된 상태공간에 있는 상태로 저장됩니다.

생성

설명

path = navPath는 디폴트 설정으로 SE(2) 상태공간을 사용하여 path 객체 path를 만듭니다.

path = navPath(space)space에 의해 지정된 상태공간을 사용하여 path 객체를 만듭니다. space 입력값은 또한 StateSpace 속성의 값을 설정합니다.

예제

path = navPath(space,states)states에서 제공된 상태 샘플로 경로를 초기화할 수 있습니다. states를 상태 샘플로 구성된 행렬로 지정합니다. state space 객체의 StateBounds 외부에 있는 상태는 경계로 바뀝니다. states 입력값은 또한 States 속성의 값을 설정합니다.

path = navPath(space,states,maxNumStates)는 경로에 허용되는 최대 상태 개수 maxNumStates를 사용하여 path 객체를 만듭니다. maxNumStates 입력 인수는 MaxNumStates 속성의 값도 설정합니다.

속성

모두 확장

경로에 대한 상태공간으로, state space 객체로 지정됩니다. 경로에 있는 각 상태는 지정된 상태공간에서 비롯된 샘플입니다. stateSpaceSE2, stateSpaceDubins, stateSpaceReedsShepp 또는 stateSpaceSE3과 같은 객체를 state space 객체로 사용할 수 있습니다. 또한 nav.StateSpace 객체를 사용하여 state space 객체를 사용자 지정할 수 있습니다.

경로의 상태로, 실수 값으로 구성된 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

경로에 허용되는 최대 상태 개수로, 양의 정수 스칼라로 지정됩니다.

inf로 지정되면 경로는 명시적으로 크기를 조정할 수 있습니다. 코드를 생성하려면 DynamicMemoryAllocation'On'으로 설정되어야 합니다.

양의 정수 스칼라로 지정되면 객체의 최대 상태 개수는 지정된 값으로 제한됩니다. 코드 생성 시 DynamicMemoryAllocation을 활성화할 수 없다면, 이 값을 사용해서 크기 조정이 가능한 경로를 만드십시오.

데이터형: 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
    MaxNumStates: Inf

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. One or more of the lines displays its values using only markers

경로의 길이를 계산합니다.

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

도시 블록의 3D 점유 맵을 작업 공간으로 불러옵니다. 장애물이 없는 셀로 간주할 임계값을 지정합니다.

mapData = load("dMapCityBlock.mat");
omap = mapData.omap;
omap.FreeThreshold = 0.5;

장애물 주변에서 안전하게 작동할 수 있도록 점유 맵을 확장하여 완충 지대를 추가합니다.

inflate(omap,1)

상태 변수의 범위가 지정된 SE(3) state space 객체를 생성합니다.

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, xlabel X [meters], ylabel Y [meters] contains 5 objects of type patch, scatter, line.

경로의 길이를 계산합니다.

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

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2019b에 개발됨