1317.21 문제 인스턴스의 동적 생성

1. 문제 인스턴스의 개념과 역할

PDDL 기반 계획 수립에서 문제 인스턴스(problem instance)는 도메인 모델이 정의하는 일반적 행동 규칙 위에, 특정 임무를 수행하기 위한 구체적 상황을 기술하는 명세이다. 문제 인스턴스는 객체 집합(objects), 초기 상태(initial state), 목표 상태(goal state)의 세 가지 핵심 요소로 구성되며, 도메인 모델과 결합되어 플래너에 입력된다. PlanSys2에서 문제 인스턴스는 정적 파일로 사전 정의되는 것이 아니라, 문제 전문가 노드(Problem Expert Node)를 통해 런타임에 동적으로 생성된다. 이러한 동적 생성 메커니즘은 로봇 시스템이 변화하는 환경에 적응적으로 임무를 계획할 수 있게 하는 핵심 설계 요소이다(Martín et al., 2021).

2. 문제 전문가 노드의 역할

문제 전문가 노드는 PlanSys2의 4대 핵심 노드 중 하나로, 문제 인스턴스의 생성과 관리를 전담한다. 이 노드는 ROS2 서비스 인터페이스를 통해 외부로부터 객체, 술어 인스턴스(predicate instance), 함수 값, 목표 조건을 수신하고, 이를 조합하여 완전한 PDDL 문제 인스턴스를 구성한다. 문제 전문가 노드는 도메인 전문가 노드와 긴밀하게 연동되며, 수신된 술어나 객체가 도메인 모델에 정의된 것과 일치하는지를 검증한 후에만 문제 인스턴스에 반영한다.

3. 동적 생성의 구성 요소

3.1 객체의 등록과 관리

문제 인스턴스의 첫 번째 구성 요소는 객체(object) 집합이다. PlanSys2에서 객체는 ROS2 서비스 호출을 통해 개별적으로 등록된다. 각 객체는 이름과 타입으로 구성되며, 등록 시 도메인 모델의 타입 계층 구조와 일치하는지 검증된다.

(robot1 - robot)
(kitchen - location)
(bedroom - location)
(cup - object)

객체 등록 서비스는 다음과 같은 연산을 지원한다.

  • 객체 추가(add instance): 새로운 객체를 문제 인스턴스에 등록한다. 이미 동일한 이름의 객체가 존재하면 중복 등록 오류를 반환한다.
  • 객체 제거(remove instance): 기존 객체를 문제 인스턴스에서 삭제한다. 해당 객체를 참조하는 술어 인스턴스가 존재할 경우, 연관된 술어 인스턴스도 함께 제거된다.
  • 객체 조회(get instances): 특정 타입에 속하는 모든 객체 또는 전체 객체 목록을 반환한다.

3.2 술어 인스턴스의 설정

술어 인스턴스(predicate instance)는 초기 상태를 구성하는 사실(fact)에 해당한다. 도메인 모델에서 술어는 파라미터화된 관계를 정의하며, 문제 인스턴스에서는 이 파라미터에 구체적 객체가 바인딩된 술어 인스턴스가 초기 상태를 형성한다.

(at robot1 kitchen)
(connected kitchen bedroom)
(free robot1)

PlanSys2는 술어 인스턴스에 대해 다음과 같은 서비스를 제공한다.

  • 술어 추가(add predicate): 특정 술어에 구체적 인자를 바인딩하여 초기 상태에 추가한다. 추가 시 술어의 이름이 도메인에 정의되어 있는지, 인자의 수와 타입이 술어 정의와 일치하는지 검증한다.
  • 술어 제거(remove predicate): 초기 상태에서 특정 술어 인스턴스를 삭제한다. 이는 로봇의 인식(perception) 결과에 따라 세계 상태를 갱신할 때 사용된다.
  • 술어 조회(get predicates): 현재 초기 상태에 등록된 모든 술어 인스턴스를 반환한다.

3.3 함수 값의 설정

PDDL의 수치 함수(numeric function)를 사용하는 도메인에서는 함수 값(function value)도 문제 인스턴스에 포함된다. 함수 값은 로봇의 배터리 잔량, 위치 간 거리, 작업 소요 시간 등 수치적 속성을 표현한다.

(battery-level robot1) = 80
(distance kitchen bedroom) = 5.2

함수 값 관련 서비스는 다음과 같다.

  • 함수 값 설정(set function): 특정 함수 인스턴스에 수치 값을 할당한다.
  • 함수 값 조회(get function): 특정 함수 인스턴스의 현재 값을 반환한다.

3.4 목표 조건의 정의

목표 상태(goal state)는 계획 수립의 도달 조건을 정의한다. PlanSys2에서 목표는 PDDL 논리식 문자열로 설정되며, 복합 논리 연산자(and, or, not)를 사용하여 복수의 조건을 결합할 수 있다.

(and (at robot1 bedroom) (holding robot1 cup))

