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 정책:
| 통신 | 신뢰성 | 이력 | 내구성 |
|---|---|---|---|
| 서비스 | Reliable | Keep last | Volatile |
| 액션 | Reliable | Keep last | Volatile |
| 상태 토픽 | Best effort | Keep 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.