코딩 및 기타

[matlab] plannerRRT , plannerRRTStar

정지홍 2025. 5. 7. 21:14

plannerRRTStar - 최적 RRT 경로 플래너(RRT*) 생성 - MATLAB

 

plannerRRTStar - Create an optimal RRT path planner (RRT*) - MATLAB

The plannerRRTStar object creates an asymptotically-optimal RRT planner, RRT*.

kr.mathworks.com

 

% SE2 상태공간 객체를 생성합니다.
ss = stateSpaceSE2;

% 생성한 상태 공간에 대해서, 점유 지도 기반의 상태 유효성 검사기를 생성한다.
sv = validatorOccupancyMap( ss );

% 예제 지도를 불러온다. 
load exampleMaps.mat

% simpleMap을 해상도 10의 occupancyMap 객체로 변환한다.
map = occupancyMap( simpleMap , 10 )

% 상태 유효성 검사기에 occupancyMap을 설정 
sv.Map = map;

% 유효성 검사시에 경로에서 충돌 여부를 검사하는 간격을 설정
sv.ValidationDistance = 0.01;

% 상태 공간의 바운드를 지도의 x,y 한계와 회전 한계로 설정
% [ 로봇의 x좌표 범위 , 로봇의 y좌표 범위 , 로봇의 회전 범위 ]
% 즉, 로봇이 취할 수 있는 상태이다.
ss.StateBounds = [map.XLocalLimits; map.YLocalLimits; [ -pi pi ]];

% maxConnectionDistance는 '한번에 얼마나 멀리'확장할지의 최대거리를 의미
% 0.3이라면, 한번에 최대로 0.3m만큼 뻗어나갈 수 있다.
planner = plannerRRT( ss , sv , MaxConnectionDistance=0.3 )


start = [0.5 0.5 0];
goal = [2.5 0.2 0];

% Random Number Generator이다. 즉, 난수 생성기
% 시드값은 100이며, twister는 난수 생성기 알고리즘이다.
rng(100,'twister');

% plannerRRT객체를 사용해서, 실제 경로 검색을 수행한다.
% pathObj은 경로 객체이다. 주로 .State를 프로퍼티로 waypoints( 경유 좌표 )를 가진다.
% solution info는 탐색 과정을 요약한 구조체이다.
[pthObj,solnInfo] = plan(planner,start,goal);

show(map)

% 현재의 플롯을 고정해두고, 이후에 그리는 그래픽 요소들이 같은 축에 겹쳐지도록 설정
hold on

% 생성된 트리의 노드 좌표를 순서대로 꺾은선과 점으로 그린다.
plot(solnInfo.TreeData(:,1),solnInfo.TreeData(:,2),'.-')

plot(pthObj.States(:,1),pthObj.States(:,2),'r-','LineWidth',2)

 

 

pthObj ( path object )

  • .State
    • N x 3의 행렬이며, 각 행이 [ x , y , theta ]형태의 로봇 상태를 나타냄
  • .NumStates
    • 경로 상에 포함된 waypoint의 갯수
  • .Cost
    • 경로의 총 기이나 다른 비용 함수 값을 저장

 

solnInfo ( solution info )

  • .PlanningTime
    • 플래너가 경로를 찾는데 걸린 총 시간 ( 초 단위 )
  • .NumNodes
    • 검색중에 생성한 RRT트리의 노드의 총 갯수
  • .IsPathFound
    • 목표 지점까지 경로를 찾았는지의 여부
  • .TreeData
    • 전체 트리 구조를 담은 데이터이며, 시각화나 추가 분석에 사용한다.

 

 

 

 

 


ss = stateSpaceSE2;

sv = validatorOccupancyMap( ss );

load exampleMaps.mat

map = occupancyMap( simpleMap , 6 );

sv.Map = map;

sv.ValidationDistance = 0.01;

ss.StateBounds = [
    map.XLocalLimits; map.YLocalLimits; [ -pi pi ]
];

planner = plannerRRTStar( ss , sv ,...
    ContinueAfterGoalReached=true, ...
    MaxIterations=2500, ...
    MaxConnectionDistance=0.3);

start = [0.5 0.5 0];
goal = [2.5 0.2 0];

rng(100,'twister') % repeatable result
[pthObj,solnInfo] = plan(planner,start,goal);

map.show
hold on
% Tree expansion
plot(solnInfo.TreeData(:,1),solnInfo.TreeData(:,2),'.-')
% Draw path
plot(pthObj.States(:,1),pthObj.States(:,2),'r-','LineWidth',2)

'코딩 및 기타' 카테고리의 다른 글

세팅  (1) 2025.05.12
[matlab] rrt구현  (0) 2025.05.09
Rotations, Orientation, and Quaternions  (0) 2025.05.06
RRT* 다시구현  (1) 2025.04.28
KD-Tree ( K-Dimensional Tree )  (0) 2025.04.28