1317.7 도메인 전문가 노드의 아키텍처

1. Domain Expert 노드의 역할

Domain Expert 노드는 PlanSys2에서 PDDL 도메인 모델의 관리, 파싱, 조회를 전담하는 핵심 노드이다. 이 노드는 도메인 파일을 로드하여 내부 자료 구조로 변환하고, ROS2 서비스 인터페이스를 통해 다른 노드와 외부 클라이언트에 도메인 정보를 제공한다.

2. 내부 구조

Domain Expert Node
├── PDDL Parser
│   ├── 도메인 파일 파싱
│   └── 구문 검증
├── Domain Model
│   ├── 타입 계층 구조
│   ├── 상수 목록
│   ├── 술어 시그니처
│   ├── 함수 시그니처
│   ├── 액션 스키마 (순간적)
│   └── 듀레이티브 액션 스키마
└── ROS2 Service Server
    ├── get_domain
    ├── get_domain_name
    ├── get_domain_types
    ├── get_domain_predicates
    ├── get_domain_actions
    ├── get_domain_action_details
    ├── get_domain_durative_action_details
    └── get_domain_constants

3. 도메인 파일 로딩

Domain Expert는 ROS2 파라미터 model_file로 지정된 PDDL 도메인 파일을 라이프사이클의 on_configure 단계에서 로드한다:

CallbackReturn DomainExpertNode::on_configure(const rclcpp_lifecycle::State &) {
    std::string model_file = get_parameter("model_file").as_string();
    domain_expert_ = std::make_shared<DomainExpert>(model_file);
    // 서비스 서버 생성
    return CallbackReturn::SUCCESS;
}

4. 파싱 결과의 내부 표현

PDDL 도메인 파일의 각 구성 요소가 내부 자료 구조로 변환된다:

PDDL 구성 요소내부 표현
(define (domain ...))도메인 이름 (문자열)
(:requirements ...)요구사항 플래그 집합
(:types ...)타입 트리 자료 구조
(:constants ...)타입 부여 상수 목록
(:predicates ...)술어 시그니처 목록 (이름 + 매개변수 타입)
(:functions ...)함수 시그니처 목록
(:action ...)액션 스키마 (이름, 매개변수, 전제 조건, 효과)
(:durative-action ...)듀레이티브 액션 스키마 (지속 시간, 시간 조건/효과 포함)

5. ROS2 서비스 인터페이스

5.1 도메인 전체 조회

// 클라이언트 사용 예시
auto domain_client = std::make_shared<plansys2::DomainExpertClient>();
std::string domain_text = domain_client->getDomain();

5.2 타입 목록 조회

auto types = domain_client->getTypes();
// {"robot", "waypoint", "object", "ground_robot", "aerial_robot", ...}

5.3 액션 상세 조회

auto action = domain_client->getAction("move");
if (action.has_value()) {
    // action->name, action->parameters, action->preconditions, action->effects
}

auto durative_action = domain_client->getDurativeAction("navigate");
if (durative_action.has_value()) {
    // durative_action->at_start_requirements, durative_action->over_all_requirements, ...
}

5.4 술어 목록 조회

auto predicates = domain_client->getPredicates();
// {"robot_at ?r - robot ?w - waypoint", "holding ?r - robot ?obj - object", ...}

6. Problem Expert와의 상호 작용

Problem Expert가 객체를 추가하거나 술어를 설정할 때, Domain Expert의 정보를 참조하여 유효성을 검증한다:

  1. 객체 추가 시: 해당 타입이 도메인에 선언되어 있는지 확인
  2. 술어 추가 시: 술어 이름이 도메인에 선언되어 있고, 매개변수 타입이 호환되는지 확인
  3. 함수 설정 시: 함수 이름이 도메인에 선언되어 있는지 확인

7. 라이프사이클 관리

Domain Expert는 ROS2 관리형 노드로서 다음의 상태 전이를 지원한다:

전이수행 작업
on_configure도메인 파일 로드, 파싱, 서비스 서버 생성
on_activate서비스 서버 활성화
on_deactivate서비스 서버 비활성화
on_cleanup내부 자원 해제
on_shutdown노드 종료

8. 참고 문헌

  • Gonzalez, F., Martin, F., Matellán, V., & Rodriguez, F. J. (2021). “PlanSys2: A Planning System Framework for ROS2.” IEEE ICARSC.