Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

plannerHybridAStar

Hybrid A* 경로 플래너

R2019b 이후

설명

Hybrid A* 경로 planner 객체는 주어진 2차원 공간에서 비홀로노믹 제약 조건을 가진 이동체를 위한 평활화된 경로를 생성합니다.

plannerHybridAStar 객체는 Reeds-Shepp 연결을 사용하여 장애물 없는 경로를 구합니다. MinTurningRadius, ForwardCost, ReverseCost와 같은 속성을 조정하여 연결 동작을 수정할 수 있습니다. AnalyticExpansionInterval 속성을 사용하여 Reeds-Shepp 연결을 검사하는 간격을 설정할 수 있습니다.

참고

Hybrid A* 플래너는 stateValidator 객체의 ValidationDistance 속성을 기반으로 모션 프리미티브와 분석적 확장을 보간하여 맵에서 충돌을 검사합니다. ValidationDistance 속성이 Inf로 설정되면, 이 객체는 상태 유효성 검사기에 지정된 맵의 셀 크기를 기준으로 보간합니다. 점유 맵을 플래너에 할당하기 전에, 이동체 크기를 고려하여 점유 맵을 확장하십시오.

생성

설명

예제

planner = plannerHybridAStar(validator)는 Hybrid A* 알고리즘을 사용하여 경로 planner 객체를 생성합니다. validator 입력값을 validatorOccupancyMap 또는 validatorVehicleCostmap 객체로 지정합니다. validator 입력값은 StateValidator 속성의 값을 설정합니다.

planner = plannerHybridAStar(validator,Name,Value)는 하나 이상의 이름-값 쌍 인수를 사용하여 경로 플래너의 속성을 설정합니다. 각 속성 이름은 작은따옴표(' ')로 묶습니다.

속성

모두 확장

계획을 위한 상태 유효성 검사기로, SE(2) 상태공간을 기준으로 validatorOccupancyMap 또는 validatorVehicleCostmap 객체로 지정됩니다.

생성할 모션 프리미티브의 길이로, 'MotionPrimitiveLength'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다(단위: 미터). 큰 맵이나 희소 환경의 경우 길이를 늘리십시오. 밀집 환경의 경우 길이를 줄이십시오.

참고

'MotionPrimitiveLength''MinTurningRadius'를 기준으로 원주 길이의 4분의 1을 초과할 수 없습니다.

데이터형: double

이동체의 조정 가능한 최소 반경으로, 'MinTurningRadius'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다(단위: 미터).

참고

'MinTurningRadius'의 값이 설정되어 있으면 'MotionPrimitiveLength'는 이 값을 기준으로 원주 길이의 4분의 1을 초과할 수 없습니다.

데이터형: double

생성할 모션 프리미티브 개수로, 'NumMotionPrimitives'와 함께 3보다 크거나 같은 양의 홀수 정수 스칼라가 쉼표로 구분되어 지정됩니다.

정방향으로 이동하기 위한 비용 승수로, 'ForwardCost'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. 정방향 모션에 벌점을 적용하려면 비용 값을 늘리십시오.

데이터형: double

역방향으로 이동하기 위한 비용 승수로, 'ReverseCost'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. 역방향 모션에 벌점을 적용하려면 비용 값을 늘리십시오.

데이터형: double

모션 방향 전환에 대해 가산되는 비용으로, 'DirectionSwitchingCost'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. 방향 전환에 벌점을 적용하려면 비용 값을 늘리십시오.

데이터형: double

사용 가능한 최저 비용 노드에서 분석적 확장을 시도하는 간격으로, 'AnalyticExpansionInterval'과 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다.

Hybrid A* 경로 플래너는 해당 인스턴스에서 사용 가능한 최저 비용의 노드에서 모션 프리미티브를 확장합니다.

  • 확장할 노드 개수는 방향 및 그 유효성 둘 모두에서 생성될 프리미티브 개수에 따라 다르며 이 사이클은 'AnalyticExpansionInterval'에 도달할 때까지 반복됩니다.

  • 그런 다음, Hybrid A* 경로 플래너는 Reeds-Shepp 모델을 사용하여 트리에서 목표 자세에 도달하기 위해 분석적 확장을 시도합니다. 시도가 실패하면 Hybrid A* 경로 플래너는 사이클을 반복합니다.

간격을 줄이고 최종 목표 지점에 대한 Reeds-Shepp 연결 검사 횟수를 늘려서 알고리즘 성능을 개선합니다.

출력 경로에서 보간된 자세 간의 거리로, 'InterpolationDistance'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다(단위: 미터).

데이터형: double

객체 함수

planFind obstacle-free path between two poses
showVisualize the planned path

예제

모두 축소

Hybrid A* 알고리즘을 사용하여 주차장을 통과하는 이동체를 위한 충돌 없는 경로를 계획합니다.

맵을 생성하여 상태 유효성 검사기에 할당하기

주차장의 이동체 비용맵에서 셀의 비용 값을 불러옵니다.

load parkingLotCostVal.mat % costVal

비용 값으로 binaryOccupancyMap을 생성합니다.

resolution = 3;
map = binaryOccupancyMap(costVal,resolution);

상태공간을 생성합니다.

ss = stateSpaceSE2;

상태공간 경계가 맵 제한과 동일하도록 업데이트합니다.

ss.StateBounds = [map.XWorldLimits;map.YWorldLimits;[-pi pi]];

충돌 검사를 위한 state validator 객체를 생성합니다.

sv = validatorOccupancyMap(ss);

맵을 state validator 객체에 할당합니다.

sv.Map = map;

경로를 계획하고 시각화하기

state validator 객체로 plannerHybridAStar 객체를 초기화합니다. 플래너의 MinTurningRadius 속성과 MotionPrimitiveLength 속성을 지정합니다.

planner = plannerHybridAStar(sv, ...
                             MinTurningRadius=4, ...
                             MotionPrimitiveLength=6);

이동체의 출발 자세와 목표 자세를 [x, y, theta] 벡터로 정의합니다. 여기서 xy는 위치(단위: 미터)를 지정하고 theta는 방향 각도(단위: 라디안)를 지정합니다.

startPose = [4 9 pi/2]; % [meters, meters, radians]
goalPose = [30 19 -pi/2];

출발 자세부터 목표 자세에 이르는 경로를 계획합니다.

refpath = plan(planner,startPose,goalPose,SearchMode='exhaustive');     

show 함수를 사용하여 경로를 시각화합니다.

show(planner)

Figure contains an axes object. The axes object with title Hybrid A* Path Planner, xlabel X [meters], ylabel Y [meters] contains 8 objects of type image, line, scatter. These objects represent Reverse Motion Primitives, Forward Motion Primitives, Forward Path, Path Points, Orientation, Start, Goal.

참고 문헌

[1] Dolgov, Dmitri, Sebastian Thrun, Michael Montemerlo, and James Diebel. Practical Search Techniques in Path Planning for Autonomous Driving. American Association for Artificial Intelligence, 2008.

[2] Petereit, Janko, Thomas Emter, Christian W. Frey, Thomas Kopfstedt, and Andreas Beutel. "Application of Hybrid A* to an Autonomous Mobile Robot for Path Planning in Unstructured Outdoor Environments." ROBOTIK 2012: 7th German Conference on Robotics. 2012, pp. 1-6.

확장 기능

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

버전 내역

R2019b에 개발됨