plan
설명
는 시작 상태에서 목표 상태까지의 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)
RRT 플래너를 사용하여 3차원 점유 맵을 통과하는 경로 계획하기
도시 블록의 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)
입력 인수
planner
— 경로 플래너
plannerRRT
객체 | plannerRRTStar
객체
경로 플래너로, plannerRRT
객체 또는 plannerRRTStar
객체로 지정됩니다.
startState
— 경로의 시작 상태
요소를 N개 가진 실수 값 벡터
경로의 시작 상태로, 요소를 N개 가진 실수 값 벡터로 지정됩니다. 여기서 N은 상태공간의 차원입니다.
예: [1 1 pi/6]
예: [40 180 25 0.7 0.2 0 0.1]
데이터형: single
| double
goalState
— 경로의 목표 상태
요소를 N개 가진 실수 값 벡터
경로의 목표 상태로, 요소를 N개 가진 실수 값 벡터로 지정됩니다. 여기서 N은 상태공간의 차원입니다.
예: [2 2 pi/3]
예: [150 33 35 0.3 0 0.1 0.6]
데이터형: single
| double
출력 인수
path
— 계획된 경로 정보를 보유하는 객체
navPath
객체
계획된 경로 정보를 보유하는 객체로, navPath
객체로 반환됩니다.
solutionInfo
— 해 정보
구조체
해 정보로, 구조체로 반환됩니다. 각 구조체의 필드는 다음과 같습니다.
solutionInfo
필드
필드 | 설명 |
---|---|
IsPathFound | 경로를 찾았는지 여부를 나타냅니다. 경로를 찾은 경우 1 로 반환됩니다. 찾지 못한 경우 0 을 반환합니다. |
ExitFlag | 플래너의 종료 상태를 나타내며, 다음과 같이 반환됩니다.
|
NumNodes | 플래너가 종료될 때 탐색 트리의 노드 개수(루트 노드 제외)입니다. |
NumIterations | 실행된 "확장" 루틴 횟수입니다. |
TreeData | 탐색된 상태의 모음으로, 플래너가 종료될 때의 탐색 트리 상태를 반영합니다. NaN 값은 각 개별 에지를 구분하는 구분자로 삽입됩니다. |
PathCosts | 각 반복에서의 경로의 비용을 포함합니다. 경로가 목표에 도달하지 못한 경우 반복에 대한 값은 참고 이 필드는
|
데이터형: structure
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
버전 내역
R2019b에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)