1317.11 노드 간 통신 인터페이스 설계

1. 통신 인터페이스의 개요

PlanSys2의 4대 핵심 노드와 외부 시스템 간의 통신은 ROS2의 세 가지 표준 통신 패턴(서비스, 액션, 토픽)을 조합하여 설계된다. 각 통신 패턴은 상호 작용의 성격에 따라 적절히 선택된다.

2. 통신 패턴의 선택 기준

통신 패턴사용 기준PlanSys2에서의 활용
서비스(Service)동기적 요청-응답, 짧은 처리도메인/문제 조회, 상태 갱신
액션(Action)비동기적 장시간 작업, 피드백 필요계획 실행, 개별 액션 수행
토픽(Topic)비동기적 데이터 스트림, 발행-구독실행 상태 모니터링

3. 서비스 기반 통신

3.1 Domain Expert 서비스

서비스:
  /domain_expert/get_domain           → 도메인 텍스트 반환
  /domain_expert/get_domain_types     → 타입 목록 반환
  /domain_expert/get_domain_predicates → 술어 목록 반환
  /domain_expert/get_domain_actions   → 액션 목록 반환
  /domain_expert/get_action_details   → 액션 상세 반환

3.2 Problem Expert 서비스

서비스:
  /problem_expert/add_instance        → 객체 추가
  /problem_expert/remove_instance     → 객체 삭제
  /problem_expert/get_instances       → 객체 목록 조회
  /problem_expert/add_predicate       → 술어 추가
  /problem_expert/remove_predicate    → 술어 삭제
  /problem_expert/get_predicates      → 술어 목록 조회
  /problem_expert/add_function        → 함수 값 설정
  /problem_expert/set_goal            → 목표 설정
  /problem_expert/get_problem         → 문제 텍스트 생성

3.3 Planner 서비스

서비스:
  /planner/get_plan                   → 계획 생성 및 반환

4. 액션 기반 통신

4.1 계획 실행 액션

Executor는 ROS2 액션 서버로서 계획 실행을 관리한다:

액션 서버:
  /executor/execute_plan
    Goal: Plan 메시지
    Feedback: 각 액션의 실행 상태
    Result: 성공/실패 및 최종 상태

4.2 개별 액션 실행

Executor가 ActionExecutorClient 노드에 개별 액션 실행을 위임할 때 ROS2 액션 인터페이스를 사용한다:

액션 서버 (각 ActionExecutorClient):
  /<action_name>
    Goal: 액션 이름 + 매개변수
    Feedback: 진행률 + 상태 메시지
    Result: 성공/실패 + 완료 정보

5. 토픽 기반 통신

5.1 실행 상태 피드백

토픽:
  /executor/action_execution_info     → 각 액션의 실행 상태 스트림
    메시지 내용: 액션 이름, 상태(실행 중/완료/실패), 진행률

5.2 Problem Expert 상태 변경 알림

토픽:
  /problem_expert/update_notify       → 세계 상태 변경 알림
    메시지 내용: 변경 유형(추가/삭제), 변경된 술어/객체

6. 클라이언트 라이브러리를 통한 통신 추상화

PlanSys2는 C++ 클라이언트 라이브러리를 제공하여, 개발자가 ROS2 서비스/액션/토픽을 직접 다룰 필요 없이 고수준 API로 통신할 수 있게 한다:

// 클라이언트 라이브러리가 서비스 호출을 추상화
auto problem_client = std::make_shared<plansys2::ProblemExpertClient>();
problem_client->addPredicate(plansys2::Predicate("(robot_at robot1 wp1)"));
// → 내부적으로 /problem_expert/add_predicate 서비스 호출

7. QoS(Quality of Service) 설정

PlanSys2의 통신에 적용되는 QoS 정책:

통신신뢰성이력내구성
서비스ReliableKeep lastVolatile
액션ReliableKeep lastVolatile
상태 토픽Best effortKeep last (1)Volatile

8. 참고 문헌

  • Gonzalez, F., Martin, F., Matellán, V., & Rodriguez, F. J. (2021). “PlanSys2: A Planning System Framework for ROS2.” IEEE ICARSC.
  • Macenski, S., Foote, T., Gerkey, B., Lalancette, C., & Woodall, W. (2022). “Robot Operating System 2: Design, Architecture, and Uses in the Wild.” Science Robotics, 7(66), eabm6074.