목표 설정 서비스는 목표 논리식을 수신하면 다음과 같은 검증을 수행한다.

  • 목표에 사용된 술어가 도메인에 정의되어 있는지 확인한다.
  • 술어의 인자로 사용된 객체가 문제 인스턴스에 등록되어 있는지 확인한다.
  • 논리식의 구문이 올바른지 파싱하여 검증한다.

4. 동적 생성의 절차적 흐름

문제 인스턴스의 동적 생성은 일반적으로 다음과 같은 절차를 따른다.

  1. 세계 모델 초기화: 로봇 시스템의 인식 모듈이나 상위 수준 제어기가 환경의 현재 상태를 파악하고, 이를 객체와 술어 인스턴스의 형태로 문제 전문가 노드에 전달한다.
  2. 객체 등록: 인식된 모든 개체(entity)를 해당 타입과 함께 객체로 등록한다.
  3. 초기 상태 구성: 개체 간의 관계와 속성을 술어 인스턴스 및 함수 값으로 설정하여 초기 상태를 구성한다.
  4. 목표 설정: 임무 관리자(mission manager) 또는 사용자 인터페이스로부터 수신한 임무 목표를 논리식으로 변환하여 설정한다.
  5. 문제 인스턴스 조립: 문제 전문가 노드는 등록된 객체, 술어 인스턴스, 함수 값, 목표 조건을 조합하여 완전한 PDDL 문제 인스턴스를 생성한다.
  6. PDDL 직렬화: 조립된 문제 인스턴스를 PDDL 텍스트 형식으로 직렬화하여 플래너 노드에 전달할 준비를 완료한다.

5. 프로그래밍 인터페이스를 통한 문제 생성

PlanSys2는 C++ 클라이언트 라이브러리인 ProblemExpertClient를 제공하여, ROS2 노드에서 프로그래밍 방식으로 문제 인스턴스를 생성할 수 있게 한다. 다음은 해당 인터페이스의 주요 메서드를 정리한 것이다.

메서드기능
addInstance(name, type)객체를 등록한다
removeInstance(name)객체를 제거한다
getInstances(type)특정 타입의 객체 목록을 반환한다
addPredicate(predicate)술어 인스턴스를 추가한다
removePredicate(predicate)술어 인스턴스를 제거한다
getPredicates()모든 술어 인스턴스를 반환한다
setFunction(function)함수 값을 설정한다
getFunction(function)함수 값을 조회한다
setGoal(goal)목표 논리식을 설정한다
getGoal()현재 목표를 반환한다
clearGoal()목표를 초기화한다
getProblem()완전한 PDDL 문제 문자열을 반환한다

이 클라이언트를 사용하면, 임의의 ROS2 노드에서 센서 데이터나 외부 명령에 기반하여 문제 인스턴스를 실시간으로 구성할 수 있다.

6. 실시간 상태 갱신과 문제 인스턴스의 진화

로봇 시스템의 운용 중에는 환경 상태가 지속적으로 변화한다. PlanSys2의 문제 전문가 노드는 이러한 변화를 반영하여 문제 인스턴스를 실시간으로 갱신할 수 있는 구조를 갖추고 있다. 예를 들어, 로봇이 특정 위치로 이동을 완료하면 (at robot1 kitchen)을 제거하고 (at robot1 bedroom)을 추가하는 방식으로 세계 상태를 갱신한다. 이러한 점진적 갱신(incremental update) 방식은 전체 문제 인스턴스를 매번 재구성하는 것보다 효율적이며, 재계획(replanning) 시 현재 상태를 정확하게 반영한 문제 인스턴스를 신속하게 제공할 수 있게 한다.

7. 도메인 모델과의 정합성 보장

문제 인스턴스의 동적 생성에서 가장 중요한 요구사항은 도메인 모델과의 정합성(consistency) 유지이다. 문제 전문가 노드는 모든 변경 연산에 대해 도메인 전문가 노드에 정의된 타입, 술어, 함수 정보를 참조하여 검증을 수행한다. 도메인에 정의되지 않은 타입의 객체를 등록하거나, 존재하지 않는 술어를 추가하려는 시도는 거부되며, 이에 대한 오류 메시지가 호출자에게 반환된다. 이 검증 메커니즘은 잘못된 문제 인스턴스가 플래너에 전달되어 무의미한 계획이 생성되거나 플래너가 실패하는 상황을 사전에 방지한다(Martín et al., 2021; Ghallab et al., 2004).


참고 문헌

  • Martín, F., Cañas, J. M., Ginés, J., & Fuentetaja, R. (2021). “PlanSys2: A Planning System Framework for ROS2.” IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS).
  • Ghallab, M., Nau, D., & Traverso, P. (2004). Automated Planning: Theory and Practice. Morgan Kaufmann.
  • Fox, M., & Long, D. (2003). “PDDL2.1: An Extension to PDDL for Expressing Temporal Planning Domains.” Journal of Artificial Intelligence Research, 20, 61–124.

버전: v1.0