1315.49 PlanSys2에서의 고급 PDDL 기능 지원 현황
1. PlanSys2의 PDDL 처리 아키텍처
PlanSys2는 PDDL 도메인을 Domain Expert 노드에서 파싱하고, 외부 플래너에 계획 생성을 위임하는 아키텍처를 취한다(Gonzalez et al., 2021). 따라서 PlanSys2의 PDDL 기능 지원은 두 가지 수준에서 결정된다:
- PlanSys2 파서 수준: Domain Expert가 도메인 파일을 올바르게 파싱할 수 있는가
- 플래너 수준: 연결된 플래너가 해당 PDDL 기능을 처리할 수 있는가
2. 기능별 지원 현황
2.1 타입 시스템 (:typing)
- 파서: 완전 지원. 타입 계층 구조를 내부적으로 관리하고 조회 인터페이스를 제공한다.
- 플래너: 모든 지원 플래너에서 처리 가능
- API:
DomainExpertClient::getTypes()로 타입 목록 조회 가능
2.2 수치 함수 (:numeric-fluents)
- 파서: 지원. 함수 선언을 파싱하고 Problem Expert에서 함수 값을 관리한다.
- 플래너: POPF(기본 플래너)에서 지원. 선형 수치 표현식 완전 지원, 비선형은 제한적.
- API:
ProblemExpertClient::addFunction(),getFunction()등으로 함수 값 관리 가능
problem_client->addFunction(plansys2::Function("(= (battery_level robot1) 100)"));
2.3 듀레이티브 액션 (:durative-actions)
- 파서: 지원. 듀레이티브 액션을 파싱하고 시간 주석(
at start,at end,over all)을 처리한다. - 플래너: POPF에서 완전 지원. 병렬 실행 계획 생성 가능.
- 실행: Executor 노드가 듀레이티브 액션의 시작/종료 효과를 시간적으로 관리한다.
2.4 ADL 기능 (:adl)
- 파서: 부분 지원.
and,or,not,forall,exists등의 기본 논리 연산자를 파싱한다. - 플래너: POPF에서 부분 지원. 복잡한 ADL 기능은 제한될 수 있다.
2.5 파생 술어 (:derived-predicates)
- 파서: 제한적. PlanSys2의 기본 파서는 파생 술어에 대한 완전한 지원이 제한적이다.
- 플래너: POPF에서 미지원. Fast Downward를 플래너로 교체하면 지원 가능하나, 듀레이티브 액션과의 동시 사용은 불가.
- 대안: 파생 술어 대신 전제 조건에 복합 논리식을 직접 기술하거나, ROS2 노드에서 파생 조건을 런타임에 계산하여 Problem Expert에 반영한다.
2.6 메트릭 (:metric)
- 파서: 지원. 메트릭 표현식을 파싱하여 플래너에 전달한다.
- 플래너: POPF에서 시간적 메트릭(makespan) 및 비용 메트릭을 지원한다.
2.7 선호도와 제약 (:preferences, :constraints)
- 파서: 미지원
- 플래너: 미지원
- 대안: 선호도를 수치 함수와 메트릭으로 근사하여 표현한다.
3. 지원 현황 종합표
| PDDL 기능 | PlanSys2 파서 | POPF | Fast Downward |
|---|---|---|---|
:strips | 지원 | 지원 | 지원 |
:typing | 지원 | 지원 | 지원 |
:numeric-fluents | 지원 | 지원 | 지원 |
:durative-actions | 지원 | 지원 | 미지원 |
:adl | 부분 지원 | 부분 지원 | 지원 |
:derived-predicates | 제한적 | 미지원 | 지원 |
:preferences | 미지원 | 미지원 | 제한적 |
:constraints | 미지원 | 미지원 | 제한적 |
4. 실용적 권장 사항
4.1 PlanSys2 기반 도메인의 권장 기능 집합
(:requirements :strips :typing :durative-actions :numeric-fluents)
이 기능 집합은 PlanSys2의 기본 플래너(POPF)에서 완전히 지원되며, 대부분의 로봇 도메인을 충분히 모델링할 수 있다.
4.2 파생 술어의 대안적 구현
PlanSys2에서 파생 술어가 필요한 경우, ROS2 노드에서 파생 조건을 런타임에 계산하여 Problem Expert에 기반 술어로 반영하는 방법을 사용한다:
// 파생 조건을 ROS2 노드에서 계산
if (isRobotOperational(robot_name)) {
problem_client->addPredicate(
plansys2::Predicate("(robot_operational " + robot_name + ")"));
} else {
problem_client->removePredicate(
plansys2::Predicate("(robot_operational " + robot_name + ")"));
}
4.3 선호도의 대안적 구현
선호도를 수치 함수의 페널티로 변환한다:
;; 선호도 대신 페널티 함수 사용
(:functions (penalty_not_at_base))
;; 기지 미복귀 시 페널티 (Problem Expert에서 런타임 설정)
(:metric minimize (+ (total_cost) (penalty_not_at_base)))
5. 참고 문헌
- Gonzalez, F., Martin, F., Matellán, V., & Rodriguez, F. J. (2021). “PlanSys2: A Planning System Framework for ROS2.” IEEE International Conference on Autonomous Robot Systems and Competitions (ICARSC).
- Coles, A. J., Coles, A. I., Fox, M., & Long, D. (2010). “Forward-Chaining Partial-Order Planning.” Proceedings of ICAPS, 42–49.
- Haslum, P., Lipovetzky, N., Magazzeni, D., & Muise, C. (2019). An Introduction to the Planning Domain Definition Language. Morgan & Claypool Publishers.