Main Content

plan

두 상태 간의 경로 계획

R2019b 이후

설명

path = plan(planner,startState,goalState)는 시작 상태에서 목표 상태까지의 path를 반환합니다.

예제

[path,solutionInfo] = plan(planner,startState,goalState)는 경로 계획의 해 정보를 포함하는 solutionInfo도 반환합니다.

예제

모두 축소

상태공간을 생성합니다.

ss = stateSpaceSE2;

생성된 상태공간을 사용하여 occupancyMap 기반 상태 유효성 검사기를 생성합니다.

sv = validatorOccupancyMap(ss);

예제 맵에서 점유 맵을 만들고 맵 해상도를 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)

도시 블록의 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]);

생성된 상태공간을 사용하여 3차원 점유 맵 상태 유효성 검사기를 생성합니다. 점유 맵을 state validator 객체에 할당합니다. 샘플링 거리 간격을 지정합니다.

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)

입력 인수

모두 축소

경로 플래너로, 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

플래너의 종료 상태를 나타내며, 다음과 같이 반환됩니다.

  • 1 — 목표에 도달한 경우

  • 2 — 최대 반복 횟수에 도달한 경우

  • 3 — 최대 노드 개수에 도달한 경우

NumNodes플래너가 종료될 때 탐색 트리의 노드 개수(루트 노드 제외)입니다.
NumIterations실행된 "확장" 루틴 횟수입니다.
TreeData탐색된 상태의 모음으로, 플래너가 종료될 때의 탐색 트리 상태를 반영합니다. NaN 값은 각 개별 에지를 구분하는 구분자로 삽입됩니다.
PathCosts

각 반복에서의 경로의 비용을 포함합니다. 경로가 목표에 도달하지 못한 경우 반복에 대한 값은 NaN으로 표시됩니다. 배열의 크기는 NumIterations×1입니다. 마지막 요소는 최종 경로의 비용을 포함합니다.

참고

이 필드는 plannerRRTStar 객체에만 적용할 수 있습니다.

데이터형: structure

확장 기능

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

버전 내역

R2019b에 개발됨

참고 항목

객체

함수