1317.40 사용자 정의 액션 수행기 개발
1. 액션 수행기의 역할
PlanSys2에서 액션 수행기(action performer)는 PDDL 수준의 추상적 액션을 로봇의 구체적 물리 행동으로 변환하는 구성 요소이다. 도메인에 정의된 각 PDDL 액션에 대해 최소 하나의 액션 수행기가 구현되어야 하며, 이 수행기가 실제 로봇 제어, 센서 처리, 외부 시스템 호출 등을 담당한다. 사용자 정의 액션 수행기의 개발은 PlanSys2를 실제 로봇 시스템에 적용하는 과정의 핵심 단계이다(Martín et al., 2021).
2. ActionExecutorClient 기반 클래스
2.1 클래스 구조
모든 사용자 정의 액션 수행기는 plansys2::ActionExecutorClient 클래스를 상속하여 구현한다. 이 기반 클래스는 ROS2 라이프사이클 노드를 상속하며, ROS2 액션 서버와 주기적 콜백의 관리를 내부적으로 처리한다.
#include "plansys2_executor/ActionExecutorClient.hpp"
class MoveAction : public plansys2::ActionExecutorClient
{
public:
MoveAction()
: ActionExecutorClient("move", 500ms)
{
}
protected:
void do_work() override;
};
생성자에서 전달되는 인자는 다음과 같다.
| 인자 | 설명 |
|---|---|
| 액션 이름 | 이 수행기가 처리하는 PDDL 액션의 이름 |
| 틱 주기 | do_work() 콜백이 호출되는 주기 |
2.2 핵심 콜백 메서드
개발자가 반드시 오버라이드해야 하는 핵심 메서드는 do_work()이다. 이 메서드는 설정된 틱 주기마다 호출되며, 액션의 실제 행동 로직을 포함한다.
3. 개발 절차
3.1 단계: 행동 로직 설계
PDDL 액션의 의미론(semantics)에 따라, 수행기가 수행해야 하는 구체적 행동을 설계한다. 예를 들어, move 액션의 수행기는 Nav2의 네비게이션 기능을 호출하여 로봇을 목표 위치로 이동시키는 로직을 포함한다.
3.2 단계: 인자 접근
PDDL 액션의 인자는 get_arguments() 메서드를 통해 문자열 벡터로 접근할 수 있다. 각 인자는 PDDL에서 정의된 순서대로 반환된다.
void do_work() override
{
auto args = get_arguments();
// args[0]: robot name
// args[1]: from location
// args[2]: to location
}
3.3 단계: 외부 시스템 연동
액션 수행기 내에서 ROS2의 토픽 발행/구독, 서비스 호출, 액션 클라이언트 등을 사용하여 외부 시스템과 연동한다. 예를 들어, 이동 수행기는 Nav2의 NavigateToPose 액션 클라이언트를 사용하여 네비게이션을 요청한다.
3.4 단계: 피드백 전송
실행 중 주기적으로 send_feedback() 메서드를 호출하여 진행률과 상태 메시지를 보고한다.
send_feedback(progress, "Moving to target");
3.5 단계: 완료 처리
액션이 완료되면 finish() 메서드를 호출하여 결과를 반환한다.
// 성공
finish(true, 1.0, "Arrived at destination");
// 실패
finish(false, 0.5, "Path blocked by obstacle");
4. PDDL 인자와 실세계 매핑
PDDL 액션의 인자는 심볼릭 이름(예: kitchen, bedroom, robot1)이므로, 이를 실세계의 구체적 값(좌표, 식별자 등)으로 변환하는 매핑이 필요하다. 이 매핑은 다음과 같은 방식으로 구현할 수 있다.
- 파라미터 파일 기반: ROS2 파라미터 파일에 심볼릭 이름과 실세계 값의 매핑 테이블을 정의한다.
- 서비스 기반 조회: 외부 지식 베이스 노드에 심볼릭 이름에 대한 실세계 값을 질의한다.
- 하드코딩: 소규모 시스템에서는 코드 내에 직접 매핑을 정의할 수 있다.
# 위치 매핑 파라미터 예시
waypoints:
kitchen: [1.0, 2.0, 0.0]
bedroom: [5.0, 3.0, 1.57]
corridor: [3.0, 2.5, 0.0]
5. 라이프사이클 관리
액션 수행기는 ROS2 관리형 노드이므로, on_configure, on_activate, on_deactivate, on_cleanup 등의 라이프사이클 콜백을 오버라이드하여 초기화와 정리 로직을 구현할 수 있다.
| 콜백 | 활용 |
|---|---|
on_configure | 파라미터 로딩, 외부 클라이언트 초기화 |
on_activate | 구독/발행 활성화, 하드웨어 연결 |
on_deactivate | 구독/발행 비활성화, 하드웨어 해제 |
on_cleanup | 리소스 정리 |
6. 테스트 방법
개발된 액션 수행기는 다음과 같은 수준에서 테스트할 수 있다.
- 단위 테스트: 수행기의 행동 로직을 모의 환경(mock environment)에서 테스트한다.
- PlanSys2 통합 테스트: PlanSys2 터미널 인터페이스를 통해 간단한 계획을 수립하고 실행하여, 수행기가 올바르게 호출되는지 확인한다.
- 시뮬레이션 테스트: Gazebo 등의 시뮬레이터와 연동하여, 로봇의 물리적 행동이 기대대로 이루어지는지 검증한다(Martín et al., 2021).
참고 문헌
- 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).
- Macenski, S., Martín, F., White, R., & Clavero, J. G. (2020). “The Marathon 2: A Navigation System.” IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS).
버전: v1.0